基础计算器代码第8行未按预期工作,原因是什么?
运算符输入验证问题
问题代码
while Operator != "+" and "-" and "*" and "^" and "/" and "/+" and "v-": Operator = input("Please write an operator (+, -, *, ^, /, /+, v-): ")
问题情况
原本想实现:输入内容不在指定运算符(+, -, *, ^, /, /+, v-)里时,就让用户重新输入。但实际只有输入+时程序能正常停止,输入-、*这些其他合法运算符时,程序还是一直让重新输入。试过把and改成or、改用while not Operator ==的写法都没用,也找不到.isoperator这种方法。
简单解决方案
核心是你写的判断逻辑不符合Python的语法规则,直接用in和列表来判断最省事,适合刚学的新手:
修改后的代码:
# 把所有合法运算符放进一个列表里 valid_ops = ["+", "-", "*", "^", "/", "/+", "v-"] # 先给变量赋个空值,保证第一次循环能执行 operator = "" # 只要输入的内容不在合法列表里,就一直让用户输入 while operator not in valid_ops: operator = input("Please write an operator (+, -, *, ^, /, /+, v-): ")
原代码出错原因
原来的while Operator != "+" and "-" and "*"...逻辑完全不对,Python会把它拆成多个独立判断:
- 先看
Operator != "+"是不是真的 - 然后看
"-"这个字符串本身,非空字符串在Python里会被当成True - 后面的
"*"、"^"等也都是True
所以只有当输入+时,Operator != "+"是False,整个判断结果是False,循环才会停;输入其他任何值,Operator != "+"是True,加上后面全是True,整个判断结果就是True,循环就一直跑。
内容的提问来源于stack exchange,提问作者Someone
相关产品推荐
相关产品推荐

