You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python实现非方形0-1棋盘格:代码疑问与替代方案

非方形0-1棋盘格实现问题解答

关于int(not table[i][j-1])的解释

这个语句的作用是让当前位置的数值和同一行的前一列数值相反,拆解细节:

  • table[i][j-1]:获取当前第i行、第j-1列(前一列)的数值(0或1)
  • not:对数值取反——Python里0等价于布尔值False,1等价于True,因此not 0得到True,not 1得到False
  • int():将布尔值转为整数,True对应1,False对应0
    合起来就是:前一列是0则当前列设为1,前一列是1则当前列设为0,以此实现每行的0、1交替排列。

另外注意:原代码存在bug——初始化时table = list()是空列表,直接使用table[i][0]会触发索引错误,必须在每个行循环开头先给table添加空列表,修正后的行循环开头代码如下:

for i in range(m):
    table.append([])  # 先添加空行,避免索引错误
    if i % 2 == 0:
        table[i].append(1)
    else:
        table[i].append(0)
    # 后续j循环逻辑不变

其他实现方法

方法1:利用行号+列号的奇偶性(最简洁)

核心逻辑:行号i与列号j的和为偶数时输出1,奇数时输出0(若要起始为0,可改为(i+j)%2),代码示例:

m = int(input("输入行数: "))
n = int(input("输入列数: "))

print("棋盘格结果:")
for i in range(m):
    print(' '.join(str(1 - (i + j) % 2) for j in range(n)))

方法2:基于重复模式字符串截取

先定义偶数行、奇数行的基础交替模式,重复后截取到目标列数:

m = int(input("输入行数: "))
n = int(input("输入列数: "))

even_pattern = '1 0' * (n // 2 + 1)
odd_pattern = '0 1' * (n // 2 + 1)

print("棋盘格结果:")
for i in range(m):
    if i % 2 == 0:
        print(' '.join(even_pattern.split()[:n]))
    else:
        print(' '.join(odd_pattern.split()[:n]))

方法3:列表推导式生成整个棋盘

一次性生成二维棋盘列表,再逐行打印:

m = int(input("输入行数: "))
n = int(input("输入列数: "))

# 生成棋盘,1 - (i+j)%2 控制起始为1,若要起始为0直接用(i+j)%2
chessboard = [[1 - (i + j) % 2 for j in range(n)] for i in range(m)]

print("棋盘格结果:")
for row in chessboard:
    print(' '.join(map(str, row)))

内容的提问来源于stack exchange,提问作者tinkiniminki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:05:16