В данный момент вы не меняете слово при вызове replay_game, потому что текст после if replay_game
в конце никогда не вызывается.
Для первой проблемы я бы записал общее числошансов для игры в качестве входной переменной в play_game и измените replay_game, чтобы просто вернуть true или false, и переместите другой код в play_game
def replay_game():
replay = input("Do you want to play again? y or n ")
# Changed to just return true or false depending on input.
if replay == "y":
return True
else:
print("Bye!")
return False
Затем измените начало play_game на
def play_game(missed_letters, correct_letters, secret_word, total_chances=7):
count = 0
# chance is now variable
chance = total_chances
game_over = False
и в конце play_game
замените:
if len(missed_letters) == 7:
на
if chance == 0:
и измените вызов на if game_over
на
if game_over:
if replay_game():
missed_letters = ""
correct_letters = ""
secret_word = get_random(word_list)
play_game(missed_letters, correct_letters, secret_word, total_chances - 1)
else:
break
Это будет означать, что ваш код, который сбрасывал буквы, будет вызываться сейчас, и каждая перезапущенная игра запускается с одним шансом меньше, чем предыдущая.
Вам нужно будет добавить немного обработки для случая, когда они выигрывают без пропусков.
Для второй проблемы, просто добавьте следующее к табло:
print("Available letters:")
print(','.join(sorted(set(available_letters) - set(missed_letters) - set(correct_letters))))
Это составляет набор из каждой из трех групп букв, а затем забирает те, которые уже были угаданы, доотображая их в одну строку, отсортированные по алфавиту и разделенные запятыми.