как уменьшить количество элементов словаря на единицу при добавлении товара в корзину в python

#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, это все равно уменьшит количество товаров на складе. То, что вы не возвращаете его, не означает, что вы не уменьшили значение. Как вы сказали. Попробуйте распечатать список товаров до и после, чтобы получить представление о том, что происходит. Рад, что смог помочь.