Skip to content
Dmitriy Permyakov edited this page Dec 25, 2022 · 3 revisions

All tasks of the 5th week.

Task 1.

Open task

Опишите класс Calculator, который будет реализовывать следующие методы и поля:

sum(self, a, b) - сложение чисел a и b
sub(self, a, b) - вычитание
mul(self, a, b) - умножение
div(self, a, b, mod=False) - деление. Если параметр mod == True, то метод должен возвращать остаток от деления вместо деления. По умолчанию mod=False.
history(self, n) - этот метод должен возвращать строку с операцией по ее номеру относительно текущего момента (1 - последняя, 2 - предпоследняя). Формат вывода: sum(5, 15) == 20
last - строка того же формата, что в предыдущем пункте, в которой содержится информация о последней операции по всем созданным объектам калькулятора. Т.е. это последняя операция последнего использованного объекта калькулятор. Если операций пока не было, то None.
clear(cls) - метод, который очищает last, т.е. присваивает ему значение None.

Формат вывода:

При сохранении строк в history и last нужно выводить только один знак после запятой дробного числа. При выполнении деления с mod сам параметр mod не нужно записывать в лог.

Примечания:

В примере формата ввода показаны несколько вариантов вызова функции gift_count: с порядковыми аргументами и с передачей их по имени. Соответственно, аргументы функции должны называться так же, как они используются в примере.

Task 2.

Open task

Написать классы, которые будут использованы как счета в банке. Каждый счет - в своей валюте. Соответственно, у каждого объекта счета должны быть атрибуты с суммой денег, хранящихся на нём, и название кошелька. Каждый класс счета должен в себе хранить коэффициент отношения стоимости своей валюты к базовой валюте. Нам понадобится один базовый класс BaseWallet, в котором будут реализованы общие для всех валютных счетов методы, и три класса для конкретных валютных счетов: RubbleWallet, DollarWallet, EuroWallet. Будем считать коэффициентами отношения валют к базовой валюте:

Рубль: 1
Доллар: 60
Евро: 70

Протокол взаимодействия объектов следующий:

RubbleWallet("Первый кошелек", 10), где "Первый кошелек" - это название кошелька, а 10 - сумма денег на нём.
аналогичные конструкторы для других счетов
RubbleWallet("X", 10) + 20 == RubbleWallet("X", 30) - при сложении с числом считаем, что это та же валюта.
RubbleWallet("X", 10) += 20 - должен поддерживаться и такой синтаксис
20 + RubbleWallet("X", 10) == RubbleWallet("X", 30) - radd для чисел
RubbleWallet("X", 20) + DollarWallet("D", 10) == RubbleWallet("X", 620) - конвертация валюты при сложении счетов.
DollarWallet("D", 2) + RubbleWallet("X", 60) == DollarWallet("D", 3) - результат - в валюте первого слагаемого.
DollarWallet("D", 2) += RubbleWallet("X", 60) - здесь тоже должен поддерживаться этот синтаксис.
предыдущие 6 пунктов реализовать и для вычитания
RubbleWallet("X", 10) * 20 == RubbleWallet("X", 200) - умножение на число
RubbleWallet("X", 10) *= 20 - тоже с таким синтаксисом
те же 2 пункта для деления
20 * RubbleWallet("X", 10) == RubbleWallet("X", 200) - умножение числа на кошелек
DollarWallet("A", 15) == DollarWallet("B", 15): два объекта равны, если у них совпадает тип кошелька и сумма на счете.
RubbleWallet("X", 100).spend_all() - для любого типа кошелька релизовать функцию, которая обнуляет баланс, если он положительный
DollarWallet("X", 1).to_base() == 60 - эта функция должна возвращать число денег в кошельке в базовой валюте
print(DollarWallet("Q", 150)) - должна выводить строку: 'Dollar Wallet Q 150' (и аналогично Rubble и Euro для остальных кошельков)

У каждого объекта должны быть доступны атрибуты:

name - название кошелька
amount - количество денег на счете
exchange_rate - коэффициент стоимости валюты к базовой

Clone this wiki locally