
Для работы небольшого магазинчика вас попросили сделать небольшой набор функций, обеспечивающих
работу с чеками. В качестве пробной версии вам нужно реализовать всего два действия: добавление покупки к набору покупаемых товаров, и печать чека. После того как чек напечатан должно быть возможно вводить новый список товаров. По правилам оформления документов в каждом чеке вы должны напечатать сначала номер чека (нумерация начинается с единицы) и число товаров, затем список товаров с ценами и в конце — итоговую стоимость. Из-за того, что вы не знаете число товаров, пока кассир не «пробьет» последний товар, нельзя печатать чек по мере ввода товаров. Приходится сначала добавить все необходимые товары и только затем печатать весь чек целиком. В конце чека печатается черта (состоящая из пяти знаков минус), по которой он отрывается от ленты.Организуйте две функции: 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
-----



Вот решение вашей задачи на основе описанных функций:
pythonclass CashRegister:
def __init__(self):
self.receipt_number = 1
self.items = []
def add_item(self, itemName, itemCost):
self.items.append((itemName, itemCost))
def print_receipt(self):
if not self.items:
return
print(f"Чек {self.receipt_number}. Всего предметов: {len(self.items)}")
for itemName, itemCost in self.items:
print(f"{itemName} - {itemCost}")
total_cost = sum(itemCost for _, itemCost in self.items)
print(f"Итого: {total_cost}")
print("-----")
self.items = []
self.receipt_number += 1
cash_register = CashRegister()
cash_register.add_item('Блокнот', 100)
cash_register.print_receipt()
cash_register.add_item('Ручка', 70)
cash_register.print_receipt()
cash_register.print_receipt()
cash_register.add_item('Булочка', 15)
cash_register.add_item('Булочка', 15)
cash_register.add_item('Чай', 5)
cash_register.print_receipt()
cash_register.add_item('Булочка', 15)
cash_register.add_item('Булочка', 15)
# Не вызываем print_receipt(), чтобы отменить текущий чек
Это решение использует класс CashRegister
, который имеет два метода: add_item(itemName, itemCost)
для добавления товара и его стоимости к текущему чеку, и print_receipt()
для печати текущего чека. Если чек пустой, метод print_receipt()
не печатает ничего. После печати чека список товаров обнуляется и увеличивается номер чека.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili