我在linux mint 32bit中使用python 3.7.2 shell。 当我运行def factorial(如代码所示)时,它说“ ”运算符无法应用于“ 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,但是在脚本模式下显示了第二个代码,而在交互模式下显示了第三个代码。
答案 0 :(得分:0)
问题是,您尝试将数字与print
类型的NoneType
的结果相乘,从而导致错误。您的阶乘函数应该返回一个数字,而不是打印。
此代码有效:
def factorial(n):
if n==0:
return 1
else:
return n*factorial(n-1)
然后只有这样才能打印结果,例如:
print(factorial(10))
答案 1 :(得分:0)
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)