
本文教你编写一个结构清晰、具备输入合法性校验的 python 四则运算程序,避免无效选项仍执行后续输入,并通过条件前置检查、函数封装提升可读性与健壮性。
本文教你编写一个结构清晰、具备输入合法性校验的 python 四则运算程序,避免无效选项仍执行后续输入,并通过条件前置检查、函数封装提升可读性与健壮性。
一个看似简单的四则运算菜单程序,常因逻辑顺序不当导致用户体验不佳——比如用户输入了非法选项(如 5),程序却仍强制要求输入两个数字,最后才提示“invalid parameter”。根本原因在于:所有输入操作(包括 x 和 y)被放在了选项校验之前,违反了“先验证、再执行”的基本交互原则。
下面是一个优化后的完整实现,遵循清晰的流程:显示菜单 → 获取并校验选项 → 仅当合法时才请求操作数 → 执行计算并格式化输出:
def show_menu():
print("[1] ADD")
print("[2] Subtract")
print("[3] Multiply")
print("[4] Divide")
def get_valid_choice():
while True:
try:
choice = int(input("Enter your choice (1–4) or 0 to exit: "))
if choice == 0:
print("Goodbye!")
return None
if choice in (1, 2, 3, 4):
return choice
else:
print("❌ Invalid choice. Please enter 1, 2, 3, or 4.")
except ValueError:
print("❌ Please enter a valid number.")
def get_numbers():
while True:
try:
x = float(input("Enter 1st number: "))
y = float(input("Enter 2nd number: "))
return x, y
except ValueError:
print("❌ Invalid number format. Please enter numeric values.")
def calculate(choice, x, y):
operations = {
1: ("addition", x + y),
2: ("subtraction", x - y),
3: ("multiplication", x * y),
4: ("division", x / y if y != 0 else None)
}
name, result = operations[choice]
if choice == 4 and y == 0:
print("⚠️ Error: Division by zero is not allowed.")
return
print(f"{name.capitalize()} of {x} and {y} is {result}")
# 主程序入口
if __name__ == "__main__":
show_menu()
while True:
choice = get_valid_choice()
if choice is None: # 用户选择退出
break
x, y = get_numbers()
calculate(choice, x, y)
print("-" * 40) # 分隔符,提升可读性
✅ 关键改进说明:
- 前置校验:get_valid_choice() 在获取 x/y 前完成选项合法性判断,非法输入直接循环重试,绝不进入后续步骤;
- 健壮输入处理:使用 try/except 捕获 ValueError,防止非数字输入导致程序崩溃;
- 零除防护:在除法分支中显式检查 y == 0,避免运行时异常;
- 用户体验增强:支持输入 0 优雅退出;添加提示符号(❌/⚠️)和分隔线,提升终端交互友好度;
- 职责分离:将菜单展示、输入校验、计算逻辑拆分为独立函数,便于测试、复用与维护。
⚠️ 注意事项:
- 原代码中 a = print(...) 是常见误区:print() 返回 None,赋值无意义,应直接调用;
- 使用 float() 替代 int() 可支持小数运算,更符合实际计算器需求;
- 若需严格整数运算,可改回 int(),但建议同步增加对小数输入的友好提示;
- 生产环境建议进一步封装为类或添加日志、单元测试,本例聚焦核心逻辑与可读性。
这个版本不仅解决了原始问题,更体现了 Python 编程中“显式优于隐式”“简单优于复杂”的设计哲学——让逻辑流一目了然,让错误处理恰如其分。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











