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

如何让Python 3的Hangman游戏支持大小写字母等效输入?

嘿,这个问题其实很好解决!核心思路就是让字母匹配的时候忽略大小写,但同时保留原单词的大小写显示。我来给你一步步修改代码:

关键修改思路

  1. 统一用户输入格式:不管用户输入大写还是小写,都转成小写处理,避免重复判断同一个字母的不同大小写形式。
  2. 对比时忽略原单词大小写:判断输入是否在秘密单词里时,把秘密单词也转成小写来做对比。
  3. 保留原单词的大小写显示:更新下划线进度时,要使用原单词里的原始字母(不管大小写),而不是用户输入的小写,保证游戏界面的准确性。

修改后的完整代码

import random
import urllib.request
wp = "http://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain"
response = urllib.request.urlopen(wp)
long_txt = response.read().decode()
words = long_txt.splitlines()

###########
# Methods #
###########
def Run():
    dashes1 = "-" * len(word)
    dashes2 = "-" * len(word2)
    used_letter = []
    dashes = dashes1 + " " + dashes2
    guessesLeft = 6
    while guessesLeft > -1 and not dashes == secretWord:
        print(f"Used letters: {used_letter}")
        print(f"Current progress: {dashes}")
        print(f"Guesses left: {guessesLeft}")
        # 统一把用户输入转成小写,同时去除前后空格
        guess = input("Guess a letter: ").strip().lower()
        
        # 处理无效输入:非单字母、非英文字符
        if len(guess) != 1 or not guess.isalpha():
            print("Your guess must be exactly one alphabetic character!")
            continue
        # 避免重复猜测同一个字母
        if guess in used_letter:
            print("You already guessed that letter! Try another one.")
            continue
        
        used_letter.append(guess)
        
        # 对比时忽略大小写:将秘密单词转小写后检查输入是否存在
        if guess in secretWord.lower():
            print("That letter is in the secret word!")
            dashes = updateDashes(secretWord, dashes, guess)
        else:
            print("That letter is not in the secret word!")
            guessesLeft -= 1
    
    if guessesLeft < 0:
        print(f"You lose. The word was: {secretWord}")
        print(dashes)
    else:
        print(f"Congrats! You win! The word was: {secretWord}")
        print(dashes)

def updateDashes(secret, cur_dash, rec_guess):
    result = ""
    # 把输入的字母转成小写,统一做对比
    rec_guess_lower = rec_guess.lower()
    for i in range(len(secret)):
        # 检查原字母的小写形式是否和输入的小写一致
        if secret[i].lower() == rec_guess_lower:
            # 保留原单词的大小写,而不是用输入的小写替换
            result += secret[i]
        else:
            result += cur_dash[i]
    return result

########
# Main #
########
word = random.choice(words)
word2 = random.choice(words)
secretWord = word + " " + word2
Run()

额外优化说明

我还顺手加了两个小细节优化:

  • 过滤非字母输入和多字符输入,避免无效操作
  • 阻止重复猜测同一个字母,提升游戏体验

现在不管用户输入大写还是小写字母,都能正确匹配到秘密单词里对应的大小写字母,游戏界面也会完整保留原单词的大小写样式,完全不影响玩法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:13:30