Python代码无论输入如何都执行if语句、不触发elif分支问题求解
问题根因
代码中的逻辑运算符or使用不符合语法规则,Python中or连接的是两个独立的布尔表达式:
你写的if ans1 == 'Yes' or 'Y'实际执行逻辑为:
先判断
ans1 == 'Yes'的布尔结果,再判断'Y'的布尔值
非空字符串的布尔值恒为True,所以无论用户输入什么内容,整个if条件的判断结果永远为True,永远会进入if分支,不会触发elif逻辑。
修复方案
有两种常用的修正写法,任选其一即可:
写法1:补全所有判断条件
把or两侧的判断都补全为完整的布尔表达式:
if ans1 == 'Yes' or ans1 == 'Y': print("You have gained 1 point") elif ans1 == 'No' or ans1 == 'N': print(" You have chosen to leave the coin.") print("You did not gain a point.")
写法2:使用成员运算符简化判断
用in判断输入是否在目标值集合里,代码更简洁易读:
if ans1 in ('Yes', 'Y'): print("You have gained 1 point") elif ans1 in ('No', 'N'): print(" You have chosen to leave the coin.") print("You did not gain a point.")
优化建议(可选)
可以在接收输入时顺便去除首尾空格、统一大小写,兼容用户的不规范输入:
# 去除首尾空格后统一转大写,匹配时就不用区分用户输入的大小写 ans1 = input("Will you take the coin? Yes or No?").strip().upper() if ans1 in ('YES', 'Y'): print("You have gained 1 point") elif ans1 in ('NO', 'N'): print(" You have chosen to leave the coin.") print("You did not gain a point.")
完整修正后代码
print("Treasure Quest") print("------------") name = input("What is your name traveler?") print(f"Your game name for this game is: {name}") goldCoin = "Take this gold coin, it's rare!" ans1 = input("Will you take the coin? Yes or No?").strip() if ans1 in ('Yes', 'Y'): print("You have gained 1 point") elif ans1 in ('No', 'N'): print(" You have chosen to leave the coin.") print("You did not gain a point.")
内容的提问来源于stack exchange,提问作者Dancing Mudkipz
相关产品推荐
相关产品推荐

