Задание 13: числа Фибоначчи¶

In [3]:
class Fib:
    """По объектам этого класса можно итерироваться и получать числа Фибоначчи"""

    class _Fib_iter:
        """Внутренний класс — итератор"""

        def __init__(self):
            self.i = 0
            self.fib_previous = 0
            self.fib_last = 1
            
        def __next__(self):
            if 0 <= self.i <= 1:
                j = self.i
                self.i += 1
                return j
            if self.i >= 2:
                j = self.fib_previous + self.fib_last
                self.i += 1
                self.fib_previous, self.fib_last = self.fib_last, self.fib_previous + self.fib_last
                return j

    def __iter__(self):
        """Создать и вернуть итератор"""
        return Fib._Fib_iter()

Печать чисел подряд и в виде списка:

In [6]:
from itertools import islice

for i in islice(Fib(), 30):
    print(i)
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229