代码有什么问题?如果我不使用课堂,这是正确的。如果我使用课程,则会收到错误消息:
TypeError:*:'int'和'factorial'不受支持的操作数类型
class factorial(object):
def __init__(self,number):
self.number = number
def factorial(self):
if self.number == 1:
return 1
else:
result = self.number * factorial(self.number-1)
return result
def main():
fac = factorial(5)
print(fac.factorial())
if __name__ == "__main__":
main()
答案 0 :(得分:0)
我对您在else块中添加的代码进行了较小的修改。
class factorial(object):
def __init__(self,number):
self.number = number
def factorial(self):
if self.number == 1:
return 1
else:
self.number -= 1
result = self.number * self.factorial()
return result
def main():
fac = factorial(5)
print(fac.factorial())
if __name__ == "__main__":
main()
答案 1 :(得分:0)
错误消息试图指出您正在尝试执行python解释器不知道如何执行操作的方向。该错误是int和阶乘不支持的操作数类型。因此,在您的代码中,您尝试执行以下行:
result = self.number * factorial(self.number-1)
因此,在此行中,您尝试将一个int(self.number)与一个对象factorial(self.number-1)相乘。您正在调用阶乘构造函数,而不是尝试在数字-1上运行阶乘。为了使这项工作有效,您需要乘以另一个数字,而不是对象(阶乘类型)。
答案 2 :(得分:0)
HI @bogortron和@Manoj, 我有正确的原因和答案,但是我不明白的是,当我仅使用函数时,这种方法就可以正常工作:
def factorial(number):
if number == 1:
return 1
else:
result = number * factorial(number-1)
return result
print(factorial(5))
此代码运行并给出正确的结果。
答案 3 :(得分:0)
您正在为类factorial
及其方法factorial(self)
使用相同的名称,我认为这就是问题的根源。当您写时:
result = self.number * factorial(self.number-1)
您希望结果将得到self.number
的值乘以self.number-1
的阶乘。但是对于Python解释器,factorial(self.number-1)
不是数字,而是对象(实际上是int的包装器)。如果您写:
result = self.number * factorial(self.number-1).factorial()
您在对象factorial
上调用方法factorial
,一切正常。
但是,就像您在自己的答案中所做的那样,您不需要在这里上课。