如何正确运用while循环语法优化给定的Python数值运算程序?
优化双数字乘减除运算程序
原代码问题说明
原代码存在以下几个核心问题:
- 第二个输入的提示文案错误(写的是"Please enter the function",实际应为输入第二个数字)
else分支会匹配所有非multiply/subtract的输入,包括错误指令,导致误执行除法- 异常捕获过于宽泛,任何错误都会直接退出程序,没有重新输入的机会
- 缺少运算指令的合法性校验,用户输入错误指令时无法提示重输
原代码
flag = False while flag == False: try: Num1 = int(input('Please enter a number, ')) Num2 = int(input('Please enter the function, ')) Opp = input('Please type what you want to do with the numbers: multiply, subtract to subtract your function from Number or divide to divide Number by your function, ') if Opp == 'multiply': print(Num1,'times',Num2, 'is',Num1 * Num2) elif Opp == 'subtract': print(Num1,'minus',Num2,'is',Num1 - Num2) else: print(Num1,'divided by',Num2,'is',Num1/Num2) except: flag = True
优化后的实现方案
while True: # 循环获取第一个合法整数 while True: try: num1 = int(input("请输入第一个数字: ")) break except ValueError: print("输入无效,请输入整数!") # 循环获取第二个合法整数 while True: try: num2 = int(input("请输入第二个数字: ")) break except ValueError: print("输入无效,请输入整数!") # 循环校验运算指令合法性 valid_ops = ['multiply', 'subtract', 'divide'] while True: opp = input("请选择运算类型(multiply=乘法, subtract=减法, divide=除法): ").strip().lower() if opp in valid_ops: break print(f"无效指令,请输入以下之一:{', '.join(valid_ops)}") # 执行运算并处理特殊异常 if opp == 'multiply': print(f"{num1} times {num2} is {num1 * num2}") elif opp == 'subtract': print(f"{num1} minus {num2} is {num1 - num2}") elif opp == 'divide': try: print(f"{num1} divided by {num2} is {num1 / num2}") except ZeroDivisionError: print("错误:除数不能为0!") # 询问是否继续运算 continue_choice = input("是否继续运算?(y/n): ").strip().lower() if continue_choice != 'y': break
优化点说明
- 拆分三个独立
while循环,分别校验数字输入和指令输入,确保每一步输入合法后才进入下一步 - 异常捕获更精准:只捕获
ValueError处理非整数输入,除法单独捕获ZeroDivisionError,避免宽泛捕获隐藏其他代码问题 - 增加运算指令合法性校验,用户输入错误时提示重输,不会误执行除法
- 修正原代码中第二个输入的提示文案错误
- 增加继续运算的选择,提升用户体验
- 变量名改为符合PEP8规范的小写蛇形命名
内容的提问来源于stack exchange,提问作者ruben nell
相关产品推荐
相关产品推荐

