所以,我正在嘗試創建一個游戲。在這個游戲機制中,用戶試圖使用字典中的專案。
inventory = {
"Health": ["Potion", "Hi-Potion","Elixer"],
"Weapons": ["Blade","Dagger","Staff"],
"Items": ["Glass", "Paper","Notes"],
"Components": ["Rusty Trombone"],
}
# Add and Use item
def add_to_inventory(item_type, item_name):
inventory[item_type].append(item_name)
def use_item():
for item_type, item_name in inventory.items():
print(item_type.title(),":",item_name)
use_item = input("What will you use? \n").title()
if use_item in inventory["Health"]:
position = inventory["Health"].index(use_item)
print(f"You've used {use_item}. {use_item} will now be discarded.")
return inventory["Health"].pop(position)
elif use_item in inventory["Weapons"]:
position = inventory["Weapons"].index(use_item)
print(f"You've used {use_item}. {use_item} will now be discarded.")
return inventory["Weapons"].pop(position)
elif use_item in inventory["Items"]:
position = inventory["Items"].index(use_item)
print(f"You've used {use_item}. {use_item} will now be discarded.")
return inventory["Items"].pop(position)
elif use_item in inventory["Components"]:
position = inventory["Compoents"].index(use_item)
print(f"You've used {use_item}. {use_item} will now be discarded.")
return inventory["Components"].pop(position)
use_item()
有很多冗余,但我很難找到如何縮短我的代碼。
使用 use_item 功能,我想首先查看整個庫存,以便用戶更輕松地選擇使用什么。然后是使用該專案的提示。我想保留所有字串的標題方法,以防多個單詞項需要首字母大寫。使用位置變數可以讓我獲得正在使用的專案的索引位置。這使我可以使用 pop 方法不僅從庫存中丟棄該物品,而且還可以將該物品歸還給它的預期用途(打開門的鑰匙、使用武器、恢復健康、修補)。
所有的機制還沒有被編碼,但我越看這部分越覺得它可以做得更好。我很難過如何去做。
我正在考慮遍歷每個鍵值對,然后從字典中丟棄該專案。但是,我需要 pop 方法來回傳有問題的專案(并結束函式)。我遇到了具有串列值的鍵的麻煩。作為一個串列的值使瀏覽更容易,但也提出了需要進一步迭代的問題——可能是嵌套的 for 回圈?但是后來我不確定如何實作它以適應這種情況。
uj5u.com熱心網友回復:
由于您對字典中的每個鍵都執行相同的操作,因此您可以使用for回圈:
for key in inventory:
if use_item in inventory[key]:
position = inventory[key].index(use_item)
print(f"You've used {use_item}. {use_item} will now be discarded.")
return inventory[key].pop(position)
uj5u.com熱心網友回復:
當您多次重復相同的操作時,您可以將其移動到
for回圈中的函式中。.remove()并在一種方法index中pop
def discard(user_item, inventory):
for k, v in inventory.items():
if user_item in v:
print(
f"You've used {user_item}. {user_item} will now be discarded.")
inventory[k].remove(user_item)
return user_item
def use_item():
for item_type, item_name in inventory.items():
# Join will join elements nicely
# Use an f string to easily edit string format
print(f"{item_type.title()}: {', '.join(item_name)}")
# Try not to name variables after your function name
user_item = input("What will you use? \n").title()
discard(user_item, inventory)
其他建議已在評論中
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/462030.html
上一篇:回圈多個多級有序logits,整理結果,一次洗掉一個觀察結果
下一篇:回圈并檢查是否為整數
