0

我正在尝试编写加热器功能,但遇到了一些困难。我对 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`
4

2 回答 2

3

看起来您在timerange()结果,因此是整数列表)和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是一个list,所以你也不应该尝试测试它是小于还是大于单个整数;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)]
于 2013-08-21T14:08:21.403 回答
0

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

通常,您不应该在循环中重置循环变量(这可能不是您的意思)。

在您编辑的版本中,Temp = Temp[120]没有更好的:Temp这里仍然不是数组,因此您不能为其下标。

于 2013-08-21T14:11:34.367 回答