听着,我知道有关于此的一千个帖子,我花了三个小时看着它们。我知道这个代码不起作用的原因很简单,但我无法弄明白。当它运行时,我只希望它返回第n个术语。我是python的新手,也许有一些我没有得到的逻辑。所以当我这样做时:
n = int(input("What Fibonacci number would you like to find? "))
def fib(n):
i = 0
present = 1
previous = 0
while i < n:
nextterm = present + previous
present = previous
previous = nextterm
i = i + 1
print nextterm
print(fib(n))
我明白了:
1
1
2
3
5
None
当我这样做:
n = int(input("What Fibonacci number would you like to find? "))
def fib(n):
i = 0
present = 1
previous = 0
while i < n:
nextterm = present + previous
present = previous
previous = nextterm
i = i + 1
return nextterm
print(fib(n))
我只是得到“1”
我花了这么多时间在这上面,我很困惑。有人请修理我!
你只是忘了返回值:
n = int(input("What Fibonacci number would you like to find? "))
def fib(n):
i = 0
nextterm = 1
present = 1
previous = 0
while i < n:
nextterm = present + previous
present = previous
previous = nextterm
i = i + 1
#print nextterm
return nextterm
print(fib(n))
因为return
只返回一次,第一次返回完成,
更清楚的例子:
def f():
return 'good'
return 'bad'
现在:
print(f())
返回:
'good'
另一方面,这也是一种解决方法:
n = int(input("What Fibonacci number would you like to find? "))
def fib(n):
l=[]
i = 0
present = 1
previous = 0
while i < n:
nextterm = present + previous
present = previous
previous = nextterm
i = i + 1
l.append(nextterm)
return '\n'.join(str(i) for i in l)
print(fib(n))
或者print
不做另外打印:
n = int(input("What Fibonacci number would you like to find? "))
def fib(n):
i = 0
present = 1
previous = 0
while i < n:
nextterm = present + previous
present = previous
previous = nextterm
i = i + 1
print(nextterm)
fib(n)
在第一种情况下,你没有返回任何东西,所以当你print(fib(n))
,因为python没有找到任何return
语句,它返回None
,这是你看到的最后一个打印,其他是循环内的那些。在第二种情况下,你在return
循环中有while
语句,所以当它执行第一次迭代时它返回1
,离开帧并且没有执行其他迭代,所以它只打印'1'
。
def fibonacci():
num = int(input("How many numbers that generates?:"))
i = 1
if num == 0:
fib = []
elif num == 1:
fib = [1]
elif num == 2:
fib = [1,1]
elif num > 2:
fib = [1,1]
while i < (num - 1):
fib.append(fib[i] + fib[i-1])
i += 1
return fib
print(fibonacci())