能否用单个party!=表达式简化while多条件and/or判断?
Python条件表达式简化问题解答
原代码
while party!='R' and party!='D':
疑问
能不能把上面的代码简化成以下形式(或类似写法),也就是只用一个party!=实现等价逻辑?
while party!='R' and 'D':while party!=('R' and 'D'):
解答
你给出的两种写法都无法实现原逻辑,而且不存在仅用一个party!=就能等价替换原表达式的写法,具体原因如下:
分析
while party!='R' and 'D':
Python的and逻辑运算符会按顺序判断两边的布尔值:左边party!='R'是正常的条件判断,但右边的'D'是个非空字符串,在布尔判断里永远为True。所以这个语句实际等价于while party!='R':,和原逻辑(要求party既不是'R'也不是'D')完全不一样。分析
while party!=('R' and 'D'):
在Python中,字符串做and运算时,若第一个字符串非空,会直接返回第二个字符串,也就是'R' and 'D'的结果是'D'。所以这个语句等价于while party!='D':,同样不符合原逻辑。
推荐的简化写法
如果想简化原逻辑,不用重复写两次party!=,可以用成员运算符not in,写法简洁且语义明确:
# 用集合(查找效率更高) while party not in {'R', 'D'}:
或者用列表也可以:
while party not in ['R', 'D']:
这两种写法和原代码的逻辑完全等价,可读性也更强。
内容的提问来源于stack exchange,提问作者user84614
相关产品推荐
相关产品推荐

