【问题标题】:Is there anyway to fix 'int' is not subscriptable without changing it to string data type?有没有办法在不将其更改为字符串数据类型的情况下修复 \'int\' 不可订阅?
【发布时间】:2022-11-29 12:44:44
【问题描述】:

我正在制作一个列表来存储我的方向:

direction = [(0, +24),(+24,0),(0, -24),(-24,0)]

并在此函数中使用该列表来确定机器人将采取(或回溯)的下一个方向

def backtrack(self,x,y,direction):
    x_walls = round(sprite.xcor(), 0)
    y_walls = round(sprite.ycor(), 0)
    visited.append((x_walls, y_walls))
    for i in range(4):
        new_direction = (direction + i) % 4

        new_x = x + direction[new_direction][0]
        new_y = y + direction[new_direction][1]

        if (new_x,new_y) not in visited and sprite.spriteMove():
            sprite.backtrack(new_x,new_y,new_direction)
            sprite.spriteback()
        sprite.right(90)



但是当我尝试调用该函数时

sprite.backtrack(0,0,0)

它给我错误 int is not subscriptable,对这些人有什么提示吗?

我尝试将整个列表转换为字符串,但函数中的方向公式需要整数,所以目前我不知道下一步该怎么做

【问题讨论】:

  • 为了执行类似direction[new_direction] 的操作,direction 对象需要是可订阅的。但是您将 0 作为参数传递给方法的 direction 参数,而 0 是整数,而不是可订阅对象(如列表、元组或字符串)。目前尚不清楚您在这里的意图。

标签: python python-3.x list function


【解决方案1】:

当您调用 sprite.backtrack(0,0,0) 时,您的函数将以 x=0y=0direction=0 运行,因为这与您的函数签名匹配。 0 是一个整数,不可订阅。

据我了解,您希望 direction 成为具有 4 个元素的可订阅对象,并且每个元素都是具有两个元素的可订阅对象。所以你可以试试sprite.backtrack(0,0,[(0,0), (0,0), (0,0), (0,0)])

请注意,将整数 0 转换为字符串将使它成为可订阅的,但它将作为一个元素的可订阅函数,因为字符串 '0' 具有一个字符。

【讨论】:

    猜你喜欢
    • 2013-05-20
    • 2010-09-26
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2018-07-07
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多