逻辑非运算符未按预期工作:简易计算器输入校验异常
问题分析与修复方案
你的校验代码逻辑完全写错了,导致不管输入是不是数字,都会触发错误提示。
原代码的问题
原条件if not "1" or "2" or "3" or "4" or "5" or "6" or "7" or "8" or "9" or "0" in number1 or number2:的逻辑等价于(not "1") or "2" or "3" ... or ("0" in number1) or number2。因为非空字符串在布尔判断里都是True,所以"2"本身就是True,整个条件永远为True,自然每次都会执行错误提示。
正确的实现方式
方法1:检查输入是否全为数字(仅支持正整数)
直接用字符串的isdigit()方法,简洁高效:
if not (number1.isdigit() and number2.isdigit()): print("Error! One of the numbers is not a number!") quit()
方法2:手动遍历字符检查(适合理解逻辑)
如果想手动实现字符校验,要确保输入的每个字符都是0-9中的一个:
# 定义数字字符集合 digits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"} # 检查number1的每个字符 for char in number1: if char not in digits: print("Error! One of the numbers is not a number!") quit() # 检查number2的每个字符 for char in number2: if char not in digits: print("Error! One of the numbers is not a number!") quit()
方法3:支持负数和小数(如果你的计算器需要)
如果要允许输入负数或带小数点的数字,用异常捕获的方式更可靠:
try: # 尝试把输入转成浮点数 num1 = float(number1) num2 = float(number2) except ValueError: print("Error! One of the numbers is not a number!") quit()
内容的提问来源于stack exchange,提问作者tabby
相关产品推荐
相关产品推荐

