【发布时间】:2012-07-25 20:06:48
【问题描述】:
所以经过反复试验,我想我的数学终于算正确了。最初,我将其作为一组复杂的列表开始,但后来发现数组函数更适合我的需要。
现在我已经建立了数组,我得到了这个新错误:
编辑:
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
File "backandforth3.py", line 118, in (module)
frames.insert((x+f), (archstartred[x]))
TypeError: list index out of range
当我沮丧地对计算机大喊所有数据都已经是整数时,我放弃了我的计算机显示器并想在这里尝试一下。到目前为止,这里的所有帮助都很棒。
以下是我生成数组和数组数据的方式:编辑:将列表生成器添加到程序代码中,因为它似乎正在生成非整数值。
#List Generator
archstartred = []
archstartgrn = []
archstartblu = []
##Red List
for x in range (0, cursorsize):
if len(archstartred) < cursorsize:archstartred.insert(0,cursred)
for x in range (0, (archnodes-cursorsize)):
if len(archstartred) < archnodes:archstartred.append(backred)
##Green List
for x in range (0, cursorsize):
if len(archstartgrn) < cursorsize:archstartgrn.insert(0,cursgrn)
for x in range (0, (archnodes-cursorsize)):
if len(archstartgrn) < archnodes:archstartgrn.append(backgrn)
##Blue List
for x in range (0, cursorsize):
if len(archstartblu) < cursorsize:archstartblu.insert(0,cursblu)
for x in range (0, (archnodes-cursorsize)):
if len(archstartblu) < archnodes:archstartblu.append(backblu)
archstartred = [int(value) for value in archstartred]
archstartgrn = [int(value) for value in archstartgrn]
archstartblu = [int(value) for value in archstartblu]
#Frame Creation
from array import *
frames=array('i', (0 for i in range (0,workingframes*archnodes*3)))
#Frame Population
for f in range (0, workingframes):
if f<=(workingframes/2):
for x in range (0, (archnodes*3)):
frames.pop(x+f)
frames.insert((x+f), (archstartred[x]))
frames.pop((x+f)+workingframes)
frames.insert((x+f+workingframes), (archstartgrn[x]))
frames.pop((x+f)+workingframes*2)
frames.insert((x+f+workingframes*2), (archstartblu[x]))
for y in range (0, nodesperframe):
archstartred.pop()
archstartgrn.pop()
archstartblu.pop()
archstartred.insert(0, backred)
archstartgrn.insert(0, backgrn)
archstartblu.insert(0, backblu)
else:
for y in range (0, nodesperframe):
archstartred.pop(0)
archstartgrn.pop(0)
archstartblu.pop(0)
archstartred.append(backred)
archstartgrn.append(backgrn)
archstartblu.append(backblu)
for x in range (0, (archnodes*3)):
frames.pop(x+f)
frames.insert((x+f), (archstartred[x]))
frames.pop((x+f)+workingframes)
frames.insert((x+f+workingframes), (archstartgrn[x]))
frames.pop((x+f)+workingframes*2)
frames.insert((x+f+workingframes*2), (archstartblu[x]))
这与我在其他帖子中处理的程序相同。基本上,它是生成用于 RGB 照明系统的数据。这个“简单”的程序将使用 2 种颜色生成来回效果。其他变量包括效果所需的时间长度、帧大小(我们使用“序列器”来生成显示,您可以在序列器中改变帧大小)、“光标”大小等。
当然,一旦我弄清楚了这个效果,我就可以根据数学公式做出更复杂的效果。
【问题讨论】:
-
什么行号?您能否发布完整的回溯消息(这将很有帮助,因为它包含更多信息,包括行号)
-
哪一行给你错误?检查错误信息。
-
一种风格,你的范围中的前导 0 调用冗余。使用单个参数调用 range 假定您的意思是从 0 开始。
-
如错误消息所示,导致错误的行是:
frames.insert((x+f), (archstartred[x]))。显然x和f是整数,因为它们是通过for循环在此处定义的,并且您永远不会在循环内重新定义它们。所以archstartred[x]不能是整数。告诉我们archstartred[x]的定义。 -
你的
archstartred数组中有什么?