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

Python Hangman游戏可用字母未移除问题求助

刽子手游戏可用字母未更新问题修复

问题根源

你代码的核心问题在于:当玩家猜错字母时,仅增加了错误猜测次数,但未将猜错的字母加入guessed_letters集合。而可用字母列表是基于guessed_letters集合生成的,因此猜错的字母不会被从可用列表中移除。

修复方案

在猜错字母的分支里,添加一行代码将猜测的字母也加入guessed_letters集合,确保所有已猜字母(无论对错)都会被标记为已使用。

修改后的完整代码

import random

def load_words():
    with open("words.txt", "r") as file:
        words = file.readlines()
    return words

def choose_word(word_list):
    return random.choice(word_list).strip()

def display_word(word, guessed_letters):
    return ' '.join([letter if letter in guessed_letters else '_ ' for letter in word])

def hangman(secret_word):
    guessed_letters = set()
    incorrect_guesses = 0
    max_incorrect_guesses = 8

    print("Welcome to the game Hangman!")
    print("I am thinking of a word that is {} letters long.".format(len(secret_word)))

    while incorrect_guesses < max_incorrect_guesses:
        print("-------------")
        print("You have {} guesses left.".format(max_incorrect_guesses - incorrect_guesses))

        available_letters = ''.join([letter if letter not in guessed_letters else '' for letter in 'abcdefghijklmnopqrstuvwxyz'])
        print("Available letters: {}".format(available_letters))

        guess = input("Please guess a letter: ").lower()

        if guess in guessed_letters:
            print("Oops! You've already guessed that letter: {}".format(display_word(secret_word, guessed_letters)))
        elif guess in secret_word:
            guessed_letters.add(guess)
            print("Good guess: {}".format(display_word(secret_word, guessed_letters)))
        else:
            incorrect_guesses += 1
            # 新增:将猜错的字母加入已猜集合
            guessed_letters.add(guess)
            print("Oops! That letter is not in my word: {}".format(display_word(secret_word, guessed_letters)))

        if all(letter in guessed_letters for letter in secret_word):
            print("-------------")
            print("Congratulations, you won!")
            break

    if incorrect_guesses == max_incorrect_guesses:
        print("-------------")
        print("Sorry, you ran out of guesses. The word was {}.".format(secret_word))

if __name__ == "__main__":
    word_list = load_words()
    secret_word = choose_word(word_list)
    hangman(secret_word)

修改后,无论玩家猜对还是猜错字母,该字母都会被从可用列表中移除,符合游戏逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:43:14