如何在函数内部使用 return 语句,因为它不在脚本中工作,但在交互模式下工作[重复]

问题描述 投票:0回答:2

我在 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,但在脚本模式下显示第二个代码错误,在交互模式下显示第三个代码错误。

python syntax-error
2个回答
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)

-1
投票

问题是您尝试将一个数字与

print
的结果相乘,其类型为
NoneType
,因此会出现错误。您的阶乘函数应该返回一个数字,而不是打印它。

此代码有效:

def factorial(n):
    if n==0:
        return 1
    else:
        return n*factorial(n-1)

然后才可以打印结果,例如:

print(factorial(10))
© www.soinside.com 2019 - 2024. All rights reserved.