为什么a==("B" or "C")在a等于"C"时不生效?Python条件判断问题
问题成因
Python 中or是短路运算符,运算时会从左到右判断操作数的布尔值,返回第一个为真的操作数,只有所有操作数都为假时才返回最后一个操作数。由于非空字符串的布尔值恒为True,因此("done" or "Done")的求值结果就是第一个字符串"done",你写的判断逻辑实际等价于if inp == "done":,自然无法匹配"Done"的输入。
你提到的if a == ("B" or "C")也是完全相同的逻辑:表达式先求值得到"B",因此仅当a等于"B"时条件才会成立,a为"C"时永远不触发。
多值匹配的修改方案
有三种常用的实现方式,可根据场景选择:
- 分开写全等判断,用
or直接连接:if inp == "done" or inp == "Done": - 统一转换大小写后判断,可适配所有大小写组合的
done输入(比如DONE、DonE都能识别):if inp.lower() == "done": - 用成员运算符
in匹配指定集合,适合需要匹配的目标值较多的场景:if inp in ("done", "Done", "exit", "quit"):
优化后的完整代码
针对你原代码的其他问题做了额外修复:避免用sum做变量名(覆盖Python内置sum函数)、替换风险极高的eval为安全的类型转换、增加输入校验和除零保护:
sum_total = 0 count = 0 while True: inp = input("Enter a number:") if inp.lower() == "done": break try: value = float(inp) except ValueError: print("无效输入,请输入数字或者输入done结束") continue sum_total += value count += 1 if count == 0: print("未输入任何有效数字,无法计算平均值") else: print(f"平均值为:{sum_total / count}")
内容的提问来源于stack exchange,提问作者Tianyu He
相关产品推荐
相关产品推荐

