Добавление товаров
Покупатели то и дело добавляют что-нибудь в корзину, поэтому программе нужна для этого функция: add_item(items, name, price, quantity). Она создаёт новый словарь для товара и добавляет его в конец списка с помощью .append().
Когда вы передаёте список в функцию, она получает тот же самый список, а не копию. Поэтому когда add_item() добавляет что-то в items, товар попадает в cart, и чек, напечатанный после этого, его показывает. Вот почему функции не нужно ничего возвращать. Это не противоречит тому, что вы узнали о локальных переменных: присваивание переменной внутри функции создаёт новую локальную переменную, а .append() ничего не присваивает, он изменяет сам список.
Хорошая программа проверяет и свои данные. Добавлять товар с количеством 0 или даже -1 бессмысленно. Поэтому в начале функции проверьте количество, и если оно меньше 1, выведите сообщение и завершите функцию с помощью return. Раз return завершает функцию, код, добавляющий товар, не выполнится. return без значения — это нормально: функция ничего не отдаёт, а просто останавливается. Вот та же идея на примере списка гостей ("" — пустой текст, между кавычками ничего нет):
def add_guest(guests, name):
if name == "":
print("У гостя должно быть имя.")
return
guests.append(name)
party = ["Анна"]
add_guest(party, "")
add_guest(party, "Том")
print(party)У гостя должно быть имя.
['Анна', 'Том']Вызовы пишутся внизу, над print_receipt(cart): сначала меняется корзина, потом печатается чек. А кофе принесёт сюрприз: с ним заказ стоит ровно $50.
Задание
- 1
Под
print_receipt()(над кодом внизу) напишите функциюadd_item(items, name, price, quantity), которая добавляет в конецitemsсловарь с ключами"name","price"и"quantity". - 2
Внизу, над
print_receipt(cart), добавьте два пакета кофе по $7:add_item(cart, "Кофе", 7, 2). В чеке появится новая строка,Кофе: 2 x $7 = $14, а итог теперь ровно $50, так что доставка бесплатна:Доставка: $0иК оплате: $50. Если доставка всё ещё стоит $5, проверьте условие вdelivery_price(). - 3
В начале
add_item()добавьте проверку: еслиquantityменьше1, выведитеНе удалось добавить Яйца: количество должно быть не меньше 1., подставив название товара вместоЯйца, и завершите функцию с помощьюreturn. Испытайте её под кофе:add_item(cart, "Яйца", 4, 0). Сообщение появится над чеком, а яйца в него не попадут.