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

基于Python3类与对象的计算器程序调用报错求助(含TypeError)

嘿,我来帮你揪出这段计算器代码里的问题~

问题1:属性引用不匹配

你在__init__方法里把传入的参数a和b赋值给了实例属性self.num1和self.num2,但在add、subtract这些计算方法里,却错误地去访问self.a和self.b——这两个属性根本没有被定义,所以运行时会抛出AttributeError(如果还遇到TypeError,大概率是因为你没正确传入参数实例化类导致的)。

问题2:缺少实例化与方法调用逻辑

你的代码最后只打印了一句提示,但没有创建calculator类的实例,也没有调用对应的计算方法,这样代码根本没法执行实际的计算操作,相当于只写了类的定义,没写使用逻辑。

修正后的完整代码

class Calculator:
    # 遵循PEP8规范,类名用大驼峰命名
    def __init__(self, a, b):
        self.num1 = a
        self.num2 = b

    def add(self):
        return self.num1 + self.num2  # 对应正确的实例属性

    def subtract(self):
        return self.num1 - self.num2

    def multiply(self):
        return self.num1 * self.num2

    def divide(self):
        # 新增除数不为0的判断,避免运行时错误
        if self.num2 == 0:
            return "错误:除数不能为0"
        return self.num1 / self.num2

# 新增交互逻辑,让代码能实际运行
print("请选择要执行的计算操作:")
print("1. 加法\n2. 减法\n3. 乘法\n4. 除法")
choice = input("输入对应选项编号:")

# 获取用户输入的两个数字
try:
    num_a = float(input("请输入第一个数字:"))
    num_b = float(input("请输入第二个数字:"))
except ValueError:
    print("输入无效,请输入合法的数字!")
else:
    # 实例化计算器对象
    calc = Calculator(num_a, num_b)

    # 根据用户选择调用对应方法
    if choice == "1":
        print(f"计算结果:{calc.add()}")
    elif choice == "2":
        print(f"计算结果:{calc.subtract()}")
    elif choice == "3":
        print(f"计算结果:{calc.multiply()}")
    elif choice == "4":
        print(f"计算结果:{calc.divide()}")
    else:
        print("无效选项,请重新输入!")

额外优化说明

  • 调整了类名的命名方式,符合Python官方的PEP8编码规范;
  • 除法方法里增加了除数为0的判断,避免出现ZeroDivisionError;
  • 新增了输入合法性校验,防止用户输入非数字内容导致ValueError;
  • 补充了完整的交互逻辑,让代码能够实际接收用户输入并返回计算结果。

内容的提问来源于stack exchange,提问作者Bhardwaj Chitra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:31:07