You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:27:03