2012-12-07 76 views
-2

如何使用for循環在python 3.2中使用數字來增加變量名稱?
p是玩家,可以是1或2. p1和p2是每個玩家的不同符號。如何訪問具有不同名稱的變量?

p = 1 
    p1 = x 
    p2 = i 
    for c in range(1,3): 
     input('Player {} ({}), ...? '.format(p,(locals()['p'+str(p)]))) 

這個locals()函數正在製作字典,但我希望它是變量名。怎麼樣?

+5

可能不應該有這樣的需要。你準備寫什麼樣的程序? – Anorov

+0

您試圖完成的最終目標是什麼?正如Anorov所說,這不太可能是一種好方法。 – dckrooney

+2

解釋爲什麼這不太可能是一種好方法:現在你在做什麼實際上工作得很好。問題是,大概你試圖從一個不同的範圍使用它,其中的變量不在'locals()'中。爲了解決這個問題,你必須傳遞'locals'字典。在這一點上,你可能會維護一個正常的字典並傳遞它,而不是試圖通過名字訪問局部變量。這條規則有一些很好的例外,但是如果其中一條是相關的,那麼您應該立即解釋它,否則所有的答案都將是「爲什麼?!」 – abarnert

回答

2

數據存儲在數據結構中,而不是變量名稱。使用字典,列表或任何其他數據結構。

players = [] 

for c in range(1,3): 
     pl = input('Player P{} ...? '.format(c) 
     players.append(pl) 

print players[2] 
0

你可以使用一個簡單的類來保存玩家。這裏有一個例子,可以讓你從字面上請求玩家,也可以傳遞一個可變數字。

class Players: 
    def __init__(self, players): 
     self.__dict__ = {"p{}".format(i+1):p for i,p in enumerate(players)} 
    def __getitem__(self, item): 
     return self.__dict__["p{}".format(item)] 

p = Players(["player 1 obj", "player 2 obj"]) 

# equivalent 
print p.p2 
print p[2] 
相關問題