为什么Python编写国际象棋棋盘的for循环只重复执行第一个if语句?
问题原因分析
你的代码错误出在条件判断的逻辑写法上:
Python中==运算符优先级高于or,所以你写的i == 0 or 7会被程序解析为(i == 0) or (7)。而在Python的布尔判断规则里,非零整数属于真值,也就是说7的判断结果永远是True,这就导致第一个if判断的结果永远成立,不管循环变量i是0到7里的哪个值,都会进入第一个分支添加王室棋子行,最终输出的8行全是王室行。
你拆分独立elif子句后相当于修正了判断逻辑,所以结果正常。
正确的条件写法参考
有两种常用的正确写法可以实现你要的逻辑:
- 补全完整判断条件:
if i == 0 or i == 7、elif i == 1 or i == 6 - 用成员运算符写法更简洁:
if i in (0,7)、elif i in (1,6)
修正后完整代码
# 棋子常量定义 EMPTY = "-" ROOK = "ROOK" KNIGHT = "KNIGHT" BISHOP = "BISHOP" QUEEN = "QUEEN" KING = "KING" PAWN = "PAWN" board = [] # 初始化棋盘 for i in range(8): if i in (0, 7): board.append([ROOK,KNIGHT,BISHOP,QUEEN,KING,BISHOP,KNIGHT,ROOK]) elif i in (1, 6): board.append([PAWN for _ in range(8)]) else: board.append([EMPTY for _ in range(8)]) # 打印棋盘 for row in board: print(row)
内容的提问来源于stack exchange,提问作者Binomial_Gnome
相关产品推荐
相关产品推荐

