【问题标题】:Using an array, I get this error: TypeError: an integer is required使用数组,我得到这个错误: TypeError: an integer is required
【发布时间】: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]))。显然xf 是整数,因为它们是通过for 循环在此处定义的,并且您永远不会在循环内重新定义它们。所以archstartred[x] 不能是整数。告诉我们archstartred[x]的定义。
  • 你的 archstartred 数组中有什么?

标签: python arrays integer


【解决方案1】:

要将引号['255', '255', '255', '255', '0'] 中的整数列表转换为int,请正确使用此代码(您很接近):

archstartred = [int(value) for value in archstartred]

它会产生

[255, 255, 255, 255, 0]

【讨论】:

  • 谢谢!这就是我从其他程序中复制和粘贴的结果!
【解决方案2】:

你似乎没有循环 x 来获得所有的 archstarted。你是不是多写了一个[x]?

我的意思是,这里的缩进级别为 0,在所有循环之外:

for x in range (0, (archnodes-cursorsize)):
   if len(archstartblu) < archnodes:archstartblu.append(backblu)

archstartred[x] = [int(value) for value in archstartred[x]]
archstartgrn[x] = [int(value) for value in archstartgrn[x]]
archstartblu[x] = [int(value) for value in archstartblu[x]]

所以你只“触摸”了 archstartred、grn、blu 的最后一项(如果有的话)。我也期待

for x in ...
    archstartred[x] = [int(value) for value in archstartred]

archstartred = [int(value) for value in archstartred]

【讨论】:

    【解决方案3】:

    您的新错误意味着您正在尝试访问超出数组长度的值。如果您有一个包含四个项目的数组[1, 2, 3, 4],那么arr[5] 将因您的错误而失败。

    所以你很可能循环了太多次。否则你的数组中没有足够的元素。

    【讨论】:

    • 数组的大小没有设置正确吗?程序的“框架填充”部分中的循环与程序的“框架创建”部分相同吗? (工作框架*archnodes*3)。我“弹出”数据,然后“插入”新值,因此数组中信息的净变化为 0。
    猜你喜欢
    • 2022-01-08
    • 2016-11-17
    • 2018-06-24
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    相关资源
    最近更新 更多