如何在python中从多维列表中提取列表?

2024-09-26 22:44:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道如何使用索引从简单列表中提取元素,但不知道如何提取另一个列表中的列表。你知道吗

我需要这个:我正在pygame中制作一个蛇游戏。我基本上是在运行游戏,但我有一个问题,让游戏画蛇的尾巴。你知道吗

我的代码是这样工作的:我一直在使用pygame.draw文件对于图形。“蛇”以x和y坐标的盒子开始。还有一对x和y坐标表示食物(用变量posx和posy表示,以区别于用于蛇头的x和y变量)。我让游戏保存所有蛇以前的坐标到一个列表,它做的很好(我检查了游戏打印出它保存了什么)。我的代码是:

path.insert(0,(x,y))

“path”是我用来追踪蛇路径的列表的名称。你知道吗

我可以移动和吃的食物没有问题(除了我的游戏是有点没有反应的事实),问题是如果我试图实现代码来绘制蛇的故事。你知道吗

蛇的长度(它吃了多少“食物”)被保存在一个变量中,简称为“长度”。我写这段代码是为了描绘蛇的故事:

if length>0:
        for i in range(length-1):
            pygame.draw.rect(mainWindow, (255,255,255),(path[i], snakeSize,snakeSize))

请原谅最后一行的绕圈子。你知道吗

我想这会从“路径”列表中拉出单个的x,y列表。但是如果我吃了一块食物,除了食物出现在一个新的、随机的位置之外,什么也不会发生。如果我再吃一个,游戏就会冻结,我会收到一条错误信息,上面写着:

TypeError: Rect argument is invalid

我想我不喜欢把x和y坐标从“路径”中拉出来。我不知道如何从一个列表中从另一个列表中提取单个元素。你知道吗

而且,我不明白为什么我第一次吃东西时什么都没发生。我所知道的是,如果我把配方从长度-1改为长度,那么我一吃东西就立刻冻僵了。它似乎不喜欢长度等于1,我也不知道为什么。你知道吗


Tags: 文件path代码路径游戏元素列表pygame
1条回答
网友
1楼 · 发布于 2024-09-26 22:44:43

你所面临的问题是,当你做length-1的时候,当游戏开始的时候,我猜length等于1,所以length-1等于0,循环根本不执行,所以不会出现错误。你知道吗

因此,因为我们很快就会修复这个错误,首先将循环更改为for i in range(length)。你知道吗


至于你的错误,根据你的信息,path是这样的:

[(1, 2), (4, 1), (6, 4)]

现在让我们假设i=1。做path[i]你就得到了(4, 1)。这意味着你要传递给^{}'s last argument

((4, 1), snakeSize, snakeSize)

但它需要4个整数元组。所以你有两种方法:

  1. 只需将它期望的元素逐个传递给它。比如:

    (path[i][0], path[i][1], snakeSize, snakeSize)
    

    这肯定是一个4元组。

  2. 另一种更“pythonic”的方法是使用^{} operator to unpack元组。它看起来是这样的:

    (*path[i], snakeSize, snakeSize)
    

    为了理解这一点,让我们看一个简单的例子:

    >>> a = (4, 6)
    >>> print( (a, 1, 2) )
    ((4, 6), 1, 2)
    >>> print( (*a, 1, 2) )
    (4, 6, 1, 2)
    

    再说一次,这确实是一个4元组。

相关问题 更多 >

    热门问题