You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:07:42