Hangman游戏代码异常:未耗尽生命值却触发重玩询问
问题原因及解决方案
确实是代码结构位置错误导致的问题。
问题根源
你把询问重玩的代码块放在了单次猜测的处理逻辑之后,这意味着不管当前猜测是对是错、游戏是否已经分出胜负(赢或生命值耗尽),每完成一次输入就会直接触发重玩询问,打断了正常的游戏流程。
正确的逻辑应该是:只有当游戏结束(玩家猜对单词获胜,或者生命值耗尽失败)之后,才弹出重玩询问。
修正方案
将play_again相关的代码移到游戏主循环的外部,也就是等当前局游戏完全结束(通过break退出游戏内循环)之后,再执行重玩判断。
修正后的代码结构示例:
while True: # 游戏初始化逻辑(选择单词、设置生命值等) word = "test" # 示例单词,实际应为随机选择的单词 lives = 6 incorrect_guesses = set() guessed_letters = set() # 游戏主循环:持续接受猜测直到胜负分晓 while True: # 显示当前游戏状态(已猜字母、剩余生命值等) display_word = ' '.join([c if c in guessed_letters else '_' for c in word]) print(f"\nGuessed word: {display_word} ") print(f"Lives remaining: {lives}") # 获取用户猜测 guess = input("Please guess a letter or the whole word: ").strip().upper() # 处理正确猜测 if guess == word: print("You win!") break elif guess in word: guessed_letters.add(guess) print("Correct!") # 检查是否已猜中所有字母 if all(c in guessed_letters for c in word): print("You win!") break # 处理错误猜测 else: incorrect_guesses.add(guess) lives -= 1 print("Incorrect!") if lives == 0: print(f"Sorry, you ran out of lives. The word was: {word}") break # 游戏结束后才询问是否重玩 play_again = input("Would you like to play again [Y/N]? ").strip().lower() if play_again != 'y': print("Goodbye!") break
关键调整点
- 把游戏的核心流程(猜测、胜负判断)放在一个内层
while循环中,直到玩家赢或输才退出这个内层循环 - 将重玩询问的代码移到内层循环之外,确保只有当前局结束后才会触发
内容的提问来源于stack exchange,提问作者dubble
相关产品推荐
相关产品推荐

