Python中or运算符误用问题求助:条件判断逻辑错误解析
解析原代码中
or运算符的逻辑错误 这是个Python初学者非常容易踩的逻辑运算符坑,我来给你拆解清楚~
原代码的问题核心
你原代码里的判断条件:
if answer == "y" or "Y":
Python会按照运算符优先级把它解析成:
if (answer == "y") or ("Y"):
在Python的布尔规则里,非空字符串会被直接判定为True。也就是说,不管前面的answer == "y"是否成立,后面的"Y"本身就是一个真值,所以整个or表达式的结果永远是True——这就导致哪怕你传入"N",程序也会执行print("Yes")的分支。
几种正确的写法
你用lower()统一转小写的解法非常优雅,除此之外还有两种常见的正确写法:
- 明确写出两个相等判断:
def printresults(answer): if answer == "y" or answer == "Y": print("Yes") else: print("No") - 用
in判断是否在目标集合里:def printresults(answer): if answer in {"y", "Y"}: print("Yes") else: print("No")
你的lower()写法其实是最简洁的,只需要一次转换就能覆盖所有大小写情况,避免重复写判断条件,非常推荐~
内容的提问来源于stack exchange,提问作者RJK




