Python:IndexError:list index超出范围访问PyGame对象的y值

2024-10-04 01:27:00 发布

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

我有一个列表,它将联系人对象的y坐标存储在列表中,这样我就可以访问联系人在屏幕上相对于y位置的信息。如果这是有用的信息,我会使用PyGame。在

打印list很好并返回正确的值,但是当我试图在主事件循环中访问列表时,在使用for循环遍历列表时,会出现上述错误。在

下面是将y值附加到我的列表的代码:

class MainPage(Page):
    ...

    def printContacts(self):
        addressBook = AddressBook()
        addressBook.contactsList
        addressBook.contactsList.sort(key = lambda c: (c.lastName, c.firstName) if c.lastName else (c.firstName, ""))
        contactFont = pygame.font.SysFont("trebuchet ms", 18)
        global indexedContacts
        indexedContacts = {}
        global yIndex
        yIndex = [] #List to append y values to
        y = 20

        for (key, g) in groupby(addressBook.contactsList, lambda c: c.lastName[0] if c.lastName else c.firstName[0]):
            groupName = contactFont.render(key, True, (171,0,0))
            self.intermediate2.blit(groupName, (5, y))
            pygame.draw.line(self.intermediate2, (0,0,0), (5,(y+20)), (320, (y+20)), 1)
            y += 30

            for i in g:
                name = i.firstName + " " + i.lastName
                textName = contactFont.render(name, True, (0,0,0))
                pygame.draw.line(self.intermediate2, (210,210,210), (5,(y+20)), (320, (y+20)), 1)
                self.intermediate2.blit(textName, (5, y))
                indexedContacts[(y+72)] = i
                yIndex.append((y+72)) #Appends current value to list
                y += 30

以下是返回错误的事件代码:

^{pr2}$

Tags: tokeyself列表for联系人firstnamepygame
2条回答

解决了我自己的问题,yIndex[i]在{}成为{}列表中的每一项时生成错误,就像他的答案中解释的eddieferetro。在

因此,从本质上讲,准则应该是:

for i in yIndex:
    if y >= (i - 10) and y <= (i + 20):
        if i in indexedContacts:
            page = EditPage()
            page.style()
            page.contactFields()
            break

基本上,一个非常常见的错误。在

for i in yIndex:

给你在i中的yIndex值。。。。在

我不是索引,是元素本身。就像在java中:

^{pr2}$

在yout的情况下,yIndex是一个整数数组,因此错误就像索引超出范围异常一样出现

要获取索引,应编写:

for i, val in enumerate(yIndex):

在您的情况下,您希望:

for y in yIndex:
    if yo >= (y - 10) and yo <= (y + 20): #Error here
        yo = y
        if yo in indexedContacts:
            page = EditPage()
            page.style()
            page.contactFields()
            break
    else:
        continue

我将是索引,yIndex是值

相关问题 更多 >