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

Python开发hangman游戏时如何让控制台记住用户输入的猜测字母

Python Hangman猜词游戏动态进度展示实现方案

核心思路是用集合记录已猜对的字母,每次用户输入后动态拼接当前的猜词进度,不用针对每个单词硬编码展示规则,适配所有词库内的单词。

修改后的完整可运行代码如下:

import random
import string
import time

# 预设词库,后续新增单词直接加在这里即可
hangman_words = ['tree', 'sun']
max_tries = 5

while True:
    # 每次开局初始化参数
    target_word = random.choice(hangman_words)
    guessed_correct = set()  # 记录猜对的字母
    guessed_wrong = set()    # 记录猜错的字母
    remaining_tries = max_tries
    game_over = False

    print("===== 新游戏开始 =====")
    # 初始展示全下划线
    initial_progress = ' '.join(['_' for _ in target_word])
    print(f"当前进度:{initial_progress}")

    while not game_over:
        user_input = input("\n请输入你要猜的字母/单词:").strip().lower()

        # 输入合法性校验
        if len(user_input) == 0:
            print("输入不能为空,请重新输入")
            continue
        # 判断用户是猜整个单词还是单个字母
        if len(user_input) > 1:
            # 猜整个单词
            if user_input == target_word:
                print(f"恭喜你猜对了!正确单词就是 {target_word}")
                game_over = True
            else:
                remaining_tries -= 1
                print(f"猜错了,你还有 {remaining_tries} 次机会")
        else:
            # 猜单个字母
            guess_letter = user_input
            if guess_letter in guessed_correct or guess_letter in guessed_wrong:
                print("你已经猜过这个字母了,请换一个")
                continue
            if not guess_letter.isalpha():
                print("请输入有效的英文字母")
                continue
            
            if guess_letter in target_word:
                print("猜对了!这个字母在单词里")
                guessed_correct.add(guess_letter)
            else:
                print("猜错了,这个字母不在单词里")
                guessed_wrong.add(guess_letter)
                remaining_tries -= 1
            
            # 生成当前进度
            current_progress = []
            for char in target_word:
                if char in guessed_correct:
                    current_progress.append(char)
                else:
                    current_progress.append('_')
            current_progress_str = ' '.join(current_progress)
            print(f"当前进度:{current_progress_str}")

            # 判断是否全部猜对
            if '_' not in current_progress_str:
                print(f"恭喜你猜全了所有字母!正确单词是 {target_word}")
                game_over = True
        
        # 判断是否用完次数
        if remaining_tries <= 0:
            print(f"很遗憾你用完了所有机会,正确单词是 {target_word}")
            game_over = True
    
    # 询问是否再玩一局
    play_again = input("按回车键再玩一局,输入其他内容退出游戏:").strip()
    if play_again != '':
        print("游戏结束,再见")
        time.sleep(1)
        break

本次修改的核心优化点:

  • 通用进度生成逻辑:不用针对每个单词单独写展示规则,词库新增单词无需修改业务逻辑
  • 自动去重判断:用户重复猜同一个字母不会消耗次数
  • 同时支持猜单个字母和直接猜整个单词两种玩法
  • 修正了原代码中多个逻辑错误:比如字符串和列表比较、赋值符号写成等于号、重复判断等问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:06:05