
本文讲解如何用 while 循环构建一个可重复运行的命令行计算器,支持加减乘除四则运算及安全退出,修正原代码中循环位置错误、逻辑断裂和用户体验缺陷等问题。
在开发简易命令行计算器时,一个常见需求是:让用户反复选择运算类型、输入数字、查看结果,直到主动选择“退出”为止。原代码试图用 while (i > select) 控制流程,但该条件恒为假(因 i 初始为 0,select 至少为 1),导致循环体从未执行;更严重的是,整个操作逻辑被包裹在一次性执行结构中,无法实现“持续交互”。
正确的做法是将主流程置于一个无限循环 while True: 内,并在每次迭代开头提示用户选择操作,再根据选项分支处理——这才是符合人机交互直觉的设计。
以下是优化后的完整可运行代码:
def add(x, y):
return x + y
def sub(x, y):
return x - y
def mul(x, y):
return x * y
def div(x, y):
if y == 0:
return "Error: Division by zero!"
return x / y # float() 非必需,Python 3 中 / 默认返回浮点数
print('''Please select operation:
1. Add
2. Subtract
3. Multiply
4. Divide
5. Exit''')
while True:
try:
select = int(input("Select operation from 1, 2, 3, 4, or 5: "))
if select == 5:
print("Goodbye!")
break # 推荐用 break 替代 exit(),更可控、更易测试
if select not in [1, 2, 3, 4]:
print("Invalid choice. Please enter 1–5.")
continue # 跳过后续输入,重新开始循环
x = float(input("Enter first number: ")) # 支持小数输入
y = float(input("Enter second number: "))
if select == 1:
result = add(x, y)
print(f"Result: {x} + {y} = {result}")
elif select == 2:
result = sub(x, y)
print(f"Result: {x} - {y} = {result}")
elif select == 3:
result = mul(x, y)
print(f"Result: {x} × {y} = {result}")
elif select == 4:
result = div(x, y)
print(f"Result: {x} ÷ {y} = {result}")
except ValueError:
print("Error: Please enter valid numbers.")
continue
except KeyboardInterrupt:
print("\n\nOperation cancelled. Goodbye!")
break✅ 关键改进说明:
- 使用 while True: 构建主交互循环,确保程序持续等待用户指令;
- 将 input() 和运算逻辑全部置于循环体内,每次迭代都是一次完整操作流程;
- 增加 try-except 捕获 ValueError(非法数字输入)和 KeyboardInterrupt(Ctrl+C),提升健壮性;
- 对除零异常做显式判断(div() 函数内),避免程序崩溃;
- 使用 float() 替代 int() 输入,支持小数运算,更贴近真实计算器体验;
- 用 break 退出循环而非 exit(),便于后续扩展(如添加日志、统计等功能);
- 添加清晰的提示语与格式化输出(f-string),增强可读性。
? 小贴士: 若希望每次操作后自动重新显示菜单,可将 print(...) 语句移至 while 循环开头;若需记录历史计算,可引入列表变量缓存 (op, x, y, result) 元组。
至此,你已掌握构建可交互、容错强、用户体验良好的简易计算器的核心模式——循环驱动 + 分支处理 + 异常防护,这也是绝大多数命令行工具的标准实现范式。









