2016-04-12 86 views
0

我試圖讓一個X1,X2,X3等」,但我不知道我怎麼... 試圖讓這個代碼作爲同時:如何在python中爲變量指定一個數字?

x1=random.choice(string.letters) 
x2=random.choice(string.letters) 
x3=random.choice(string.letters) 
x4=random.choice(string.letters) 
x5=random.choice(string.letters) 
x6=random.choice(string.letters) 
x7=random.choice(string.letters) 
x8=random.choice(string.letters) 
x9=random.choice(string.letters) 
x10=random.choice(string.letters) 

但是當我試圖把它寫爲while循環:

i=1 #Counter 

#Letter Creation 
while i<=10: 
    x(i) = random.choice(letterschoice) 

但存在錯誤。我如何修復x(i)並將其設爲x1,x2,x3等?

+0

創建這些變量的列表,然後遍歷它。 – Maroun

回答

2

而是有十個不同的變量,它會更容易使用的列表:

x = [] 

for i in range(0, 10): 
    x.append(random.choice(letterschoice)) 

然後,您可以使用[]運營商訪問的x特定元素。請注意,它使用從零開始的索引(即,第一個元素是x[0],第二個元素是x[1]等)。

+0

真的很好的答案,但它並不完全回答這個問題。 – Derlin

+1

@德林:問題是[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem);對於提問者的基本目標來說,這個答案比動態創建編號變量更好。只是在人們熟悉列表和字典之前,他們會根據「如何創建編號變量」或「如何從字符串創建變量」而不是「如何存儲一系列值」來思考問題。 ,導致他們無法意識到的問題擺在不好的位置。 – user2357112

+0

我完全同意。你是對的,但我也想到其他人需要實際使用變量。無論如何,你的回答非常好。 – Derlin

1

一種可能性是使用exec,哪怕是在安全方面非常糟糕

>>> exec('x1 = ' + str(2)) 
>>> x1 
2 

在一個循環:

for i in range(0,10): 
    cmd = "x%d = %d" % (i,random.choice(letterschoice)) 
    exec(cmd) 

一個更好的辦法是使用globalslocals()魔法:

>>> globals()["x1"] = 3 
>>> x1 
3 

在一個循環:

for i in range(0, 10): 
    globals()["x" + str(i)] = random.choice(letterschoice) 

如果你的變量屬於一個對象,而應使用setattr(self, "varname", value)


當然,在你的例子會比較適合使用列表x[]。然後使用它,如x[1]等。

如果字符串'x1'等很重要,也可以使用字典。在python中,dict看起來像:{'x1': val, 'x2', val2}等。例如,您可以使用它與myDict["x1"]

+0

這仍然不(至少明確)解決如何使它在循環中工作 –

+0

@ M.T我添加了兩個示例。對於名單和字典,我讓他弄明白了。 – Derlin

相關問題