Когда вы звоните word_guessed
, вы не сбрасываете num_correct_letters
обратно на 0
до подсчета количества правильных букв. Поэтому, когда вы угадываете одну правильную букву, этот счетчик продолжает увеличиваться, даже если вы не угадываете другие буквы правильно. Если оно достигает len(set(secret_word))
, цикл заканчивается.
Нет необходимости проверять num_correct_letters
в вашем while
состоянии, поскольку word_guessed()
уже проверяет его.
Вам не нужен цикл в word_guessed
, и вам не нужна переменная num_correct_letters
, вы можете просто написать:
def word_guessed():
global secret_word
global letters_guessed
return set(secret_word).issubset(letters_guessed)
Вы также не проверяете, правильно ли guess
уже в letters_guessed
. Используйте guess not in letters_guessed
.
Вы должны инициализировать все переменные один раз в начале функции, а не повторять это в обоих операторах if
в конце. И нет необходимости, чтобы они были глобальными переменными, просто передавайте их как параметры функции.
from random import randrange
def load_words():
word_list = ["mom","apple","tomato","krish","name","pediatrician"]
return word_list
words_dict = load_words()
def get_word():
word=words_dict[randrange(0,len(words_dict))]
return word
def play_hangman():
secret_word = get_word()
letters_guessed = set()
local_guesses= 0
max_guesses = 6
print("Hello there! You are about to play a game of hangman!. Enjoy...")
while not word_guessed(secret_word, letters_guessed) and local_guesses < max_guesses:
guess = input("Enter a letter: ")
if guess not in letters_guessed:
letters_guessed.add(guess)
local_guesses += 1
letters_guessed.add(guess)
else:
print("You already guessed that letter!")
print_guessed(letters_guessed)
if word_guessed(secret_word, letters_guessed):
print("You have won! The secret word was: " + secret_word)
elif local_guesses >= max_guesses:
print("You went over your maximum number of allotted guesses. The secret word was: " + secret_word)
def print_guessed(letters_guessed):
print("Your guesses are " + str(letters_guessed))
def word_guessed(secret_word, letters_guessed):
return set(secret_word).issubset(letters_guessed)
play_hangman()