Python编写四则计算器仅能执行加法运算的问题排查
问题根因
代码始终执行加法的核心错误出在运算符判断的条件写法上:
你当前写的判断逻辑形如if op == "+" or "add" or "plus":,在Python的语法规则中,这类写法不会被解析为「op等于+,或者op等于add,或者op等于plus」,而是会被拆分为三个独立的布尔判断:
op == "+""add""plus"
Python中非空字符串的布尔值恒为True,因此不管你输入什么运算符,第一个if分支的条件永远为真,会直接执行加法逻辑并返回结果,后续的乘、除、减分支永远不会被触发。
除此之外现有代码还存在三个潜在问题:
- 除法运算没有做除数为0的校验,输入0作为第二个数时会直接抛出
ZeroDivisionError崩溃 - 输入错误时调用subprocess重启自身的逻辑容易产生递归进程残留,鲁棒性很差
- 函数定义中传入的
result参数属于冗余参数,完全没有实际作用
修复后代码
直接替换原有代码即可,修复后的完整可运行代码如下:
import time print("This is a calculator") time.sleep(1) def cal(num1, op, num2): op = op.strip().lower() if op in ("+", "add", "plus"): return num1 + num2 elif op in ("*", "multiply", "star", "x"): return num1 * num2 elif op in ("/", "divide", "slash"): if num2 == 0: return "错误:除数不能为0" return num1 / num2 elif op in ("-", "subtract", "minus"): return num1 - num2 else: return None while True: try: num1 = float(input("Write a number of your choice: ")) op = input("Choose an operator: + - * / (or you can write their names)") num2 = float(input("Write another number of your choice: ")) res = cal(num1, op, num2) if res is None: print("运算符输入无效,请重新输入\n") continue print(res) break except ValueError: print("数字输入无效,请输入合法数值,重新输入\n")
修复点说明
- 替换原有的错误条件判断逻辑,改用
in做成员匹配,写法更简洁,从根源避免or连接常量导致的条件恒真问题;同时增加输入预处理,自动去除运算符前后空格、统一转小写,兼容用户输入的大小写、误输空格场景 - 移除冗余的
result传参,删除不必要的os/subprocess/sys依赖,减少不必要的资源开销 - 新增除零校验,除数为0时直接返回友好提示,不会触发程序崩溃
- 用当前进程内的循环+异常捕获替换原有的子进程重启逻辑,输入错误时直接提示重输,不会产生递归进程残留
- 新增数字输入的异常捕获,用户误输入非数字内容时不会直接崩溃,提示后重新输入即可
内容的提问来源于stack exchange,提问作者alahmar alrafik
相关产品推荐
相关产品推荐

