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

为什么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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:48:04