2016-06-01 6 views
-1

私はこのプログラムの2番目の機能に少し問題があったので、オンラインで(redditで)見つけたものからいくつかのヒントを取りました。私はそれが大好きではありませんが、今はもっと良い方法を考えているようです。退屈なものを自動化する、第5章練習プロジェクト

"inventoryパラメータがプレーヤーのインベントリを表す辞書(以前のプロジェクトのような)であり、addedItemsパラメータがdragonLootのようなリストであるaddToInventory(inventory、addedItems)という関数を記述します。 。。更新されたインベントリを表した辞書を返すaddedItemsリストは、同じ項目の倍数が含まれていることに注意してください」

ここで私が持っているものです。

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

def displayInventory(inventory): # This function is correct. 
    print("Inventory:") 
    item_total = 0 
    for k, v in inventory.items(): 
     item_total = item_total + v 
     print(str(stuff.get(k, 0)) + ' ' + k) 

    print("Total number of items: " + str(item_total)) 

displayInventory(stuff) 

def addToInventory(inventory, addedItems): 
    for i in range(len(addedItems)): 
     inv.setdefault(addedItems[i], 0) 
     inv[addedItems[i]] = inv[addedItems[i]] + 1 

    return inv 

inv = {'gold coin': 42, 'rope': 1} 
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby'] 
inv = addToInventory(inv, dragonLoot) 
displayInventory(inv) 

電流出力:

インベントリ: 1ロープ 42金貨 6トーチ 12矢印 1短剣アイテムの 総数:62 インベントリ: 1ロープ 42金貨 1短剣 0ルビアイテムの 総数:48

それで、そのままルビー1枚と金貨45枚を印刷するだけです。それは追加を行いますが、0ルビーを印刷し、42金貨にとどまります。もし誰かがこの2番目の関数を書く良い方法を持っていれば、私はこの記事のすべての内容ではないので、それを見たいと思っています。

+1

あなたの 'addToInventory'関数が' addedItems'引数を受け入れる理由はわかりませんが、すぐにそれをグローバル 'dragonLoot'値で上書きします。 –

+0

申し訳ありません私はそれで他の何かをしようとしていた私はそれを残して、私は正しく投稿します。 – ubundows

答えて

0

displayInventoryファンクションは、以前に更新されたインベントリではないstuffに現在の値を直接ルックアップします。

私はあなたがループ内のその値を持っているがそれを無視しているので、なぜそれをやっているのかわかりません。その値を使用する必要があります。

for k, v in inventory.items(): 
    item_total = item_total + v 
    print(v + ' ' + k) 
+0

コードでstr()をvに渡すだけで済みます。章のプロジェクトの終わりは、説明されたものを引き出すことを意図しているので、それは私がそれを持っていた理由です。私がプロジェクトの2番目の部分に着く前にそれが働いたので、私はエラーがそこにあったとは思わなかった。 – ubundows

関連する問題