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

Python计算器输出异常求助:第4项输出未达预期

Python计算器除法功能输出错误修正求助

问题说明

我编写了一款Python计算器代码,已完成以下功能:

  • 获取用户输入(包含算术操作符、重置/终止指令及操作数)
  • 实现加减乘除、幂运算、取余等运算函数
  • 通过select_op(choice)调用运算函数并展示结果

目前前3项功能输出符合预期,但除法(第4项)功能输出错误,恳请协助修正代码以得到预期输出。

错误现象

除法操作时,输入输出格式与其他运算不一致,异常处理的输出逻辑也存在问题(如除数为0时的输出不符合统一格式)。

原代码

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

def multiply(x, y):
    return x * y

def divide(x, y):
    return x / y

def power(x, y):
    return x ** y

def remainder(x, y):
    return x % y

def select_op(choice):
    if choice == '+':
        num1 = int(input("Enter first number: "))
        print(num1)
        num2 = int(input("Enter second number: "))
        print(num2)
        print(float(num1), "+", float(num2), "=", float(add(num1, num2)))

    elif choice == '-':
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))
        print(num1, "-", num2, "=", subtract(num1, num2))

    elif choice == '*':
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))
        print(num1, "*", num2, "=", multiply(num1, num2))

    elif choice == '/':
        num1 = int(input("Enter first number: "))
        print(num1)
        num2 = int(input("Enter second number: "))
        print(num2)

        try:
            result = num1 / num2
            print(f"{num1} / {num2} = {result}")
        except ZeroDivisionError:
            print("float division by zero")
            print(float(num1), "/", float(num2), "=", "None")

    elif choice == '^':
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))
        print(num1, "^", num2, "=", power(num1, num2))

    elif choice == '%':
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))
        print(num1, "%", num2, "=", remainder(num1, num2))

    elif choice == '#':
        return -1

    elif choice == '$':
        return 0

    else:
        print("Invalid input")
        return 1


while True:
    print("Select operation.")
    print("1.Add      : + ")
    print("2.Subtract : - ")
    print("3.Multiply : * ")
    print("4.Divide   : / ")
    print("5.Power    : ^ ")
    print("6.Remainder: % ")
    print("7.Terminate: # ")
    print("8.Reset    : $ ")

    # take input from the user
    choice = input("Enter choice(+,-,*,/,^,%,#,$): ")
    print(choice)

    if select_op(choice) == -1:
        print("Done. Terminating")
        exit()

修正方案及代码

修改点说明

  1. 统一除法操作的输入类型为float,与其他运算保持一致
  2. 移除除法部分多余的print(num1)、print(num2),对齐其他运算的输出逻辑
  3. 调用已实现的divide函数计算结果,保持代码逻辑一致性
  4. 优化零除异常的输出格式,使其与正常输出统一

修正后的代码

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

def multiply(x, y):
    return x * y

def divide(x, y):
    return x / y

def power(x, y):
    return x ** y

def remainder(x, y):
    return x % y

def select_op(choice):
    if choice == '+':
        num1 = int(input("Enter first number: "))
        print(num1)
        num2 = int(input("Enter second number: "))
        print(num2)
        print(float(num1), "+", float(num2), "=", float(add(num1, num2)))

    elif choice == '-':
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))
        print(num1, "-", num2, "=", subtract(num1, num2))

    elif choice == '*':
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))
        print(num1, "*", num2, "=", multiply(num1, num2))

    elif choice == '/':
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))
        try:
            result = divide(num1, num2)
            print(num1, "/", num2, "=", result)
        except ZeroDivisionError:
            print("float division by zero")
            print(num1, "/", num2, "=", "None")

    elif choice == '^':
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))
        print(num1, "^", num2, "=", power(num1, num2))

    elif choice == '%':
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))
        print(num1, "%", num2, "=", remainder(num1, num2))

    elif choice == '#':
        return -1

    elif choice == '$':
        return 0

    else:
        print("Invalid input")
        return 1


while True:
    print("Select operation.")
    print("1.Add      : + ")
    print("2.Subtract : - ")
    print("3.Multiply : * ")
    print("4.Divide   : / ")
    print("5.Power    : ^ ")
    print("6.Remainder: % ")
    print("7.Terminate: # ")
    print("8.Reset    : $ ")

    # take input from the user
    choice = input("Enter choice(+,-,*,/,^,%,#,$): ")
    print(choice)

    if select_op(choice) == -1:
        print("Done. Terminating")
        exit()

内容的提问来源于stack exchange,提问作者Maduranga Dinesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:09:54