Python 3.6

Здравствуйте, пишу программу для управления запасами для школы, и я не могу понять, как добавить 1 к существующему числу в словаре. Итак, у меня есть количество элемента, хранящегося в словаре, и я не могу понять, как заставить Python добавить 1 к количеству. Код - это то, что показано ниже:

stock = {'Intel i7-7770T' : ['Intel i7-7770T', '$310', 'New','1101'],
         'Intel i7-7770T QUAN' : [3]}

Нужно ли мне определить функцию? Так что, если я продам один Intel i7-7770T, то тогда Intel i7-7770T QUAN должен стать 2. Или, если я получу больше акций, он должен стать 4. Как я могу добиться этого? Любая помощь будет принята с благодарностью. Спасибо!

Также добавление осуществляется с помощью кнопки с использованием Tkinter, и я понял это. Так что, если это делается с помощью функции, я бы просто связал кнопку с функцией.

3
Egor. L 30 Авг 2017 в 11:18

4 ответа

Лучший ответ

В более обобщенном методе, чем @Danil Speransky с вашей текущей структурой dict:

def sold(name, quant):
    stock[name + " QUAN"][0] -= 1

Я бы также реструктурировал диктат и даже рассмотрел определение класса для создания объектов в диктанте:

class store_item(object):
    def __init__(self, price, condition, quantity, info1=None, info2=None):
        self.price_usd = price
        self.condition = condition
        self.info1 = info1
        self.info2 = info2
        self.quant = quantity

Тогда вы могли бы сделать надикт с объектами в нем и получить к нему хороший доступ (вы могли бы даже использовать наследование для создания специальных классов для различных типов продуктов, например процессоров). Пример доступа:

stock['Intel i7-7770T'].quant -= 1
stock['Intel i7-7770T'].price_usd *= 0.95

Преимущество использования класса заключается в том, что вы можете записать дополнительную инициализацию в объект и создать методы для выполнения определенных действий над объектом. Например, скидка может быть сделана другим способом, который сохраняет старое значение:

class store_item(object):
    def __init__(self, price, condition, quantity, discount=None, info1=None, info2=None):
        self.price_usd = price
        self.discount = discount
        self.condition = condition
        self.info1 = info1
        self.info2 = info2
        self.quant = quantity

   def get_price(self, unit):
       if self.discount is None:
           return getattr(self, "price_" + unit)
       else:
           return getattr(self, "price_" + unit) * (1 - self.discount)
1
C.Fe. 30 Авг 2017 в 08:52

Нет необходимости в списке. Просто сохраните количество как простое значение. И просто используйте значение. Ваш JSON будет выглядеть так:

stock = {'Intel i7-7770T' : ['Intel i7-7770T', '$310', 'New','1101'],
     'Intel i7-7770T QUAN' : 3}

И вы можете получить доступ к этому количеству с stock['Intel i7-7770T QUAN']

Используйте код, указанный в первых двух комментариях, чтобы удалить / увеличить количество без [0].

И я бы порекомендовал изменить структуру диктата и использовать диктат для модели, цены и т. Д. Таким образом, проще и надежнее ссылаться на эти атрибуты по их ключу, чем полагаться на список и получать их по индексу.

0
winem 30 Авг 2017 в 08:24

Я бы переформатировал весь дикт

stock = {
    'Intel i7-7770T': {
        'price_USD': 310,
        'condition': 'New',
        'whatever': '1101',   # should this really be a string, or is it always a number?
        'quantity': 3
    },
    ...
}

Тогда вы можете делать такие вещи, как stock['Intel i7-7770T']['quantity'] += 1

Другие операции должны быть проще. 20-процентная скидка:

stock['Intel i7-7770T']['price_USD'] *= 0.8

Удалить весь товар со склада:

stock.pop('Intel i7-7770T')
1
Honza Zíka 30 Авг 2017 в 08:32

Попробуй это:

stock['Intel i7-7770T QUAN'][0] += 1
1
Danil Speransky 30 Авг 2017 в 08:20