[英]How do I make a variable made out of a string global in python?
我正在嘗試制作二十一點游戲。 我已經制作了繪制牌的功能,並檢查一手牌中的總和是否超過21,但僅限於3名玩家。 這很容易我有3個列表。
但是我想為N個玩家做這件事,所以我想保留我的功能並制作另一個在玩家和他們的手之間切換的功能。
def create_hands():
global total_players
for x in range(1, total_players+1):
vars()["hand_%d" % x] = []
print hand_1
我希望創建盡可能多的牌,如hand_1,hand_2等......對於盡可能多的N個玩家(total_players)
error 由於上面的代碼,我得到一個錯誤
所以這一切都歸結為:
global ? 如何制作 global?
有沒有更好的方法呢?
是的,還有更好的方法。 只需創建一個列表列表。 如果可能的話,應該省略使用變量。 這真的很難閱讀和調試,你最近會后悔這種態度。 當你創建一個像players -> hand -> cards
一樣的列表players -> hand -> cards
,甚至是玩家players['player1'][3]
等玩家的三分之一卡時,你會對此更加滿意。
是的, 有可能做到這一點。 更換
vars()["hand_%d" % x] = []
同
globals()["hand_%d" % x] = []
但請注意,這種解決方案有點像hackish並且容易導致問題(維護困難,無法跟蹤自發創建的變量等)
您遇到的問題是vars()是locals()的別名,在官方文檔中有以下注釋:
Note: The contents of this dictionary should not be modified;
changes may not affect the values of local and free variables
used by the interpreter.
換句話說,增加鍵瓦爾() 不必更新的局部變量iables表(這就是為什么你得到的global name hand_1 is not defined
的錯誤- vars()[ "hand_1" ]
不作hand_1
成一個局部變量)。
正如Gandi所提到的,有更簡單的方法來做你想要做的事情 - 使用列表或類似的東西。 與創建任意命名的局部變量相比,有更多傳統的方法來解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.