import math
class Calculator():
def __init__(self, num1=0.0, op=None, num2=0.0, result=None):
self.num1 = num1
self.op = op
self.num2 = num2
self.result = result
def main(self, num1, op, num2, result):
if op == "+":
result = float(num1) + float(num2)
print(result)
elif op == "-":
result = float(num1) - float(num2)
print(result)
elif op == "*":
result = float(num1) * float(num2)
print(result)
elif op == "/" and float(num2) == 0:
result = None
print("You can't divide by zero")
p.main(self, num1, op, num2, result)
elif op == "/" and float(num2) != 0:
result = float(num1) / float(num2)
print(result)
elif op == "power":
result = float(num1)**float(num2)
print(result)
else:
print("invalid input")
while True:
p = Calculator()
p.main(num1=input("Write a number: "),
op=input("+ or - or * or / or power: "),
num2=input("Write another number: "),
result=None)
ans = input("Would you like to do another equation: ")
if ans == "yes":
p.main()
ans = input("Would you like to do another equation: ")
elif ans == "no":
exit()
我试着将5除以6,以测试是否一切正常,我得到了以下错误:
回溯(最近一次调用):文件"d:\Visual Studio Code\Projects\HelloWorld python\tempCodeRunnerFile.py",第37行,在p.main中(“写一个数字:"),文件"d:\Visual Studio Code\Projects\HelloWorld python\tempCodeRunnerFile.py",第24行,main p.main(self,num1,op,num2,result),TypeError: Calculator.main接受5个位置参数,但给出了6个
发布于 2021-12-09 20:32:15
这一行:
p.main(self, num1, op, num2, result)
应:
self.main(num1, op, num2, result)
然而,这将引发一个不同的错误,即通过使用相同的参数调用相同的函数,得到相同的结果,这是对同一个函数的另一次调用(然后重复大约一千次,直到出现递归错误)。相反,您需要提示用户输入新的输入;处理错误的函数应该是从用户获取输入的函数。
让这变得简单的一种方法是使用异常,如果您只将除法除以零并让它引发一个ZeroDivisionError
,那么异常就会自动发生。只需要接受输入捕获异常的代码,这样它就可以重新提示用户:
class Calculator():
def operate(self, num1: float, op: str, num2: float) -> float:
"""Perform one operation according to the value of op.
May raise ValueError or ZeroDivisionError."""
if op == "+":
return num1 + num2
elif op == "-":
return num1 - num2
elif op == "*":
return num1 * num2
elif op == "/":
return num1 / num2
elif op == "power":
return num1 ** num2
else:
raise ValueError(f"invalid operator {op}")
def do_one_equation(self) -> None:
"""Prompt the user for input and do one equation.
Loop on invalid input until we have one successful result."""
while True:
try:
result = self.operate(
float(input("Write a number: ")),
input("+ or - or * or / or power: "),
float(input("Write another number: "))
)
print(result)
return
except ZeroDivisionError:
print("You can't divide by zero")
except ValueError:
print("Invalid input")
p = Calculator()
while True:
p.do_one_equation()
if input("Would you like to do another equation: ") == "no":
break
注意,在上面的代码中,result
变成了operate()
方法所编辑的任何内容。函数的参数是它的输入,结果应该是它的输出(即您的return
)。
https://stackoverflow.com/questions/70296316
复制相似问题