2011-11-07 19 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 

は、あなたが行うことができ、現在の合計を取得するには