基于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得到Falseint():将布尔值转为整数,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
相关产品推荐
相关产品推荐

