input() 总返回字符串,故“+”为拼接而非加法;需 strip() 后用 float() 安全转换,捕获 valueerror;运算符用 set 验证并 strip() 去空格;除零需 try 捕获;退出用 while true + 'q'/'quit' 判断;禁用 eval,应硬编码四则运算分支。

为什么 input() 读到的永远是字符串,导致 + 变拼接?
因为 Python 的 input() 不管你输数字还是字母,一律返回 str。直接对两个 str 用 +,就是拼接,不是加法。比如输 12 和 34,"12" + "34" 得到 "1234",而不是 46。
必须显式转类型,但不能无脑 int() —— 用户可能输小数、负数、空格甚至字母。
- 先用
strip()去首尾空格,避免" 12 "导致转换失败 - 优先尝试
float(),它能兼容整数(float("5") → 5.0)和小数,比int()更鲁棒 - 捕获
ValueError,提示“请输入有效数字”,而不是让程序崩在int("abc")
怎么安全解析运算符并拒绝非法符号?
用户可能输 ++、/=、** 甚至中文顿号,但简易计算器只支持四则: +、-、*、/。不能靠 if op == '+' or op == '-' ... 硬写,容易漏或错。
更稳的做法是预定义合法集合,用 in 判断:
可编程序控制器,英文称Programmable Controller,简称PC。但由于PC容易和个人计算机(Personal Computer)混淆,故人们仍习惯地用PLC作为可编程序控制器的缩写。它是一个以微处理器为核心的数字运算操作的电子系统装置,专为在工业现场应用而设计,它采用可编程序的存储器,用以在其内部存储执行逻辑运算、顺序控制、定时/计数和算术运算等操作指令,并通过数字式或模拟式的输入、输出接口,控制各种类型的机械或生产过程。本平台提供PLC编程入门基础知识下载,需要的朋友们下载看看吧!
valid_ops = {'+', '-', '*', '/'}
if op not in valid_ops:
print("不支持的运算符,请输入 + - * / 中的一个")
continue- 用
set而不是list,查得快,语义也更准(运算符是离散值,不是有序序列) - 注意空格干扰:用户可能输
" + ",所以判断前要op.strip() -
/要单独检查除零,10 / 0会抛ZeroDivisionError,得包在try里
如何让计算器持续运行又支持优雅退出?
用 while True: 最直接,但得给用户明确的退出路径。别让用户猜 “输什么停”,更别让 Ctrl+C 成唯一出口。
- 约定输入
q或quit退出,且不区分大小写:if user_input.lower() in ['q', 'quit']: - 退出前清屏不是必须的,但加一句
print("再见")体验好很多 - 别把退出逻辑塞进数字/运算符校验分支里——退出是独立动作,应放在最外层输入处理后立即判断
- 如果用户输了一半就敲回车(比如只输
5没输运算符),当作无效输入,打印提示后继续循环,不要崩
eval() 能不能用来偷懒做运算?
不能。虽然 eval("12 + 34") 看似省事,但它会执行任意代码,用户输 __import__('os').system('rm -rf /') 就真执行了。
简易计算器的运算逻辑就四条,硬编码更安全、更透明、更容易调试。
- 用
if/elif/else分支匹配运算符,每个分支只做对应算术操作 - 所有输入都已转为
float,所以a * b、a / b都是原生浮点运算,无需额外库 - 如果后续要加幂或取余,也应显式写
**或%分支,而不是放开口子给eval
真正麻烦的从来不是写四个 if,而是没处理好空输入、空格、小数点位置、负号粘连这些边界情况。









