Операция с цифрами 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))
→ Ссылка