Одна очевидная ошибка - это строка:
guess == lettersUsedSoFar
, которая ничего не делает. (К счастью.)
Вам нужен тест, чтобы определить, выиграл ли пользователь. Поскольку guss_word
начинается со всех символов подчеркивания, проверка может состоять в том, осталось ли в нем какое-либо подчеркивание:
if '_' not in guss_word:
# Winner! (Now get out of program.)
else:
# Good answer but keep playing
Ниже приведена доработка вашей программы с этим исправлением, изменениями стиля и оптимизацией кода:
from random import choice
WORD_LIST = ["cat", "dog", "fly", "hi", "bye", "five", "four"]
ALLOWED_GUESSES = 5
def drawHangman(count):
pass
def startGame():
name = input("What is your name? ")
print("Hello, " + name,", it's time to play HangMan!")
guessesSoFar = 0
letters_used = ''
word = choice(WORD_LIST)
incomplete_word = ['_' for x in word]
print(*incomplete_word)
while guessesSoFar < ALLOWED_GUESSES:
letter = input("Guess a letter: ")
if letter in word:
incomplete_word[word.index(letter)] = letter
print(*incomplete_word)
if '_' not in incomplete_word:
print("You win!")
break
else:
print("Yes!", letter + " is in the word.")
else:
if letter not in letters_used:
letters_used += letter
guessesSoFar += 1
drawHangman(guessesSoFar)
print(*incomplete_word)
print("Oops!", letter + " is not in the word")
print("Your guesses so far:", ','.join(letters_used))
startGame()
Ни эта переделка, ни ваш оригинал не дают четкого определения того, как они обрабатывают повторяющиеся буквы, например «e» в «здесь».