Для работы небольшого магазинчика вас попросили сделать небольшой набор функций, обеспечивающих работу с чеками. В качестве пробной версии вам нужно реализовать всего два действия: добавление покупки к набору покупаемых товаров, и печать чека. После того как чек напечатан должно быть возможно вводить новый список товаров.
По правилам оформления документов в каждом чеке вы должны напечатать сначала номер чека (нумерация начинается с единицы) и число товаров, затем список товаров с ценами и в конце — итоговую стоимость. Из-за того, что вы не знаете число товаров, пока кассир не «пробьет» последний товар, нельзя печатать чек по мере ввода товаров. Приходится сначала добавить все необходимые товары и только затем печатать весь чек целиком. В конце чека печатается черта (состоящая из пяти знаков минус), по которой он отрывается от ленты.
Организуйте две функции: add_item(itemName, itemCost) и print_receipt(), которые реализуют указанный функционал. Форматирование сделайте по шаблону в примере.
В случае, когда чек пуст, print_receipt не должна печатать чек. Не забудьте, что после того как чек напечатан, набор выбранных товаров должен обнулиться, чтобы можно было вводить товары для нового чека.
Пример
Ввод Вывод
add_item('Блокнот', 100)
print_receipt()
add_item('Ручка', 70)
print_receipt()
print_receipt()
add_item('Булочка', 15)
add_item('Булочка', 15)
add_item('Чай', 5)
print_receipt()
add_item('Булочка', 15)
add_item('Булочка', 15)
# (Отменить чек) - этот чек не печатаем
Вывод:
Чек 1. Всего предметов: 1
Блокнот - 100
Итого: 100
-----
Чек 2. Всего предметов: 1
Ручка - 70
Итого: 70
-----
Чек 3. Всего предметов: 3
Булочка - 15
Булочка - 15
Чай - 5
Итого: 35
-----
Примечания:
Это относится к большинству задач, но не лишним будет напомнить, что решить задачу можно несколькими способами.
Ответы
class Receipt:
def __init__(self):
self.number = 1
self.amount = 0
self.cost = 0
self.lines = []
def add_item(self, item, cost):
self.amount += 1
self.lines.append("%s - %s" % (item, str(cost)))
self.cost += cost
def new(self):
self.number += 1
self.amount = 0
self.cost = 0
self.lines = []
def print(self):
if self.amount != 0:
print("Чек %s. Всего предметов: %s" % (self.number, self.amount))
for line in self.lines:
print(line)
print("Итого: %s" % self.cost)
print("-----")
self.new()
r = Receipt()
def add_item(item, cost, receipt = r):
receipt.add_item(item, cost)
def print_receipt(receipt = r):
r.print()
add_item('Блокнот', 100)
print_receipt()
add_item('Ручка', 70)
print_receipt()
print_receipt()
add_item('Булочка', 15)
add_item('Булочка', 15)
add_item('Чай', 5)
print_receipt()
add_item('Булочка', 15)
add_item('Булочка', 15)
# (Отменить чек) - этот чек не печатаем
_________________________________
Этот код печатает следующее:
Чек 1. Всего предметов: 1
Блокнот - 100
Итого: 100
-----
Чек 2. Всего предметов: 1
Ручка - 70
Итого: 70
-----
Чек 3. Всего предметов: 3
Булочка - 15
Булочка - 15
Чай - 5
Итого: 35
-----