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

为何while循环在条件为false时仍运行?(刽子手游戏开发)

刽子手游戏While循环未正确终止问题修复

我学习Python已有一周,正在开发刽子手(hangman)游戏以练习编程。我设置了一个while循环,预期仅在玩家剩余生命值大于0且仍有未猜字母时运行,但测试时故意耗尽生命值后,循环仍会继续运行,并输出仅应在生命值>1时显示的语句。

问题代码

def play():
    lives = 6
    random_word = str(random.choice(words))            
    letters_in_random_word = 0                           
    for letter in random_word:
        letters_in_random_word += 1                    
    already_guessed_list = []                             
    for letter in random_word:
        print("_", end='')                               
    while lives > 0 and letters_in_random_word > 0:       
        # more letters to be guessed
        get_guess = input("\nGuess a letter here: ")     
        if get_guess in already_guessed_list:            
            print("\nYou already guessed this letter. Please guess a different letter.")
        else:
            already_guessed_list.append(get_guess)      
            for letter in get_guess:
                if letter in random_word:
                    letters_in_random_word -= 1 * random_word.count(letter)    
                    print("\nThat letter is in this word. You have", lives, "lives left.")
                if get_guess not in random_word:
                    lives -=1                               
                    print("\nThat letter is not in this word. You have", lives,
                          "lives left. Use them wisely")
            for letter in random_word:
                if letter in already_guessed_list:      
                    print(letter, end = '')
                else:
                    print("_", end = '')
            if lives == 0:
                print("\nOut of lives. The word was", random_word)
            elif letters_in_random_word == 0:
                print("\nYou guessed the word correctly.")

play()

更新说明

我修改了代码,现在已得到预期结果。

修复后代码

import random
from words import words


def play():
    lives = 6
    random_word = str(random.choice(words))
    letters_in_random_word = 0
    for letter in random_word:
        letters_in_random_word += 1
    already_guessed_list = []
    for letter in random_word:
        print("_", end='')
    while lives > 0 and letters_in_random_word > 0:
        print("\nYou have", lives, "lives left. Use them wisely")
        # more letters to be guessed
        get_guess = input("\nGuess a letter here: ")
        if get_guess in already_guessed_list:
            print("\nYou already guessed this letter. Please guess a different letter.")
        else:
            already_guessed_list.append(get_guess)
            for letter in get_guess:
                if letter in random_word and lives > 0:
                    letters_in_random_word -= 1 * random_word.count(letter)
                    print("\nThat letter is in this word.")
                if get_guess not in random_word and lives > 0:
                    lives -=1
                    print("\nThat letter is not in this word.")
            for letter in random_word:
                if letter in already_guessed_list:
                    print(letter, end = '')
                else:
                    print("_", end = '')
            if lives == 0:
                break
            if letters_in_random_word == 0:
                print("\nYou guessed the word correctly.")
    print("\nOut of lives. The word was", random_word)
    
play()

内容的提问来源于stack exchange,提问作者rooknoobski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:15:31