为什么当我的代码试图在我的刽子手游戏中用字母替换缺失的字母时,我会'string index out of range'



这个吊手游戏并不完全完成,因为我仍在研究它,但是我遇到了这个错误,如果我猜到所有猜测都很正确,这经常会发生。当我运行它并猜测许多猜测时,它有时不会在字母后打印出正确数量的左侧间隙或错误:

 Traceback (most recent call last):
  File "C:UsersGamingDesktopHangman.py", line 110, in <module>
    display(Hangman,randomWord,wrongLetters,correctLetters)
  File "C:UsersGamingDesktopHangman.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

最新更新