2013-08-21 94 views
0

我想寫一個加熱器功能,但我有一些困難。我對Python相當陌生。錯誤與elif和if語句

我想我的加熱器運行15000秒,但前120秒(包括120),我希望它遵循線性路徑T = 0.0804 * t + 16.081,然後120秒後,我希望它保持恆定的剩餘的其餘部分根據線性方程得出最終溫度下的時間。

我寫的代碼是低於我得到的錯誤與

import math, numpy as np 
from random import * 

a = 0.0804 
time = range(15001) 

for time in xrange(15001): 
    if 0 < = time < = 120: 
    Temp = a * np.array(time) + 18.3 
    elif time > 121: 
    Temp = Temp[120] 

錯誤:

TypeError 
Traceback (most recent call last) 
    /Library/Python/2.7/site-packages/ipython-1.0.0_dev-py2.7.egg/IPython/utils/py3c‌​ompat.pyc in execfile(fname, *where) 
     202 else: 
     203 filename = fname 
    --> 204 builtin.execfile(filename, *where) 
/Users/mariepears/Desktop/heaterfunction.py in <module> 
    () 16 print T 
     17 elif t>121: 
    ---> 18 T=T[120] 
TypeError: 'int' object is not subscriptable` 
+1

好吧,有什麼錯誤? (我甚至不知道該怎麼說你的變量名) – Doorknob

+0

請編輯它到問題中,以便它實際上是可讀的。 – Doorknob

+0

@MariePears如果您將其編輯到您的問題中,它肯定會提高可讀性。 – glglgl

回答

3

它看起來像你得到之間time(的range()結果搞得一團糟,所以整數列表)和Temp(大寫,循環變量,整數)。

time = range(15001) 
for Temp in xrange(15001): 
    if 0 <= Temp <= 120: 
    Temp = a * np.array(time) + 18.3 
    elif Temp > 121: 
    Temp = time[120] 

因爲time列表,你不應該試圖再次進行測試,如果它是不是一個整數更小或更大要麼; 0 <= time <= 120沒有意義;不同類型之間的排序總是先放置數字,然後通過命令它們的類型名稱;整數是總是低於列表,所以time > 121總是True

temperatures = [] 
for second in xrange(121): 
    last = a * second + 18.3 
    temperatures.append(last) 

temperatures += temperatures[120:] * (15000 - 120) 

或列表的理解:

temperatures = [a * min(sec, 120) + 18.3 for sec in xrange(150001)] 
+0

我重新編輯了我的名字。我想要時間循環併產生不同的溫度,然後我想在120秒後保持恆定的溫度。 –

+1

@MariePears:那麼爲什麼不直接循環'時間'? –

+0

@MariePears:每秒計算的運算數是多少? 'np.array()'調用沒有意義,真的。 –

0

在你的循環,Txrange(150001)整數。在if語句的then子句中,您將T設置爲數組,但這與elif子句中發生的情況沒有任何關係。

通常,您不應該在循環中重置循環變量(這可能不是您的意思)。

在你編輯的版本中,你有Temp = Temp[120]這是沒有更好的:Temp仍然不是一個數組在這裏,所以你不能下標。

+0

我把溫度=溫度[120],因爲我想第120位的價值保持不變。我意識到這可能是錯誤的,但我不知道如何寫我想要的東西 –