elif和if语句出错

时间:2013-08-21 14:00:20

标签: python

我正在尝试编写加热器功能,但我遇到了一些困难。我是Python的新手。

我希望我的加热器运行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`

2 个答案:

答案 0 :(得分:3)

看起来你在timerange()结果,所以是整数列表)和Temp(大写,循环变量,整数)之间变得混乱。< / p>

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)]

答案 1 :(得分:0)

在你的循环中,T是来自xrange(150001)的整数。在then语句的if子句中,将T设置为数组,但这与elif子句中发生的事情没有任何关系。

一般情况下,你不应该在循环中重置循环变量(这可能不是你的意思)。

在您编辑的版本中,您有Temp = Temp[120]并不是更好:Temp此处仍然不是数组,因此您无法下标。