Python 斐波那契生成器

35 投票
21 回答
114354 浏览
提问于 2025-04-16 05:38

我需要写一个程序,让它询问要打印多少个斐波那契数,然后像这样打印出来: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)))

撰写回答