You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确运用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:39:19