Python计算器程序问题:输入数值后运算仍使用初始默认值1和1
Python计算器运算值始终为初始默认值的修复方案
问题根源
你的calculator()方法中,operationDict在方法启动时就完成初始化,字典里的self.multiplication()、self.division()等方法会立即执行,此时self.number1和self.number2还是类初始化时的默认值1。后续即使输入新的数值,字典里存储的依然是最初计算的结果,不会随输入更新。
修复方案
方案一:存储方法引用,按需调用
将字典中的方法调用改为方法本身(不带括号),等用户选择操作后再执行方法,确保使用最新的输入数值计算:
class Calculator: def __init__(self, number1=1, number2=1): self.number1 = number1 self.number2 = number2 def calculator(self): # 存储方法引用,不立即执行 operationDict = { "*": self.multiplication, "/": self.division, "+": self.sumOf, "-": self.subtraction} while True: self.number1 = int(input("Enter a digit, 0 to 9: ")) self.number2 = int(input("Enter another digit, 0 to 9: ")) print("number1 is: ", self.number1, " the number2 is: ", self.number2) operation = input("Enter a +,-,/,*: ") # 校验操作符合法性并调用方法 if operation in operationDict: print(operationDict[operation]()) def sumOf(self): osum = self.number1 + self.number2 self.osum = osum return osum def subtraction(self): osubs = self.number1 - self.number2 self.osubs = osubs return osubs def division(self): # 新增除数不为0的判断 if self.number2 == 0: return "Error: Cannot divide by zero" odiv = self.number1 / self.number2 self.odiv = odiv return round(odiv,2) def multiplication(self): omult = self.number1 * self.number2 self.omult = omult return omult oCalculator = Calculator() oCalculator.calculator()
方案二:每次输入后重新生成运算字典
如果需要直接存储运算结果,可以在获取用户输入的数值后,再初始化operationDict,确保字典中的结果基于最新数值计算:
class Calculator: def __init__(self, number1=1, number2=1): self.number1 = number1 self.number2 = number2 def calculator(self): while True: self.number1 = int(input("Enter a digit, 0 to 9: ")) self.number2 = int(input("Enter another digit, 0 to 9: ")) print("number1 is: ", self.number1, " the number2 is: ", self.number2) # 每次输入后重新生成字典,使用最新数值计算结果 operationDict = { "*": self.multiplication(), "/": self.division(), "+": self.sumOf(), "-": self.subtraction()} operation = input("Enter a +,-,/,*: ") # 用elif替代多个if,提升效率 if operation == "*": print(operationDict["*"]) elif operation == "-": print(operationDict["-"]) elif operation == "+": print(operationDict["+"]) elif operation == "/": print(operationDict["/"]) def sumOf(self): osum = self.number1 + self.number2 self.osum = osum return osum def subtraction(self): osubs = self.number1 - self.number2 self.osubs = osubs return osubs def division(self): if self.number2 == 0: return "Error: Cannot divide by zero" odiv = self.number1 / self.number2 self.odiv = odiv return round(odiv,2) def multiplication(self): omult = self.number1 * self.number2 self.omult = omult return omult oCalculator = Calculator() oCalculator.calculator()
额外优化提示
- 给除法添加除数不为0的判断,避免抛出运行时异常
- 使用
elif替代多个独立if,减少不必要的条件判断 - 可以添加退出逻辑,比如输入
q时终止循环
内容的提问来源于stack exchange,提问作者Takahan Nft
相关产品推荐
相关产品推荐

