Python 斐波那契生成器
我需要写一个程序,让它询问要打印多少个斐波那契数,然后像这样打印出来:0, 1, 1, 2……但是我不知道怎么让它正常工作。我的代码如下:
a = int(raw_input('Give amount: '))
def fib():
a, b = 0, 1
while 1:
yield a
a, b = b, a + b
a = fib()
a.next()
0
for i in range(a):
print a.next(),
21 个回答
17
既然你在写一个生成器,为什么不使用两个yield,这样就可以省去额外的处理步骤呢?
import itertools as it
num_iterations = int(raw_input('How many? '))
def fib():
a,b = 0,1
while True:
yield a
b = a+b
yield b
a = a+b
for x in it.islice(fib(), num_iterations):
print x
.....
27
你给了 a
太多不同的意思:
a = int(raw_input('Give amount: '))
与之相比:
a = fib()
如果你给变量起更有描述性的名字,就不会经常遇到这个问题了(在10行代码中,a
被用作3种不同的用途!):
amount = int(raw_input('Give amount: '))
并把 range(a)
改成 range(amount)
。
54
我会使用这个方法:
Python 2
a = int(raw_input('Give amount: '))
def fib(n):
a, b = 0, 1
for _ in xrange(n):
yield a
a, b = b, a + b
print list(fib(a))
Python 3
a = int(input('Give amount: '))
def fib(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
print(list(fib(a)))