为何!=运算符无法用于字符串索引的多值比较?
问题:为何Python中
!= ('N' or 'A' or 'C')写法不生效? 输入"AC039"运行以下代码时,输出错误提示The first character must be N, A or C:
code = input("Enter code: ").upper() if code[0] != ('N' or 'A' or 'C' ): print("The first character must be N, A or C") else: print("Pass!")
但使用not in的代码却正常输出Pass!:
code = input("Enter code: ").upper() if code[0] not in ["N", "A", "C"]: print("The first character must be N, A or C") else: print("Pass!")
已通过type函数确认code[0]和'A'均为str类型,为何第一段代码中的!=写法不生效?
原因解析
问题出在('N' or 'A' or 'C')这个表达式的求值逻辑上:
- 在Python中,
or运算符是短路求值,会依次判断每个操作数,返回第一个为“真”的对象。 - 非空字符串在Python里属于真值,所以
'N' or 'A' or 'C'会直接返回第一个真值'N',整个表达式等价于'N'。 - 所以第一段代码的判断条件实际是
code[0] != 'N',当输入AC039时,code[0]是'A',满足'A' != 'N',因此触发错误提示。
而not in ["N", "A", "C"]的写法是正确的,它会检查字符是否不在指定的列表集合中,逻辑完全符合需求。
内容的提问来源于stack exchange,提问作者stella
相关产品推荐
相关产品推荐

