Python Hangman游戏重复猜字母时重复提示的问题排查
修复Hangman游戏重复猜字母时多次提示的问题
问题原因
你的代码中,判断已猜字母的逻辑被放在遍历目标单词每个字母的for循环内部:
for letter in chosen_word: # ... 其他代码 ... if guess in display: print(f"You've already guessed {guess}!")
这会导致每遍历一个字母就执行一次判断,目标单词有多少个字母,就会打印多少次提示。
解决方案
- 新增
guessed_letters列表,专门记录所有已猜过的字母(包括正确和错误的) - 在获取用户输入后,先检查该字母是否在
guessed_letters中,若是则仅打印一次提示,直接跳过后续重复判断 - 修正
correct_letters的添加逻辑,避免同一字母重复存入
修改后的完整代码
import random from hangman_words import word_list from hangman_art import logo from hangman_art import stages lives = 6 chosen_word = random.choice(word_list) print(logo) # print(chosen_word) # 测试用,正式游戏可注释 placeholder = "_" * len(chosen_word) print("Word to guess: " + placeholder) game_over = False correct_letters = [] guessed_letters = [] # 新增:记录所有已猜字母 while not game_over: print(f"**************************** {lives} /6 LIVES LEFT****************************") guess = input("Guess a letter: ").lower() # 先处理重复猜字母的情况:放在循环外,仅判断一次 if guess in guessed_letters: print(f"You've already guessed {guess}!") print("Word to guess: " + placeholder) print(stages[lives]) continue guessed_letters.append(guess) display = "" for letter in chosen_word: if letter == guess: display += letter # 仅当字母不在correct_letters时才添加,避免重复 if guess not in correct_letters: correct_letters.append(guess) elif letter in correct_letters: display += letter else: display += "_" print("Word to guess: " + display) placeholder = display # 更新当前进度,用于重复猜字母时显示 # 处理猜错的情况 if guess not in chosen_word: lives -= 1 print(f"You guessed {guess}, that's not in the word. You lose a life.") if lives == 0: game_over = True print(f"***********************YOU LOSE**********************") print(f"The correct word was: {chosen_word}") # 处理猜对所有字母的情况 if "_" not in display: game_over = True print("****************************YOU WIN****************************") print(stages[lives])
关键改动说明
- 用
guessed_letters统一管理已猜字母,避免重复判断逻辑混乱 - 将重复提示逻辑移到
for循环外,确保只打印一次 - 优化
correct_letters的添加逻辑,避免同一字母重复存入 - 补全了猜错时的提示文本,以及输局时显示正确单词的逻辑
内容的提问来源于stack exchange,提问作者Ishan Needs Help
相关产品推荐
相关产品推荐

