2014-01-27 106 views

回答

1

Temp是不是一個元組,它只是一個括號中的整數。你可以用一個簡單的,來解決這個問題。考慮以下幾點:

>>> x = (42) # not a tuple 
>>> x[0] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object has no attribute '__getitem__' 
>>> 
>>> x = (42,) # tuple 
>>> x[0] 
42 

然而,元組是不可變的,你不能執行這樣的任務:

>>> x[0] = 0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'tuple' object does not support item assignment 

您可以通過使用一個列表,而不是解決此問題。

+0

但是OP正在嘗試將**分配給索引;一個元組不會允許這樣做。 –

+0

通過添加逗號,OP可以*索引*到'x'中,但仍然無法修改它,原因有兩個:(1)元組是不可變的。 (2)'i'循環了不是真正的元組或數組索引的值。 – DSM

+0

@MartijnPieters是的,這是一個很好的觀點。我會編輯答案。 – arshajii

3

你大概是試圖在這裏建立一個長度爲lenp的列表。你需要通過乘法這裏創建一個列表:

Temp = [None] * lenp 

但你會被追加到它會更好建設名單:

Temp = [] 
for i in p: 
    Temp.append(T * (i/po) ** rp) 

,你不使用p[i]i直接; Python for循環是真的每個循環。

您的range()會生成[0, 10, 20, ... 1200)系列中的值,for循環會將每個值分配給每個迭代的i。如果您使用i再次索引p,則會遇到問題; p[0]仍然是0,但p[10]然後將是100,p[20]200等,直到p[120]將拋出IndexError,因爲該範圍內只有119個不同的值。

可以摺疊該for環追加到Temp到一個列表理解打造一氣呵成名單:

rp=1.331 
po=1000 
T=280 

Temp = [T * (i/po) ** rp for i in range(0, 1200, 10)] 
2

有代碼中的幾個問題。

最直接的一個是,您的Temp值不是您可以指定的序列,只是一個整數(圓括號不會執行任何操作)。雖然可以通過添加逗號將其變爲一個元組,但它仍然不會讓您在創建之後將值分配到Temp(元組是不可變的)。相反,你可能想要一個列表。

但是,您的循環還有另一個問題。 A for for循環(如for value in sequence)將sequence中的值分配給變量value。它不分配索引!如果您需要索引,則可以使用enumerate或使用不同的循環構造,例如列表理解。

這裏有一個最低限度的改變版本的代碼,即首先創建的lenp零的列表,然後替換它們的值與計算的:

p=range(0,1200,10) 
lenp=len(p) 
rp=1.331 
po=1000 
T=280 
Temp=[0]*lenp 

for i, p_value in enumerate(p): 
    Temp[i]=T*(p_value/po)**rp 
print T 

這是一個使用列表理解,而不是一個一個更Python版本普通循環:

rp=1.331 
po=1000 
T=280 
Temp = [T*(p_value/po)**rp for p_value in range(0,1200,10)] 
相關問題