Python实现Hangman游戏时try again重试选项失效问题求解
错误原因
- 核心问题:
end_of_game变量在全局位置仅初始化一次,第一局游戏失败后该变量被设为True,外层重试循环开启新一局时没有重置该值,导致内层的游戏主循环while not end_of_game直接跳过执行,程序进入无输出的空转状态。 - 逻辑遗漏:重试询问的代码放在内层游戏循环的生命值判断分支内,仅在失败场景触发,没有覆盖玩家获胜后的重试场景。
- 冗余执行:判定游戏失败后仍会执行单词拼接打印、绞刑架绘制的多余逻辑。
修复方法
- 每启动新一局游戏时,在内层游戏循环启动前将
end_of_game重置为False,保证游戏主循环可以正常运行。 - 将重试询问逻辑移到内层游戏循环结束后,无论玩家是获胜还是失败,都统一触发重开询问,避免逻辑遗漏。
- 调整代码执行顺序,游戏状态判定为结束后不再执行多余的输出逻辑。
修复后完整代码
import random stages = [''' +---+ | | O | /|\ | / \ | | ========= ''', ''' +---+ | | O | /|\ | / | | ========= ''', ''' +---+ | | O | /|\ | | | ========= ''', ''' +---+ | | O | /| | | | =========''', ''' +---+ | | O | | | | | ========= ''', ''' +---+ | | O | | | | ========= ''', ''' +---+ | | | | | | ========= '''] try_again = True word_list = ["ardvark", "baboon", "camel"] while try_again: chosen_word = random.choice(word_list) word_length = len(chosen_word) display = [] for _ in range(word_length): display += "_" lives = 6 # 每局开始重置游戏结束标记 end_of_game = False while not end_of_game: guess = input("Guess a letter: ").lower() for position in range(word_length): letter = chosen_word[position] if letter == guess: display[position] = letter if guess not in chosen_word: lives -= 1 if lives == 0: end_of_game = True print("You lose.") print(f"{' '.join(display)}") if "_" not in display: end_of_game = True print("You win.") print(stages[lives]) # 游戏结束后统一询问是否重开 user_choice = input("Do you want to try again? (y/n):\n").lower() try_again = (user_choice == "y")
内容的提问来源于stack exchange,提问作者noobcoder21
相关产品推荐
相关产品推荐

