Операция с цифрами Python
Здраввствуйте ! Не мог понять как вывести требуемое значение.
Необходимо написать функцию, чтобы вышел такой образец:
chessdesk(3)
print()
chessdesk(6)
101
010
101
101010
010101
101010
010101
101010
010101
Мой код:
def chessdesk(n):
print(n *("101" +'\n'))
def chessdesk1(b):
print(b *("10"*3 +'\n'))
if __name__ == "__main__":
chessdesk(3)
print()
chessdesk1(6)
Ответы (3 шт):
Автор решения: entithat
→ Ссылка
Проходимся по каждой строке шахматной доски и заполняем её строками 0101... либо 1010... и обрезаем.
def chessdesk(l):
return '\n'.join((['10', '01'][i&1] * l)[:l] for i in range(l))
print(chessdesk(3))
print(chessdesk(6))
Автор решения: Chernocringing
→ Ссылка
Не знаю насколько оно эффективно, но выглядит элегантно.
def chessdesk(f):
g = 0
s = ""
for i in range(f):
g = g*2+(~g%2)
for i in range(f):
if i%2:
s+= "0"+bin(g>>1)[2:]
else:
s+= bin(g)[2:]
s+= "\n"
return s
Автор решения: TigerTV.ru
→ Ссылка
Задействуем меньше памяти:
from itertools import cycle
def chessdesk(n):
i = 0
row = []
for c in cycle('10'):
if i >= n:
break
row.append(c)
i += 1
sec_row = row[:]
sec_row.insert(0, '0')
sec_row.pop()
sec_row = "".join(sec_row)
row = "".join(row)
i = 0
res = []
for c in cycle([row, sec_row]):
if i >= n:
break
res.append(c)
i += 1
return "\n".join(res)
print(chessdesk(3))
print(chessdesk(6))