Hangman游戏大小写匹配错误及单词列表转小写技术求助
解决Hangman游戏大小写不匹配的判定问题
要实现忽略大小写的字母判定,只需统一目标单词和用户输入的大小写基准,同时优化输入验证逻辑,以下是具体修改步骤:
1. 统一目标单词的大小写
在main()函数中,将随机选中的单词转换为全小写用于匹配判断,同时保留原单词副本用于游戏结束时展示:
def main(): global count global display global word global original_word # 新增全局变量保存原单词 global already_guessed global length global play_game selected_word = random.choice(word_list) word = selected_word.lower() # 转小写作为匹配基准 original_word = selected_word # 保留原单词用于最终展示 length = len(word) count = 0 display = '_' * length already_guessed = [] play_game = ""
2. 统一用户输入的大小写
在hangman()函数中,将用户输入的猜测字母转换为全小写,确保和目标单词的基准一致:
guess = input("This is the Hangman Word: " + display + " Enter your guess: \n") guess = guess.strip().lower() # 统一转为小写
3. 修正输入验证逻辑
原代码中guess <= "9"的判断逻辑有误,替换为更准确的数字检测:
if len(guess) == 0 or len(guess) >= 2 or guess.isdigit(): print("Invalid Input, Try a letter\n") hangman()
4. 优化多字母匹配与显示
原代码仅替换第一个匹配的字母,新增循环处理所有相同字母,同时显示原单词的大小写:
elif guess in word: already_guessed.extend([guess]) # 循环替换所有匹配的字母 while guess in word: index = word.find(guess) word = word[:index] + "_" + word[index + 1:] display = display[:index] + original_word[index] + display[index + 1:] # 显示原单词的大小写 print(display + "\n")
5. 修正游戏结束时的单词展示
原代码展示正确单词的逻辑错误,改为使用保存的原单词:
elif count == 9: time.sleep(1) print(" _____ \n" " | | \n" " | |\n" " | | \n" " | O \n" " | /|\\ \n" " | / \\ \n" "__|__\n") print("Wrong guess. You are hanged!!!\n") print("The word was:", original_word) # 展示原单词 play_loop()
修改后的完整代码
import random import time from words import word_list # Initial Steps to invite in the game: print("\nWelcome to Hangman!\n") name = input("Enter Your name: ") print("Hello " + name + "! Good Luck!") time.sleep(2) print("The Game is About to Start!\n Let's Play Hangman!") time.sleep(3) # The parameters we require to execute the game: def main(): global count global display global word global original_word global already_guessed global length global play_game selected_word = random.choice(word_list) word = selected_word.lower() original_word = selected_word length = len(word) count = 0 display = '_' * length already_guessed = [] play_game = "" # A loop to re-execute the game when the first round ends: def play_loop(): global play_game play_game = input("Do You want to play again? y = yes, n = no \n") while play_game not in ["y", "n","Y","N"]: play_game = input("Do You want to play again? y = yes, n = no \n") if play_game == "y": main() elif play_game == "n": print("Thanks For Playing! We expect you back again!") exit() # Initializing all the conditions required for the game: def hangman(): global count global display global word global original_word global already_guessed global play_game limit = 9 guess = input("This is the Hangman Word: " + display + " Enter your guess: \n") guess = guess.strip().lower() if len(guess) == 0 or len(guess) >= 2 or guess.isdigit(): print("Invalid Input, Try a letter\n") hangman() elif guess in word: already_guessed.extend([guess]) # 处理单词中多个相同字母的情况 while guess in word: index = word.find(guess) word = word[:index] + "_" + word[index + 1:] display = display[:index] + original_word[index] + display[index + 1:] print(display + "\n") elif guess in already_guessed: print("Try another letter.\n") else: count += 1 if count == 1: time.sleep(1) print(" _____ \n" " | \n" " | \n" " | \n" " | \n" " | \n" " | \n" "__|__\n") print("Wrong guess. " + str(limit - count) + " guesses remaining\n") elif count == 2: time.sleep(1) print(" _____ \n" " | | \n" " | |\n" " | \n" " | \n" " | \n" " | \n" "__|__\n") print("Wrong guess. " + str(limit - count) + " guesses remaining\n") elif count == 3: time.sleep(1) print(" _____ \n" " | | \n" " | |\n" " | | \n" " | \n" " | \n" " | \n" "__|__\n") print("Wrong guess. " + str(limit - count) + " guesses remaining\n") elif count == 4: time.sleep(1) print(" _____ \n" " | | \n" " | |\n" " | | \n" " | O \n" " | \n" " | \n" "__|__\n") print("Wrong guess. " + str(limit - count) + " last guess remaining\n") elif count == 5: time.sleep(1) print(" _____ \n" " | | \n" " | |\n" " | | \n" " | O \n" " | | \n" " | \n" "__|__\n") print("Wrong guess. " + str(limit - count) + " last guess remaining\n") elif count == 6: time.sleep(1) print(" _____ \n" " | | \n" " | |\n" " | | \n" " | O \n" " | /| \n" " | \n" "__|__\n") print("Wrong guess. " + str(limit - count) + " last guess remaining\n") elif count == 7: time.sleep(1) print(" _____ \n" " | | \n" " | |\n" " | | \n" " | O \n" " | /|\\ \n" " | \n" "__|__\n") print("Wrong guess. " + str(limit - count) + " last guess remaining\n") elif count == 8: time.sleep(1) print(" _____ \n" " | | \n" " | |\n" " | | \n" " | O \n" " | /|\\ \n" " | / \n" "__|__\n") print("Wrong guess. " + str(limit - count) + " last guess remaining\n") elif count == 9: time.sleep(1) print(" _____ \n" " | | \n" " | |\n" " | | \n" " | O \n" " | /|\\ \n" " | / \\ \n" "__|__\n") print("Wrong guess. You are hanged!!!\n") print("The word was:", original_word) play_loop() if word == '_' * length: print("Congrats! You have guessed the word correctly!") play_loop() elif count != limit: hangman() main() hangman()
内容的提问来源于stack exchange,提问作者Lasya Yatin
相关产品推荐
相关产品推荐

