Python генератор Фибоначчи - PullRequest
       4

Python генератор Фибоначчи

14 голосов
/ 17 октября 2010

Мне нужно создать программу, которая запрашивает количество напечатанных чисел Фибоначчи, а затем печатает их как 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(),

Ответы [ 15 ]

2 голосов
/ 17 октября 2010

Ваш a это, так сказать, глобальное имя.

a = int(raw_input('Give amount: '))

Всякий раз, когда Python видит a, он думает, что вы говорите о вышеупомянутом. Называя это как-то еще (в другом месте или здесь), должно помочь.

1 голос
/ 20 октября 2017

Мне нравится эта версия:

array = [0,1]

for i in range(20):
   x = array[0]+array[1]   
   print(x)
   array[0] = array[1]
   array[1] = x
1 голос
/ 07 сентября 2017

Похоже, вы используете a дважды.Попробуйте изменить его на другое имя переменной.

Мне кажется, что следующее прекрасно работает.

def fib():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a+b

f = fib()
for x in range(100):
    print(f.next())
1 голос
/ 17 октября 2010

Я построил это недавно:

a = int(raw_input('Give amount: '))

fab = [0, 1, 1]
def fab_gen():
    while True:
        fab.append(fab[-1] + fab[-2])
        yield fab[-4]

fg = fab_gen()
for i in range(a): print(fg.next())

Нет, fab будет расти со временем, поэтому это не идеальное решение.

0 голосов
/ 22 марта 2019

Ниже приведены два решения для генерации Фибончи:

def fib_generator(num):
    '''
    this will works as generator function and take yield into account.
    '''
    assert num > 0
    a, b = 1, 1
    while num > 0:
        yield a
        a, b = b, a+b
        num -= 1


times = int(input('Enter the number for fib generaton: '))
fib_gen = fib_generator(times)
while(times > 0):
    print(next(fib_gen))
    times = times - 1


def fib_series(num):
    '''
    it collects entires series and then print it.
    '''
    assert num > 0
    series = []
    a, b = 1, 1
    while num > 0:
        series.append(a)
        a, b = b, a+b
        num -= 1
    print(series)


times = int(input('Enter the number for fib generaton: '))
fib_series(times)
...