Python条件判断逻辑异常排查:jantina != ('L' or 'P')错误问题
解决Python中判断输入不在指定选项的逻辑错误
问题根源
你写的判断语句 if jantina != ("L" or "P"): 存在逻辑错误,因为Python的逻辑或运算(or)会返回第一个真值——这里"L"是字符串,属于真值,所以"L" or "P"的结果直接是"L"。这就导致你的判断等价于 if jantina != "L",完全不符合你“输入既不是L也不是P时触发分支”的需求。
同理,如果你换成and,"L" and "P"会返回最后一个真值"P",判断就变成if jantina != "P",同样达不到预期。
正确写法
有两种简洁且符合逻辑的写法:
- 逻辑与组合两次不等于判断
if jantina != "L" and jantina != "P":
这种写法直白表达“既不是L,也不是P”的逻辑。
- 用
not in判断是否不在指定集合中
if jantina not in {"L", "P"}:
这种写法更简洁,尤其是当可选值较多时,用集合({})的查询效率也更高,也可以用列表["L", "P"]替代。
修正后的完整函数
from time import sleep from os import system def kalkulatorKalori(): print("1. Sedentari: Anda jarang melakukan aktiviti senaman, hanya yang melibatkan aktiviti seharian") print("2. Moderasi: Anda melakukan aktiviti senaman lebih kurang 2-5 kali seminggu") print("3. Aktif: Anda melakukan aktiviti senaman 6-7 kali seminggu") jantina = input(str("Masukkan jantina anda [L/P]: ")) # 修正后的判断语句 if jantina not in {"L", "P"}: print("Itu bukan pilihan yang dibenarkan.") sleep(3) system("clear") kalkulatorKalori() umur = input(str("Masukkan umur anda: ")) if int(umur) < 13: print("Itu bukan pilihan yang dibenarkan.") sleep(3) system("clear") kalkulatorKalori() activity = input(str("Masukkan kadar keaktifan anda [1-3]: ")) if activity == "3": keaktifan = 3 elif activity == "2": keaktifan = 2 elif activity == "1": keaktifan = 1 else: print("Pilihan anda perlulah [1-3]") sleep(3) system("clear") kalkulatorKalori() return keaktifan, jantina, umur
额外提示
如果需要兼容小写输入(比如用户输入l或p),可以在获取输入后转成大写:
jantina = input(str("Masukkan jantina anda [L/P]: ")).upper()
内容的提问来源于stack exchange,提问作者Ryan Avery
相关产品推荐
相关产品推荐

