Python 函数返回 Null 类型数据
Python function returning Null type data
我正在尝试计算给定值的 'nth Fibonacci % m '。
(使用皮萨诺系列)。
这是终端显示的消息。
错误信息->
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))
想不通原因
如果 n == 1
,您的 get_fibo()
函数不会执行 return 语句,实际上 returning None
.
这个有点奇怪:
for i in range(n-1):
(prev,curr)=(curr,prev+curr)
return curr
循环运行 0 次或多次,具体取决于 n
的值。如果小于等于1,则运行0次,如果为2,则运行一次,一般情况下运行n-1次。
但是一个函数 只能 return 恰好一次。 所以即使 n 是 1000,函数会在第一次循环运行时立即 return循环的其余部分永远不会发生。
并且如果它运行 0 次 (n <= 1),则循环中没有 return,函数到达其代码末尾,因此它 returns None.
我正在尝试计算给定值的 'nth Fibonacci % m '。 (使用皮萨诺系列)。 这是终端显示的消息。
错误信息->
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))
想不通原因
如果 n == 1
,您的 get_fibo()
函数不会执行 return 语句,实际上 returning None
.
这个有点奇怪:
for i in range(n-1):
(prev,curr)=(curr,prev+curr)
return curr
循环运行 0 次或多次,具体取决于 n
的值。如果小于等于1,则运行0次,如果为2,则运行一次,一般情况下运行n-1次。
但是一个函数 只能 return 恰好一次。 所以即使 n 是 1000,函数会在第一次循环运行时立即 return循环的其余部分永远不会发生。
并且如果它运行 0 次 (n <= 1),则循环中没有 return,函数到达其代码末尾,因此它 returns None.