Python中if多or条件判断时else语句不生效如何解决?
问题根因
- Python中逻辑运算符
or的左右是独立的布尔判断单元,你写的条件没有为每个字符串指定比较对象,实际会被解析为:if (ans1 == "yes") or (bool("Yes")) or (bool("Yeah")) or (bool("yeah")) or (bool("indubitably")): - 非空字符串的布尔值恒为
True,因此无论用户输入什么,整个条件表达式的结果永远是True,只会走if分支。 - 注意
firstdenial函数里的ans3判断也存在完全相同的逻辑问题。
修复方法
有两种可行写法,推荐第二种更简洁易维护的方案:
写法1:补全所有判断逻辑
把每个待匹配的字符串都和输入变量做等值判断:
# 对应ans1的判断 if ans1 == "yes" or ans1 == "Yes" or ans1 == "Yeah" or ans1 == "yeah" or ans1 == "indubitably": firstanswer() else: firstdenial()
写法2(推荐):用成员运算简化判断
把所有合法输入存入列表,用in关键字判断输入是否在合法列表中,同时可以通过转小写兼容更多大小写输入场景,减少冗余匹配项:
# 先把输入统一转小写,只需要匹配小写形式即可,兼容各种大小写输入 if ans1.lower() in ["yes", "yeah", "indubitably"]: firstanswer() else: firstdenial()
同理ans3的判断也可以同步修改为:
if ans3.lower() in ["yes", "yeah", "indubitably"]: gametime() else: print ("well funk you, stupid delinquent instead of playing a game go read a book.") exit()
内容的提问来源于stack exchange,提问作者hatboi
相关产品推荐
相关产品推荐

