基于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
相关产品推荐
相关产品推荐

