在 Python 中使用表格创建棋盘图案

creating chessboard pattern with tables in python

提问人:tinkiniminki 提问时间:12/19/2022 最后编辑:AKXtinkiniminki 更新时间:12/19/2022 访问量:92

问:

我需要制作一个充满 0 和 1 的棋盘图案,但它不一定是方桌 我需要从用户那里获取行和列

举个例子:

1 0 1 0 1 0 1 0

0 1 0 1 0 1 0 1

1 0 1 0 1 0 1 0

0 1 0 1 0 1 0 1

1 0 1 0 1 0 1 0

我有解决方案,但我无法理解最后一行代码() 我们可以用另一种方法解决吗?table[i][j] = int(not table[i][j-1])

m = int(input("insert number of rows: "))
n = int(input("insert number of colomns: "))

table = list()

for i in range(0,m):

    if i%2 == 0 :
        table[i][0] = 1
    else:
        table[i][0] = 0

    for j in range(1,n):
        table[i][j] = int(not table[i][j-1])

print("print the table with chessboard pattern")
for i in range(0,m):
    for j in range(0,n):
        print(table[i][j],end='')
    print() 
Python 循环多 维数组 嵌套列表

评论

0赞 Michael Butscher 12/19/2022
“not” 切换 True 和 False(实际上它稍微复杂一些),“int(True)” 是 1,“int(False)” 是 0。Python 将布尔值定义为具有这些值。写这行的另一种方法是在这里具有相同的效果。table[i][j] = 1 - table[i][j-1]

答:

0赞 AKX 12/19/2022 #1

使用嵌套列表推导式,您将有更简单的时间,该推导式使用正在生成的单元格的坐标和模运算符在两个值之间交替:xy%

n_rows = n_cols = 5

table = [
    [((x + y + 1) % 2) for x in range(n_cols)]
    for y in range(n_rows)
]

for row in table:
    print(*row)

打印输出

1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1

列表推导也可以写成嵌套的循环。

table = []

for y in range(n_rows):
    row = []
    for x in range(n_cols):
        row.append((x + y + 1) % 2)
    table.append(row)
0赞 nokla 12/19/2022 #2

第 6 行将出现错误,因为无法为不存在的索引赋值。

您可以改为执行此操作:

m = int(input("insert number of rows: "))
n = int(input("insert number of colomns: "))

table = []

for i in range(m):
    if i%2==0:
        table.append([0+j%2 for j in range(n)])
    else:
        table.append([0+j%2 for j in range(1, n+1)])

您也可以像这样打印它:

print("".join([str(row).replace('[', '').replace(']', '\n').replace(', ', ' ') for row in table]))