我在 linux mint 32 位中使用 python 3.7.2 shell。 当我运行阶乘的 def 时(如代码所示),它说“”运算符不能应用于“int”和“nonetype”,但我在打印函数中使用“”,但这不起作用。 即使我无法在脚本模式下使用函数内部的 return 语句,尽管它在交互模式下工作。 帮助我如何在脚本模式下的函数内使用 return 语句,请修复我的阶乘代码,使其正常工作。
def factorial(n):
if n == 0:
results = print(1)
return results
else:
x = factorial(n-1)
result = print(n*x)
return result
factorial(4)
我使用它时遇到的错误是
File "/home/Location", line 12, in factorial
result = print(n*x)
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'
当我在交互模式下运行时出现此错误
SyntaxError: inconsistent use of tabs and spaces in indentation
我期待阶乘评估4! = 24,但在脚本模式下显示第二个代码错误,在交互模式下显示第三个代码错误。
print(1)
将返回 NoneType
,因此当您进行递归调用时,您实际上发送的是 1
,而不是 NoneType
。将作业分开并打印,如下所示,您的程序即可运行:
def factorial(n):
if n == 0:
results = 1
print(results)
return results
else:
x = factorial(n-1)
result = n*x
print (result)
return result
factorial(4)
问题是您尝试将一个数字与
print
的结果相乘,其类型为 NoneType
,因此会出现错误。您的阶乘函数应该返回一个数字,而不是打印它。
此代码有效:
def factorial(n):
if n==0:
return 1
else:
return n*factorial(n-1)
然后才可以打印结果,例如:
print(factorial(10))