我正在尝试编写加热器功能,但我遇到了一些困难。我是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/py3compat.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`
答案 0 :(得分:3)
看起来你在time
(range()
结果,所以是整数列表)和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
此处仍然不是数组,因此您无法下标。