2011-11-07 4 views
1

Это для домашней работы, которую я делаю.Словарь с полным итогом

У меня есть .txt-файл, который выглядит так.

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 

То, что я пытаюсь сделать, это держать нарастающий итог, когда вы вводите слово «яйцу», то слову «хлебу» ему нужно добавить стоимость как и продолжать идти до тех пор, «EXIT» также я собираюсь столкнуться с «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.Counter

import collections 
quantitiesWanted = collections.Counter() 

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

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

total = 0 
for key, value in quantitiesWanted: 
    total += groceries[key] * value 
Смежные вопросы