Python函数返回Null类型数据

时间:2019-09-19 09:27:02

标签: python-3.x typeerror fibonacci nonetype

我正在尝试计算给定值的'第n个斐波那契%m'。 (使用pisano系列)。 这是终端显示的消息。

错误消息->

 100 2
    Traceback (most recent call last):
      File "fibag.py", line 27, in <module>
        print(huge_fibo(n,m))
      File "fibag.py", line 21, in huge_fibo
        return get_fibo(rem) % m
    TypeError: unsupported operand type(s) for %: 'NoneType' and 'int'



#uses python3
def pisano_len(m):
    prev=0
    next=1
    for i in range(m*m+1):
        prev,next=next,(prev+next)%m
        if(prev==0 and next==1):
            return i+1
def get_fibo(n):
    if(n<1):
        return n
    prev=0
    curr=1
    for i in range(n-1):
        (prev,curr)=(curr,prev+curr)
        return curr

def huge_fibo(n,m):
    rem=int(n%pisano_len(m))
    return get_fibo(rem) % m

if(__name__=='__main__'):


    n,m=map(int,input().split())
    print(huge_fibo(n,m))

不能弄清楚原因。

2 个答案:

答案 0 :(得分:3)

如果get_fibo()不能有效地返回n == 1,则您的None函数不会执行return语句。

答案 1 :(得分:2)

这有点奇怪:

for i in range(n-1):
    (prev,curr)=(curr,prev+curr)
    return curr

根据n的值,循环运行0次或多次。如果小于或等于1,则运行0次;如果小于或等于2,则运行一次,通常运行n-1次。

但是函数只能返回一次。因此,即使n为1000,该函数也会在第一次循环运行时立即返回,而循环的其余部分将永远不会发生。

如果它运行0次(n <= 1),则循环中没有返回,并且该函数到达其代码的末尾,因此它返回None。