【问题标题】:Adding new coordinates to a list not working for me向列表中添加新坐标对我不起作用
【发布时间】:2014-07-09 22:28:01
【问题描述】:

我正在尝试使此代码正常工作,但使用此代码时出现此错误:

  File "E:\Snacks.py", line 93, in runGame
    obsCoords.insert(0, newobs)
AttributeError: 'dict' object has no attribute 'insert'

那是因为我在列表后面设置了一个位置:

obsCoords = []
obscoords = getRandomLocation()

if (event.key == K_q) and len(wormCoords) >= 4:
    del wormCoords[-1]  
    obsCoords['x'] = wormBody['x']
    obsCoords['y'] = wormBody['y']
    newobs = {'x': obsCoords['x'], 'y': obsCoords['y']}
    obsCoords.insert(0, newobs)

if wormCoords[HEAD]['x'] == obsCoords['x'] and wormCoords[HEAD]['y'] == obsCoords['y']:
            return

所以我删除它:

obsCoords = []

if (event.key == K_q) and len(wormCoords) >= 4:
    del wormCoords[-1]  
    obsCoords['x'] = wormBody['x']
    obsCoords['y'] = wormBody['y']
    newobs = {'x': obsCoords['x'], 'y': obsCoords['y']}
    obsCoords.insert(0, newobs)

if wormCoords[HEAD]['x'] == obsCoords['x'] and wormCoords[HEAD]['y'] == obsCoords['y']:
            return

并以这个错误结束:

TypeError: list indices must be integers, not str

我想做的只是将新位置添加到列表中。谁能帮帮我?

【问题讨论】:

标签: python list python-2.7


【解决方案1】:

在您的第一个代码中,您有两个错误:

obsCoords = []
obscoords = getRandomLocation()

第一个是您实际上声明了两个看起来相似的不同变量。虽然我认为这是一个错字……这导致我犯了第二个错误:

obsCoords = []
obsCoords = getRandomLocation()

在这里,您正在创建一个列表obsCoords,您将用getRandomLocation() 的结果覆盖它,不管它是什么,这可能不是您想要的。

然后在你的第二个代码中,你正在做:

obsCoords = []
…
newobs = {'x': obsCoords['x'], 'y': obsCoords['y']}
obsCoords.insert(0, newobs)
…
obsCoords['x']

那段代码毫无意义!

您正在创建一个列表obsCoords,然后您通过访问obsCoords 来创建newobs,就像一个字典来获取xy。然后你想将它插入到obsCoords 中,就像它是一个列表一样,最后尝试从obsCoords 中获取x 值,就像一个字典一样:

obsCoords = []               #     obsCoords -> []
obsCoords['x']               #     obsCoords is an empty list.
obsCoords['y']               #     for this to work it should be : {'x': …, 'y': …}
                             #     suppose it did not fail, here's what's next:
obsCoords.insert(0, newobs)  #     obsCoords -> [{'x': …, 'y': …}]
obsCoords['x']               #     again you're accessing like a dict!

你想要什么? obsCoords 是列表还是字典?!

【讨论】:

  • 当字母 q 被按下蛇所在的位置时,我正在尝试将一个对象放在屏幕上,我需要创建一个坐标列表,以便它们将留在这些位置然后成为要避免的强迫症,所以我不确定我是否知道自己想要什么,并且我对自己正在做的事情并不过分自信,正如您所说的那样! def drawObs(obsCoords): x = obsCoords['x'] * CELLSIZE y = obsCoords['y'] * CELLSIZE ObsRect = pygame.Rect(x, y, CELLSIZE, CELLSIZE) pygame.draw.rect(DISPLAYSURF, ORANGE, ObsRect)
  • 好吧,请不要问另一个问题作为对您提出的另一个问题的答案的评论。我确实知道入门并不容易,但您应该先了解基础知识。你应该先通过 python 教程来了解不同的类型,以及它们如何帮助你做你想做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
相关资源
最近更新 更多