收到“ TypeError:'bool'对象无法下标”并且不确定为什么或如何修复它

我正在pygame中制作一个简单的游戏,并且在尝试减少代码时遇到错误。

bulletDirectionBoolean = [bulletRight,bulletLeft,bulletDown,bulletUp]
firstTime = [firstTime1,firstTime2,firstTime3,firstTime4]
bulletDirectionX = [bulletRightX,bulletLeftX,bulletDownX,bulletUpX]
bulletDirectionY = [bulletRightY,bulletLeftY,bulletDownY,bulletUpY]
bulletDirectionmoving = [bulletRightX,bulletUpY]
directionList = [1,-1,1,-1]
limits = [screenX,-20,screenY,-20]

for i in range(4):
    if bulletDirectionBoolean[i] or powerupAbility[3]:
        if firstTime[i]:
            firstTime[i] = False
            bulletDirectionX[i] = player_posX
            bulletDirectionY[i] = player_posY
        screen.blit(bullet_img,(bulletDirectionX[i],bulletDirectionY[i]))
        bulletDirectionmoving[i] += bulletSpeed*directionList[i]

        if directionList[i] == 1:
            if bulletDirectionmoving[i] > limits[i]:
                bulletDirectionBoolean = False
                firstTime[i] = True
        if directionList[i] == -1:
            if bulletDirectionmoving[i] < limits[i]:
                bulletDirectionBoolean = False
                firstTime[i] = True

这是失败的代码块。 for循环后的第一行是它的中断位置。 powerupAbility是代码中未显示的另一个具有布尔值的列表。列表bulletDirectionBoolean也是如此。列表中的所有值都是由用户控制的布尔值。我正在尝试同时为四个不同的项目符号访问每个列表中的每个值。

为什么会给我这个错误,我该怎么解决?

zjm550 回答:收到“ TypeError:'bool'对象无法下标”并且不确定为什么或如何修复它

在这里,您将bulletDirectionBoolean更改为布尔值:

...
    if directionList[i] == 1:
        if bulletDirectionMoving[i] > limits[i]:
            bulletDirectionBoolean = False
...

我想你想做

...
    if directionList[i] == 1:
        if bulletDirectionMoving[i] > limits[i]:
            bulletDirectionBoolean[i] = False

...

相反或类似的东西。

,

Sloth已经解决了您当前的问题。我只想补充一下,“平行列表”是一种反模式,如果它们不是严格地局部的,甚至还要更多-如果代码的其他部分以一种意想不到的方式触摸了其中一个列表(将其排序,反转,推送到它弹出等等),所有投注均关闭。

一种更好的设计是元组,字典或数据类的一个列表,即:

# brittle
foos = ["a","b","c"]
bars = [1,2,3]

for i in range(3):
    print("{} : {}" .format(foos[i],bars[i]))

# more robust    
foobars = [("a",1),("b",2),("c",3)]
for foo,bar in foobars:
    print("{} : {}".format(foo,bar))


# more robust and more explicit:
foobars = [{"foo": "a","bar": 1},{"foo":"b","bar": 2},("foo": "c","bar:3}]

for foobar in foobars:
    print("{} : {}".format(foobar["foo"],foobar["bar"]))

此外,如果假定您的“列表”具有固定的大小(示例中所有内容的长度似乎都为4),则可能需要定义自己的专用容器类,这将强制集合的大小(以及可能还有其他不变量)。

本文链接:https://www.f2er.com/2777351.html

大家都在问