当我的代码尝试用我的刽子手游戏中的字母替换丢失的字母时,为什么会出现“字符串索引超出范围”

伊万

这款hangman游戏还没有完全完成,因为我仍在努力中,但是我遇到了这个错误,如果我猜对了,这个错误就会经常发生。当我运行它并猜测一些猜测时,它有时不会在字母或错误后打印正确数量的左间隙:

 Traceback (most recent call last):
  File "C:\Users\Gaming\Desktop\Hangman.py", line 110, in <module>
    display(Hangman,randomWord,wrongLetters,correctLetters)
  File "C:\Users\Gaming\Desktop\Hangman.py", line 73, in display
    blanks = secretWord[i] + blanks[:i]  + blanks[i+1] #blanks[i+1] adding '-' from the old 'blanks'
IndexError: string index out of range

会出现,有时两个错误会一个接一个地发生。

有人可以告诉我如何解决此错误以及为什么会发生吗?

import random

Hangman = ['''

   +---+
   |   |
       |
       |
       |
       |
 =========''', '''

   +---+
   |   |
   O   |
       |
       |
       |
 =========''', '''

   +---+
   |   |
   O   |
   |   |
       |
       |
 =========''', '''

   +---+
   |   |
   O   |
  /|   |
       |
       |
 =========''', '''

   +---+
   |   |
   O   |
  /|\  |
       |
       |
 =========''', '''

   +---+
   |   |
   O   |
  /|\  |
  /    |
       |
 =========''', '''

   +---+
   |   |
   O   |
  /|\  |
  / \  |
       |
 =========''']

words = 'ant baboon badger bat bear beaver camel cat clam cobra cougar coyote crow deer dog donkey duck eagle ferret fox frog goat goose hawk lion lizard llama mole monkey moose mouse mule newt otter owl panda parrot pigeon python rabbit ram rat raven rhino salmon seal shark sheep skunk sloth snake spider stork swan tiger toad trout turkey turtle weasel whale wolf wombat zebra'.split()

def GetRandomWord(word):
    chosenWord = random.choice(word)
    return chosenWord


def display(hangmanPic,secretWord,numWrongLetters,correctLetters):
    blanks = '-'*len(secretWord)

    for i in range(len(secretWord)):#repleaces blank letters with correct letters
        if secretWord[i] in correctLetters:
            blanks = secretWord[i] + blanks[:i]  + blanks[i+1] #blanks[i+1] adding '-' from the old 'blanks'

    print("Missing Letters:")        
    for letter in blanks:
        print(letter,end='')
    print(hangmanPic[numWrongLetters])



def getGuess(alreadyGuessed):
    while True:
        print("Guess Letter:")
        guess = input()
        guess = guess.lower()
        if len(guess) != 1:
            print("Please enter only 1 letter.")
        elif guess in alreadyGuessed:
            print("Letter is already guessed.")
        elif guess.isdigit():
            print("Please enter a letter not integer.")
        else:
            return guess

def playAgain():
    print("Do you want to play again?") 
    pass



print("H A N G M A N")
correctLetters = ''
guessedLetters = ''
wrongLetters = 0
randomWord = GetRandomWord(words)
gameDone = False

while True:
    display(Hangman,randomWord,wrongLetters,correctLetters)
    guess = getGuess(correctLetters + guessedLetters)

    if guess in randomWord:
        correctLetters += guess
        foundAllLetters = True
        for i in range(len(randomWord)):
            if randomWord[i] not in correctLetters:
                foundAllLetters = False
                break
        if randomWord[i] in correctLetters:
            foundAllLetters = True
            print("Well Done You found what the missing word is!")
            gameDone = True

    else:
        wrongLetters +=1
        guessedLetters += guess
紧的
for i in range(len(secretWord)):
    if secretWord[i] in correctLetters:
        blanks = secretWord[i] + blanks[:i]  + blanks[i+1]
    #                                                  | will be out of range for the last 'i'

您应该怎么做,只需更改 处的字母blanks[i]然而,字符串在 Python 中不可变的,但从我看到的情况来看,使用列表应该完全没问题。将声明更改blanks

blanks = ['-']*len(secretWord)

现在你应该可以使用

blanks[i] = secretWord[i]

另一个技巧是使用enumerate而不是range更简洁的代码:

blanks = ['-']*len(secretWord)
for i, letter in enumerate(secretWord):
    if letter in correctLetters:
        blanks[i] = letter

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章