Python 迭代斐波那契
Python Iterative Fibonacci
听着,我知道有上千篇关于此的帖子,我花了三个小时查看所有帖子。我知道这段代码不起作用的原因很简单,但我想不通。当它运行时,我只希望它 return 第 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”
我花了这么多时间在这上面,我很困惑。有人请修理我!
您只是忘记了 return 值:
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))
在第一种情况下你没有返回任何东西,所以当你 print(fib(n))
时,由于 python 没有找到任何 return
语句,它 returns None
,这是你看到的最后一个打印,其他的是循环内的。在第二种情况下,您在 while
循环中有 return
语句,因此当它执行第一次迭代时,它 returns 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())
因为return
只有return一次,第一次return就搞定了,
更清晰的示例:
def f():
return 'good'
return 'bad'
现在:
print(f())
Returns:
'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)
听着,我知道有上千篇关于此的帖子,我花了三个小时查看所有帖子。我知道这段代码不起作用的原因很简单,但我想不通。当它运行时,我只希望它 return 第 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”
我花了这么多时间在这上面,我很困惑。有人请修理我!
您只是忘记了 return 值:
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))
在第一种情况下你没有返回任何东西,所以当你 print(fib(n))
时,由于 python 没有找到任何 return
语句,它 returns None
,这是你看到的最后一个打印,其他的是循环内的。在第二种情况下,您在 while
循环中有 return
语句,因此当它执行第一次迭代时,它 returns 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())
因为return
只有return一次,第一次return就搞定了,
更清晰的示例:
def f():
return 'good'
return 'bad'
现在:
print(f())
Returns:
'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)