Python中IN运算符内使用逗号和OR的区别是什么?
两种写法差异的核心原因
两种写法的in运算符右侧的求值逻辑完全不同,才导致运行结果不一致:
带or的错误写法原理
or是Python的逻辑运算符,括号包裹时会优先计算括号内的表达式结果:
- 逻辑或
or的运行规则是:返回第一个布尔值为真的操作数,所有非空字符串的布尔值都是True,所以("X" or "O")的计算结果直接是字符串"X"。 - 此时你的循环条件等价于
input_from_user not in "X",只有输入"X"时才会退出循环,哪怕输入合法的"O",也会因为不在字符串"X"中,始终满足循环条件继续弹窗,无法符合需求。
带逗号的正确写法原理
括号内用逗号分隔多个值时,Python会将其识别为元组类型:
("X", "O")是包含两个元素的元组,存储了"X"和"O"两个合法值。in运算作用于元组时,会判断左侧值是否为元组中的任意一个元素,只要输入"X"或"O",not in的结果就会为False,循环正常退出,符合输入校验的要求。
如果不习惯用元组判断,也可以把条件写成while input_from_user != "X" and input_from_user != "O",运行效果和正确写法完全一致。
内容的提问来源于stack exchange,提问作者Mente
相关产品推荐
相关产品推荐

