Python 返回列表的第二个、第三个等变量的索引

Python 返回列表的第二个、第三个等变量的索引,python,indexing,pygame,python-3.7,Python,Indexing,Pygame,Python 3.7,我正在做一个简单的刽子手游戏来练习我的Python技能。 我正在尝试获取单词中第二个或更多字符的索引 例如,单词是“eggsalad”,我需要得到g和a的索引 短代码段: while x < len(letterlist): if letterlist[x-1] == "g": pos_ = (AdjustMeUWU + (27 * LTGL.index(letterlist[x-1])), 226) e

我正在做一个简单的刽子手游戏来练习我的Python技能。 我正在尝试获取单词中第二个或更多字符的索引

例如,单词是“eggsalad”,我需要得到g和a的索引

短代码段:

     while x < len(letterlist):
        if letterlist[x-1] == "g":
            pos_ = (AdjustMeUWU + (27 * LTGL.index(letterlist[x-1])), 226)
        else:
            pos_ = (AdjustMeUWU + (27 * LTGL.index(letterlist[x-1])), 230)
        lettersguessed.append(letterlist[x-1])
        print(x)
        if LTGL == lettersguessed:
            print("you won")
            running = False
        x += 1
而x
完整代码:

    from random_word import RandomWords
r = RandomWords()
import pygame
import sys


def main():
    pygame.init()
    clock = pygame.time.Clock()
    size = [256, 356]
    white = [255, 255, 255]
    black = [0, 0, 0]

    #ListToGuess = list("{0}".format(r.get_random_word(hasDictionaryDef="true", minLength=4, maxLength=8)))
    ListToGuess = list("abcdefgg")
    LTGL = ListToGuess
    print(ListToGuess)

    pygame.display.set_caption('Hang man')
    screen = pygame.display.set_mode(size)
    font = pygame.font.Font('freesansbold.ttf', 28)

    def DisplayLetter(LTGL, letterlist, lettersguessed):
        if len(LTGL) == 4:
            AdjustMeUWU = 78
        if len(LTGL) == 5:
            AdjustMeUWU = 63
        if len(LTGL) == 6:
            AdjustMeUWU = 53
        if len(LTGL) == 7:
            AdjustMeUWU = 37
        if len(LTGL) == 8:
            AdjustMeUWU = 25
        x = 0
        print(letterlist)
        while x < len(letterlist):
            letter = font.render(letterlist[x-1], True, black, white)
            if letterlist[x-1] == "g":
                pos_ = (AdjustMeUWU + (27 * LTGL.index(letterlist[x-1])), 226)
            else:
                pos_ = (AdjustMeUWU + (27 * LTGL.index(letterlist[x-1])), 230)
            screen.blit(letter, pos_)
            screen.blit(BottomDashes, (0, 256))
            lettersguessed.append(letterlist[x-1])
            print(x)
            if LTGL == lettersguessed:
                print("you won")
                running = False
            x += 1

    YouLost = pygame.image.load(r'C:\Users\Wit\Desktop\Programming shit\img\Hangman\Youlost.png')
    WhitePng = pygame.image.load(r'C:\Users\Wit\Desktop\Programming shit\img\Hangman\white100px.png')
    BottomDashes = pygame.image.load(r'C:\Users\Wit\Desktop\Programming shit\img\Hangman\Dashes{0}.png'.format(len(ListToGuess)))

    def HangmanDrawImg(Mistakes):
        HangmanImg = pygame.image.load(r'C:\Users\Wit\Desktop\Programming shit\img\Hangman\Hangman{0}.png'.format(Mistakes))
        screen.blit(HangmanImg, (30, -50))

    screen.fill(white)
    button = pygame.Rect(103, 296, 50, 50)  # creates a rect object
    pygame.draw.rect(screen, [255, 0, 0], button)  # draw button
    screen.blit(BottomDashes, (0, 256))
    pygame.display.flip()

    lettersguessed = []
    running = True
    Mistakes = 0

    while running is True:
        try:
            letter = ""
            if Mistakes == 9:
                screen.blit(WhitePng, (0, 259))
                screen.blit(YouLost, (20, 286))
                pygame.display.flip()
                break
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    running = False
                    return running
                if event.type == pygame.MOUSEBUTTONDOWN:
                    mouse_pos = event.pos
                    if button.collidepoint(mouse_pos):
                        Mistakes += 1
                if event.type == pygame.KEYDOWN:
                    current_text = letter
                    letter += event.unicode
            if current_text == letter:
                pass
            elif letter not in ListToGuess:
                Mistakes += 1
            elif letter in ListToGuess:
                RunMe = True
                letterlist = []
                while RunMe:
                    lettercount = ListToGuess.count(letter)
                    if lettercount > 0:
                        letterlist.append(letter)
                        letterfind = ListToGuess.index(letter)
                        ListToGuess.pop(letterfind)
                    if lettercount == 0:
                        RunMe = False
                        LTGL.insert(letterfind, letter)
                        DisplayLetter(LTGL, letterlist, lettersguessed)
            HangmanDrawImg(Mistakes)
            pygame.display.flip()
            clock.tick(50)
        except UnboundLocalError:
            pass
    pygame.quit()
    sys.exit


if __name__ == '__main__':
    main()
从随机词导入随机词
r=随机词()
导入pygame
导入系统
def main():
pygame.init()
clock=pygame.time.clock()
大小=[256356]
白色=[255,255,255]
黑色=[0,0,0]
#ListToGuess=list(“{0}”。格式(r.get_random_word(hasdirectionarydef=“true”,minLength=4,maxLength=8)))
ListToGuess=list(“abcdefgg”)
LTGL=ListToGuess
打印(ListToGuess)
pygame.display.set_标题('hangman')
screen=pygame.display.set_模式(大小)
font=pygame.font.font('freesansbold.ttf',28)
def显示字母(LTGL、字母列表、字母标记):
如果len(LTGL)=4:
调整MEUWU=78
如果len(LTGL)=5:
调整MEUWU=63
如果len(LTGL)=6:
调整MEUWU=53
如果len(LTGL)=7:
调整MEUWU=37
如果len(LTGL)=8:
调整MEUWU=25
x=0
打印(信单)
当x0:
信函列表。附加(信函)
letterfind=ListToGuess.index(字母)
ListToGuess.pop(letterfind)
如果lettercount==0:
RunMe=False
LTGL.插入(字母查找,字母)
显示字母(LTGL、字母列表、字母组合)
HangmanDrawImg(错误)
pygame.display.flip()
时钟滴答(50)
除UnboundLocalError外:
通过
pygame.quit()
系统出口
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
PS:记住这还没有结束,所以有很多bug


PS2:如果您看到任何不正确的代码,请随时指出它

首先您会看到出现多次的字母:

duplicates = [item for item, count in collections.Counter('eggsalad').items() if count > 1]
然后循环复制,并获得所有副本的索引:

for duplicate in duplicates:
    print(f'{duplicate}: {[i for i, e in enumerate('eggsalad') if e == duplicate]}')
整体而言:

>>> import collections
>>> 
>>> 
>>> word = 'eggsalad'
>>> duplicates = [item for item, count in collections.Counter(word).items() if count > 1]
>>> for duplicate in duplicates:
...     print(f'{duplicate}: {[i for i, e in enumerate(word) if e == duplicate]}')
... 
g: [1, 2]
a: [4, 6]

使用for循环和enumerate内置函数构建元组列表。也许这对初学者有帮助:

res = []
word = "eggsalad"
for i, l in enumerate(word):
    res.append((l, i))
print(res)

您的意思是想获得单词中多次出现的字符的索引吗?