Это очень хорошая попытка, но есть и неправильные вещи.Я попытаюсь пройтись по ним один за другим.
Вместо цикла for
я бы предложил использовать while guessesleft>0
.В текущей реализации цикл for будет выполняться 8 раз, независимо от того, остались ли какие-либо предположения (например, попробуйте каждый раз указывать одну и ту же букву в качестве предположения).Однако с while
вы получаете гораздо больший контроль над циклом.
Поколение trackedguess
имеет недостатки.Он всегда будет пропускать последнюю букву secretword
(это также причина, по которой вы получили IndexError
). Попробуйте вместо нее for i in range(len(secretWord))
.Вы также найдете его гораздо более кратким и читабельным.
Я также позволил себе перенести условие победы или проигрыша в петлю.Ранее, если вы выиграли по последнему предположению, вы все равно бы проиграли (потому что условие проверки выигрыша произошло до ввода, а после этого цикл закончился);Кроме того, предположение не было напечатано, если вы выиграли (потому что цикл прерывался перед оператором печати).
Пересмотренный код ниже:
def hangman(secretWord):
'''
secretWord: string, the secret word to guess.
Starts up an interactive game of Hangman.
* At the start of the game, let the user know how many
letters the secretWord contains.
* Ask the user to supply one guess (i.e. letter) per round.
* The user should receive feedback immediately after each guess
about whether their guess appears in the computers word.
* After each round, you should also display to the user the
partially guessed word so far, as well as letters that the
user has not yet guessed.
Follows the other limitations detailed in the problem write-up.
'''
trackedguess = []
letterlist = []
for i in range(len(secretWord)):
trackedguess.append('_')
guessesleft = 8
while guessesleft > 0:
print(trackedguess)
print("You have ", guessesleft, " guesses remaining.")
guess = input('Please guess a letter and press return: ')
if guess in letterlist:
print("You've already guessed that. Try again.")
else:
guessesleft -= 1
letterlist.append(guess)
for i in range(0, len(secretWord)):
if secretWord[i] in letterlist:
coordinate = i
trackedguess[coordinate] = secretWord[i]
if ''.join(trackedguess) == secretWord:
print(trackedguess)
print('You win!')
break
if guessesleft < 1:
print('You have 0 guesses remaining.')
break
hangman('test')
Надеюсь, это поможет.