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

Hangman猜词游戏:如何实现单次猜测激活全部重复字母?

修复Hangman游戏重复字母匹配问题

我明白你的问题了——现在你的代码里猜重复字母比如snazzy里的z,只能点亮一个位置,得猜好几次才能全出来,这显然不符合Hangman的规则。咱们来一步步修复这个问题,同时优化下代码的可读性。

首先先说说原代码的核心问题:

  • 你用了elif来逐个判断字母位置,这意味着找到第一个匹配的位置后就会停止,不会继续检查后面的重复字母。
  • good变量每次只加1,不管猜中了几个字母,这会导致胜利条件(good<6)判断出错,比如单词有3个重复字母,猜一次应该加3,而不是1。

下面是修复后的完整代码:

# 优化单词输入:直接输入一个6字母单词,自动拆分成列表
word = list(input('Input your 6-letter lowercase word: ').strip())
# 初始化显示列表,用下划线代替空字符串,更直观
show = ['_' for _ in range(len(word))]
fail = 0
good = 0
total_letters = len(word)

while fail <= 6 and good < total_letters:
    guess = input('Guess a letter... ').strip().lower()
    # 检查是否已经猜过这个字母,避免重复猜测无效
    if guess in show:
        print('You already guessed this letter! Try another one.')
        continue
    if guess in word:
        print('Right!')
        # 遍历单词的所有位置,找到所有匹配的字母并更新show
        match_count = 0
        for idx, letter in enumerate(word):
            if letter == guess:
                show[idx] = guess
                match_count += 1
        good += match_count
    else:
        print('No.')
        fail += 1
    # 打印当前进度,用空格分隔更美观
    print('Current word:', ' '.join(show))
    print(f'Failed attempts: {fail}/7')

if fail == 7:
    print('Executioner wins! The word was:', ''.join(word))
else:
    print('Prisoner wins!')

关键改动说明:

  • 单词输入优化:直接让用户输入一个完整单词,用list()拆分成字母列表,不用6次重复输入,更高效。
  • 重复字母处理:用for循环+enumerate遍历单词的每个位置,只要字母匹配就更新show列表对应的位置,这样一次猜测就能点亮所有重复字母。
  • 正确计数猜中数量:每次猜中后统计匹配的字母个数,加到good里,确保胜利条件判断准确。
  • 新增重复猜测检测:如果用户重复猜已经猜过的字母,提示并跳过,避免无效尝试。
  • 显示优化:用下划线_初始化显示列表,打印时用空格分隔,更符合Hangman的视觉效果。

这样修改后,不管单词里有多少个重复字母,只要猜一次就能把所有匹配的位置都点亮啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:27:34