2012-03-02 181 views
0

我有一組變量:x1,x2,,x4,x5如何將變量包含在另一個變量中

x1 = 10 
x2 = 20 
x3 = 30 
x4 = 40 
x5 = 50 
number=1 
for looper in range(0,4): 
    xnumber = xnumber + 10 
    number = number + 1 

要獲取:x1 = 20x2 = 30等 因爲我也有:

"'xnumber' is not defined" 

我該如何解決這個問題?

回答

3

改爲使用數組,定義x[0] ... x[4]並用x[number]替換xnumber。另外,您也可以不定義number並使用循環索引:

x = range(5) 
x[0] = 10 
x[1] = 2 
x[2] = 30 
x[3] = 40 
x[4] = 50 
for i in range(0,5): 
    x[i] = x[i] + 10 
0

整數不可變。獲得所需內容的唯一方法是將每個變量重新分配給一個新的整數,並且必須對每個變量單獨執行 - 無法創建一個循環來執行此操作。

作爲我的意思的一個例子,如果值是可變的,你可以做什麼。我已經改變了每個變量來包含一個列表,而不是一個int。

x1=[10] 
x2=[20] 
x3=[30] 
x4=[40] 
x5=[50] 
vars = [x1, x2, x3, x4, x5] 
for looper in range(0,4): 
    vars[looper][0] = vars[looper][0] + 10 
print x1,x2,x3,x4,x5 
[20] [30] [40] [50] [50] 

注意looper只上升到3所以錯過x5

+1

此答案是一個完全不同的問題的正確答案。 :-) – 2012-03-02 19:54:48

+0

@LennartRegebro,我不知道你的意思。問題是如何更新循環內的單個變量,並且我支持我的答案,即如果不單獨使用每個變量,您都無法做到這一點。建議用列表替換變量的其他答案避開了這個問題。 – 2012-03-02 19:59:37

+0

@LennartRegebro,看我的編輯。這不是問題的最清晰的解決方案,但它證明我的答案不是脫離主題。 – 2012-03-02 20:15:58

3

更好地利用了這樣的列表:

x = [10, 2, 30, 40, 50] 
for index, value in enumerate(x): 
    x[index] = value + 10 

或字典,如果你想爲你的價值觀一些 '名字':

x = {'x1': 10, 'x2': 2, 'x3': 30, 'x4': 40, 'x5': 50} 
for key, value in x.items(): 
    x[key] = value + 10 

或類:

class x: 
    x1 = 10 
    x2 = 2 
    x3 = 30 
    x4 = 40 
    x5 = 50 

for index in range(1, 6): 
    attr_name = 'x%d' % index 
    setattr(x, attr_name, getattr(x, attr_name) + 10) 
+0

這太棒了!謝謝。此外,是否有任何可能的方法將一個變量包含到另一個變量中?例如,如果x1和x2等沒有整數值? – rollorox202 2012-03-03 20:49:45

+0

是的,列表和字典值,類屬性可以是任何對象,包括列表和字典:'x = {'first_key':1,'2':[1,2,[4,5]],3:{' a':7}}' – warvariuc 2012-03-04 07:01:11

0

使用字典。

>>> d = {'x1':10,'x2':20,'x3':30,'x4':40,'x5':50} 
>>> for key in d: 
... d[key] = d[key] + 10 
>>> for key in sorted(d): 
... print key, '=', d[key] 
... 
x1 = 20 
x2 = 30 
x3 = 40 
x4 = 50 
x5 = 60 
相關問題