Словарь с текущим итогом

#dictionary #python-3.x

#словарь #python-3.x

Вопрос:

Это для домашней работы, которую я делаю.

У меня есть текстовый файл, который выглядит следующим образом.

 11
eggs
1.17
milk
3.54
bread
1.50
coffee
3.57
sugar
1.07
flour
1.37
apple
.33
cheese
4.43
orange
.37
bananas
.53
potato
.19
  

Что я пытаюсь сделать, так это сохранить текущий итог, когда вы вводите слово «Яйца», а затем слово «хлеб», необходимо добавить стоимость обоих и продолжать до «ВЫХОДА», также я собираюсь столкнуться с «KeyError» и с этим тоже нужна помощь.

   def main():
    key = ''
    infile = open('shoppinglist.txt', 'r')
    total = 0
    count = infile.readline()
    grocery = ''
    groceries = {}


    print('This program keeps a running total of your shopping list.')
    print('Use 'EXIT' to exit.')


    while grocery != 'EXIT':

        grocery = input('Enter an item: ')

        for line in infile:
            line = line.strip()
            if key == '':
                key = line

            else:
                groceries[key] = line
                key = ''

        print ('Your current total is $'  groceries[grocery])

main()
  

Ответ №1:

Содержит ли файл цены на каждый из разных продуктов?

У пользовательского input оператора также должно быть .strip() в конце, так как иногда символы окончания строки могут быть включены из пользовательского ввода.

Вам нужно будет прочитать файл только один раз, а не в цикле.

Когда пользователь вводит продуктовый товар, он должен, как вы говорите, проверить, существует ли он:

 if grocery in groceries:
    ...
else:
    #grocery name not recognised
  

Я думаю, у вас должен быть отдельный словарь для хранения количества каждого продуктового магазина примерно так:http://docs.python.org/library/collections.html#collections .Счетчик

 import collections
quantitiesWanted = collections.Counter()
  

Тогда можно запросить любой продуктовый продукт, подобный этому, quantitiesWanted['eggs'] который будет возвращен 0 по умолчанию. Выполнение чего-то подобного quantitiesWanted['eggs'] = 1 увеличит его до 1 и так далее.

Чтобы получить текущий итог, вы можете сделать:

 total = 0
for key, value in quantitiesWanted:
    total  = groceries[key] * value