为什么在Python中返回'NoneType'?

2024-09-22 20:26:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码,它基本上解决了Project Euler中的一个问题,目的是找出前20个自然数的LCM。

def GCD(a, b):              #Euclid's algorithim
    if (b == 0):
        return a
    else:
        GCD(b, a % b)

def LCM(a, b):             #LCM(a,b) = a*b/GCD(a,b)
    x = GCD(a, b)
    return ((a * b)/x)

def RFIND(a, b):
    if (b == 20):
        return a
    else:
        RFIND(LCM(a, b), b + 1)

print RFIND(2, 1)

但我在运行它时遇到了一个错误。

    return ((a * b)/x)
TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

我能知道为什么吗?


Tags: 代码目的projectreturnifdef错误else
3条回答

试试看

def GCD(a, b):              #Euclid's algorithim
    if (b == 0):
        return a
    else:
        return GCD(b, a % b)

必须返回递归调用返回的值。RFIND也有类似的问题。

你不正确地实现了你的递归。

def GCD(a, b):              #Euclid's algorithim
 ...
        return GCD(b, a % b)

def RFIND(a, b):
 ...
        return RFIND(LCM(a, b), b + 1)

它不会返回NoneType。它正在返回None。分区说它不知道如何划分类型intNoneType,因为这是您要划分的类型。举个例子

>>> 'g'/6
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'int'

正如你所看到的,它并没有说它不能划分“g”和6,而是说它不能划分“str”和“int”。因此:

>>> 1/None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

正如这里其他人已经指出的,它返回None,因为您忘记了return语句。

相关问题 更多 >