Домашнее задание № 6

Для выполнения задания найди ссылку-приглашение в онлайн чате, получи доступ к репозиторию с файлом-заготовкой и заполни пропуски в нём. Фиксируй изменения (делай коммиты) после решения каждой задачи. Оставь название файла неизменным, иначе робот-проверятель не найдёт твои ответы. Отправить решения на GitHub нужно до истечения установленного срока.

Вопрос 1

Создай метод next класса Fib. В этом классе value — это число Фибоначчи. Метод next возвращает экземпляр Fib, в котором value — следующее число Фибоначчи. Метод next должен выполняться константное время.

Заметь, что в доктестах ничего не печатается. Каждый вызов .next() возвращает экземпляр Fib, который отображается в интерактивной сессии как значение (посмотри метод __repr__).

Попробуй в методе next сохранять предыдущее значение в дополнительном атрибуте экземпляра.
class Fib():
    """Число Фибоначчи.

    >>> start = Fib()
    >>> start
    0
    >>> start.next()
    1
    >>> start.next().next()
    1
    >>> start.next().next().next()
    2
    >>> start.next().next().next().next()
    3
    >>> start.next().next().next().next().next()
    5
    >>> start.next().next().next().next().next().next()
    8
    >>> start.next().next().next().next().next().next() # Проверка, что start не изменился
    8
    """

    def __init__(self, value=0):
        self.value = value

    def next(self):
        "*** ТВОЙ КОД ЗДЕСЬ ***"

    def __repr__(self):
        return str(self.value)

Вопрос 2

Создай класс VendingMachine, который описывает автомат по продаже некоторого товара. Экземпляр класса VendingMachine возвращает строки в ответ на запросы различных действий. Посмотри на доктесты чтобы подразобраться.

class VendingMachine:
    """Торговый автомат, продающий некоторый товар по некоторой цене.

    >>> v = VendingMachine('яблоко', 10)
    >>> v.vend()
    'Товара нет в наличии.'
    >>> v.restock(2)
    'Количество товара «яблоко»: 2'
    >>> v.vend()
    'Нужно дополнительно внести 10 ₽.'
    >>> v.deposit(7)
    'Доступно: 7 ₽'
    >>> v.vend()
    'Нужно дополнительно внести 3 ₽.'
    >>> v.deposit(5)
    'Доступно: 12 ₽'
    >>> v.vend()
    'Получите яблоко и сдачу 2 ₽.'
    >>> v.deposit(10)
    'Доступно: 10 ₽'
    >>> v.vend()
    'Получите яблоко.'
    >>> v.deposit(15)
    'Товара нет в наличии. Вот твои деньги — 15 ₽.'

    >>> w = VendingMachine('лимонад', 2)
    >>> w.restock(3)
    'Количество товара «лимонад»: 3'
    >>> w.restock(3)
    'Количество товара «лимонад»: 6'
    >>> w.deposit(2)
    'Доступно: 2 ₽'
    >>> w.vend()
    'Получите лимонад.'
    """
    "*** ТВОЙ КОД ЗДЕСЬ ***"

Возможно, тебе пригодятся правила форматирования строк в Python. Например:

>>> ten, twenty, thirty = 10, 'двадцать', [30]
>>> '{0} плюс {1} получится {2}'.format(ten, twenty, thirty)
'10 плюс двадцать получится [30]'