#python #dictionary
#python #словарь
Вопрос:
Что я пытаюсь сделать, так это создать функцию в python для суммирования общей цены товаров, добавленных в корзину, если товар доступен в словаре stock. В то же время, если товар доступен и добавлен к общему количеству, я хочу уменьшить количество элементов в этом словаре на сумму, которая была добавлена в корзину.
Я полностью застрял и не знаю, как двигаться дальше, пожалуйста, смотрите Приведенный ниже код:
stock = {
"item1": 6,
"item2": 0,
"item3": 32,
"item4": 15
}
prices = {
"item1": 4,
"item2": 2,
"item3": 1.5,
"item4": 3
}
def compute_bill(cart):
total = 0
for key in cart:
if stock[key] > 0:
total = prices[key]
return total
Комментарии:
1. Я ожидаю, что
compute_bill
это означает возврат суммы после перебора всех товаров в корзине, а не только после первого. То есть вы должны превзойтиreturn total
.
Ответ №1:
Исходя из предположения, не заявленного как часть проблемы, что значение cart dict — это количество элементов такого рода, я бы написал код следующим образом:
def compute_bill(cart):
total = 0
for key, value in cart.items():
if 0 < value <= stock[key]:
total = prices[key] * value
stock[key] -= value
return total
Если у вас были эти значения для stock
, price
, и cart
:
stock = {
"item1": 6,
"item2": 0,
"item3": 32,
"item4": 15
}
prices = {
"item1": 4,
"item2": 2,
"item3": 1.5,
"item4": 3
}
cart = {
"item1": 8,
"item2": 3,
"item3": 10,
"item4": 10
}
тогда вот цена корзины:
>>> print compute_bill(cart)
45.0
>>> from pprint import pprint
>>> pprint(stock)
{'item1': 6, 'item2': 0, 'item3': 22, 'item4': 5}
Обратите внимание, что item1 не уменьшился, потому что заказ не может быть заполнен полностью. Аналогично, item2 отсутствовал на складе и не был заполнен. И у покупателя есть по 10 элементов item3 и item4. Количество обоих этих элементов уменьшается на 10 единиц.
Кроме того, это позволяет избежать ошибки с отрицательным количеством в корзине, которая была у Amazon.
Комментарии:
1. Спасибо, как бы вы вызвали эту функцию и распечатали ее?
2. Большое спасибо!!! Это потрясающе. Хотел бы я знать это так, как знаете вы. Я только сейчас это изучаю, начал пару недель назад. Еще раз спасибо.
3. Теперь мне интересно, как я могу настроить это таким образом, чтобы элементы корзины определялись на основе пользовательского ввода. Должен ли я задать это как новый вопрос? На самом деле я хотел бы разобраться в этом самостоятельно, но я был бы признателен, если бы вы могли дать мне несколько советов, чтобы я, по крайней мере, понял основную концепцию того, как это сделать.
Ответ №2:
Вы можете просто уменьшить количество запасов для этого товара:
def compute_bill(cart):
total = 0
for key in cart:
if stock[key] > 0:
total = prices[key]
stock[key] -= 1
return total
Комментарии:
1. Спасибо, я тоже так подумал, но мне интересно, верну ли я только total, вернет ли это уменьшение запаса [key]? Лучший способ проверить — это заполнить код и распечатать его, я думаю, но я все еще пытаюсь понять, как это сделать, я просто изучаю python, поэтому все еще немного потерян
2. @JoeRay, это все равно уменьшит количество товаров на складе. То, что вы не возвращаете его, не означает, что вы не уменьшили значение. Как вы сказали. Попробуйте распечатать список товаров до и после, чтобы получить представление о том, что происходит. Рад, что смог помочь.