如何用单行if语句判断多个元素均为X或Y且无需额外elif
原有写法的问题
你当前写的语句不符合Python语法规则,运行会直接报错,就算调整语法后逻辑也不成立:and连接的三个表达式只会分别判断self.game_field[0][0]是否为真值、self.game_field[0][1]是否为真值、self.game_field[0][2]是否等于"X",后面的", "Y"会被当成元组返回,完全达不到校验三个值都是X或者都是Y的效果。
单行校验方案
你要实现的「三个格子取值完全相同,且为X或Y」的判断逻辑,可以直接用以下单行if语句实现,不需要额外elif分支:
# 判断第一行是否为获胜行 if self.game_field[0][0] == self.game_field[0][1] == self.game_field[0][2] in ("X", "Y"): # 获胜后的逻辑
该写法利用了Python的两个语法特性:
- 链式比较:
a == b == c会自动校验三个值完全相等,等价于a == b and b == c - 成员判断:末尾的
in ("X", "Y")会校验前面相等的取值确实属于允许的获胜字符,不需要额外分支判断X和Y两种情况
如果要一次性判断所有获胜组合(三行、三列、两条对角线),也可以写成单行逻辑:
# 汇总所有获胜线:三行、转置后的三列、两条对角线 win_lines = [*self.game_field, *zip(*self.game_field), (self.game_field[0][0], self.game_field[1][1], self.game_field[2][2]), (self.game_field[0][2], self.game_field[1][1], self.game_field[2][0])] # 任意一条线满足获胜条件就判定获胜 if any(line[0] == line[1] == line[2] in ("X", "Y") for line in win_lines): # 获胜后的逻辑
内容的提问来源于stack exchange,提问作者Foertsch
相关产品推荐
相关产品推荐

