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

如何为Python编写的Hangman猜词游戏添加再玩一次功能

Hangman游戏重玩功能实现方案

核心问题

你现有代码的问题有两点:

  • 仅在选择重玩时重置了word变量,mistakes错误计数、letters_guessed已猜中字母、wrong_letters猜错字母等核心游戏状态没有重置,就算重新选了单词也会继承上一局的状态
  • 没有将完整游戏流程包裹在循环内,即便确认重玩也不会重新走游戏逻辑

修改步骤

  1. 在外层添加全局控制循环,用来控制是否开启新对局
  2. 将所有游戏状态初始化代码移到外层循环内部,每次重玩自动重置所有参数
  3. 在胜负分支后统一处理重玩询问,根据玩家输入调整全局循环的状态即可

完整修改后代码

# 导入词库
import random
from wordbankcool import wordbank

# hangman 图形
hangman_graphics = ['_',
                    '__',
                    '__\n |',
                    '__\n |\n O',
                    '__\n |\n O\n |',
                    '__\n |\n O\n/|',
                    '__\n |\n O\n/|\\ ',
                    '__\n |\n O\n/|\\ \n/',
                    '__\n |\n O\n/|\\ \n/ \\ '
                    ]
mistakes_allowed = len(hangman_graphics)
# 全局游戏控制变量
playing = True

while playing:
    # 每局游戏启动前初始化所有状态
    mistakes = 0
    letters_guessed = []
    word = random.choice(wordbank)
    letters_word = list(word)
    wrong_letters = []

    print()
    print('单词长度为 {} 个字母'.format(len(letters_word)))

    # 本局游戏主循环,运行到错误次数达到上限或猜中单词为止
    while mistakes < mistakes_allowed:
        print()
        print('错误猜测的字母:', end='')
        for letter in wrong_letters:
            print('{}, '.format(letter), end='')
        print()
        print('剩余猜测次数:{}'.format(mistakes_allowed - mistakes))
        letter_user = input('猜一个字母:').lower()

        # 检查字母是否已经猜过
        while letter_user in letters_guessed or letter_user in wrong_letters:
            print()
            print('你已经猜过这个字母了,换一个试试')
            letter_user = input('猜一个字母:').lower()

        # 判断猜测是否正确
        if letter_user not in letters_word:
            mistakes += 1
            wrong_letters.append(letter_user)
        else:
            letters_guessed.append(letter_user)

        print()
        print('当前单词:', end='')
        # 显示单词猜中状态,未猜中用下划线代替
        for letter in letters_word:
            if letter in letters_guessed:
                print(letter + ' ', end='')
            else:
                print('_ ', end='')

        print()
        # 显示hangman进度
        if mistakes:
            print(hangman_graphics[mistakes - 1])
        print()
        print('-------------------------------------------')

        # 获胜分支
        if len(letters_guessed) == len(set(letters_word)):
            print()
            print(f'你赢了!正确单词是 {word}!')
            print()
            break

    # 失败分支
    if mistakes == mistakes_allowed:
        print()
        print('很遗憾,下次好运!')
        print()
        print(f'正确单词是 {word}。')
        print()

    # 重玩询问
    playagain = input('要再玩一次吗?(Y/N) ').upper()
    if playagain != 'Y':
        playing = False

额外优化说明

  • 修复了原代码中单词包含重复字母时无法正确判定获胜的问题,将获胜判断的条件改为对比已猜中字母数和单词去重后的字母总数
  • 修正了重复字母输入时未自动转小写的问题,避免大小写不同判定为不同字母的bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:57:02