TypesError:不支持+:“int”和“tuple”的操作数类型

2024-09-28 23:39:41 发布

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

我试图做一个刽子手,但我得到以下错误:

enter image description here

我正试图让它返回pos_的x坐标

包含错误的代码段:

        def DrawLetter(IndexNumber):
        if letterlist[x-1] == "g":
            pos_ = (AdjustMe + (27 * int(IndexNumber), 226))
        else:
            pos_ = (AdjustMe + (27 * int(IndexNumber), 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

    while x < len(letterlist):
        duplicates = [item for item, count in collections.Counter(word).items() if count > 1]
        if letterlist.count(letterlist[x-1]) > 1:
            for y in duplicates:
                DuplicatesList = [i for i, e in enumerate(word) if e == y]
            IndexNumber = list(DuplicatesList)
            print(IndexNumber)
            DrawLetter(IndexNumber)
        else:
            IndexNumber = LTGL.index(letterlist[x - 1])
            DrawLetter(IndexNumber)
        x += 1

完整代码:

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

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

    word = "{0}".format(r.get_random_word(hasDictionaryDef="true", minLength=4, maxLength=8))
    ListToGuess = list(word)
    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:
            AdjustMe = 78
        if len(LTGL) == 5:
            AdjustMe = 63
        if len(LTGL) == 6:
            AdjustMe = 53
        if len(LTGL) == 7:
            AdjustMe = 37
        if len(LTGL) == 8:
            AdjustMe = 25
        x = 0
        letter = font.render(letterlist[x-1], True, black, white)

        def DrawLetter(IndexNumber):
            if letterlist[x-1] == "g":
                pos_ = (AdjustMe + (27 * int(IndexNumber), 226))
            else:
                pos_ = (AdjustMe + (27 * int(IndexNumber), 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

        while x < len(letterlist):
            duplicates = [item for item, count in collections.Counter(word).items() if count > 1]
            if letterlist.count(letterlist[x-1]) > 1:
                for y in duplicates:
                    DuplicatesList = [i for i, e in enumerate(word) if e == y]
                IndexNumber = list(DuplicatesList)
                print(IndexNumber)
                DrawLetter(IndexNumber)
            else:
                IndexNumber = LTGL.index(letterlist[x - 1])
                DrawLetter(IndexNumber)
            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()

如果有人能指出一些不符合PEP8的代码,则可获得额外积分。 另外,请注意,这还远远没有完成,所以如果有一些代码作为注释,我将在以后删除它们


Tags: inposlenifscreenpygamewordletter
1条回答
网友
1楼 · 发布于 2024-09-28 23:39:41

这是:

pos_ = (AdjustMe + (27 * int(IndexNumber), 226))

同:

pos_ = (int + (int * int, int)) ->
       (int + tuple)

python应该如何将该整数添加到该元组中

以下是正确的方法:

if letterlist[x-1] == "g":
    pos_ = (27 * int(IndexNumber) + AdjustMe, 226 + AdjustMe)
else:
    pos_ = (27 * int(IndexNumber) + AdjustMe, 230 + AdjustMe)

相关问题 更多 >