2017-04-13 4 views
1

コードを理解していけない:のPython 3のコードは、意図したとおりに動作しますが、私は、なぜ

inv = {'arrow': 12, 'gold coin': 42, 'rope': 1, 'torch': 6, 'dagger': 1} 

def show_inv(): 
    print('inventory:') 
    item_total = 0 
    for k, v in inv.items(): 
     print(str(v)+ ' ' + (k)) 
     item_total = item_total + v 
    print('total number of items: ' + str(item_total)) 

show_inv() 

結果(予想通り):

在庫:

12が矢印

42金貨42

1ロープ

6項目のトーチ

1短剣

総数:62

が、どのよう

item_total = item_total + v 

は私に正しい値の合計を与えません?

編集:なぜprint(str(v))だけでも、常に「ダガー」キーに値を渡しますか?ここ

+2

合計を与えるために辞書の値を加算するだけです。 – Li357

+0

各反復では、現在の項目の数を項目 'item_total + v'の項目の合計数に加算し、その更新された値を' item_total = ... 'に戻します。 – Aaron

+1

' item_total'は 'item_total + v'に割り当てられています - 割り当ての右手側が最初に評価されてから割り当てが行われます。 – birryree

答えて

2

重要な行は、次のとおりです。あなたが辞書のitemsイテレータにfor -loopを使用する場合、それはkey sおよびその辞書のvalueの両方をループ

for k, v in inv.items(): 
    # do stuff 

ます。名前から値までの辞書があるので、valuesv)が各項目の値になります。これらをすべて追加すると、正しい合計値が得られます。

目録内のすべての項目について

item_total = item_total + v 

実行一度ライン、それは在庫上で動作for -loop内にあるため。

Iterators in Pythonについて読むことは、これがなぜ機能するのか理解するのに役立ちます。

関連する問題