如何构建Hangman游戏循环:校验输入并直至猜中所有字母
解决Hangman游戏的循环猜字母问题
你的代码核心问题是仅执行了一次字母输入与匹配逻辑,未实现让用户持续猜字母直到全中的循环,同时输入校验的while True仅执行一次就跳出,需要将其嵌套到持续猜字母的外层循环中。
以下是修改后的完整代码,保留了你要求的输入校验逻辑,同时实现了持续猜字母直到所有字母被猜中的功能:
print("Let's Play Hangman game!") # 获取合法的目标单词 while True: vocab = input("Please enter an English word: ") if vocab.isalpha(): uppercase_vocab = vocab.upper() break else: print(f"Your input '{vocab}' is not a valid English word.") # 初始化显示用的下划线列表 display = ["_"] * len(uppercase_vocab) # 记录已猜过的字母,避免重复输入 guessed_letters = set() # 外层循环:直到所有字母被猜中(display中无下划线) while "_" in display: # 内层循环:校验输入必须是单个字母 while True: word = input("\nPlease enter an alphabet: ") if len(word) == 1 and word.isalpha(): uppercase_word = word.upper() # 检查是否已经猜过这个字母 if uppercase_word in guessed_letters: print(f"You already guessed '{uppercase_word}'! Try another one.") else: guessed_letters.add(uppercase_word) break else: print(f"Your input '{word}' is not a valid single alphabet.") # 匹配字母并更新display for i in range(len(uppercase_vocab)): letter = uppercase_vocab[i] if letter == uppercase_word: display[i] = letter # 输出当前猜中状态 current_status = "".join(display) print(f"Current progress: {current_status}") # 全部猜中后的提示 print("\nCongratulations! You guessed all letters correctly!")
关键修改点:
- 新增外层循环
while "_" in display:只要显示列表里还有下划线,就持续让用户猜字母。 - 将输入校验的
while True嵌套到外层循环内:每次猜字母前都执行输入合法性检查,满足要求才跳出内层循环处理字母匹配。 - 新增
guessed_letters集合:记录用户已猜过的字母,避免重复输入同一个字母,优化游戏体验。 - 每次猜完字母后输出当前猜中进度,让用户清晰掌握游戏状态。
内容的提问来源于stack exchange,提问作者YPT
相关产品推荐
相关产品推荐

