如何让Python 3的Hangman游戏支持大小写字母等效输入?
嘿,这个问题其实很好解决!核心思路就是让字母匹配的时候忽略大小写,但同时保留原单词的大小写显示。我来给你一步步修改代码:
关键修改思路
- 统一用户输入格式:不管用户输入大写还是小写,都转成小写处理,避免重复判断同一个字母的不同大小写形式。
- 对比时忽略原单词大小写:判断输入是否在秘密单词里时,把秘密单词也转成小写来做对比。
- 保留原单词的大小写显示:更新下划线进度时,要使用原单词里的原始字母(不管大小写),而不是用户输入的小写,保证游戏界面的准确性。
修改后的完整代码
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
相关产品推荐
相关产品推荐

