Python开发hangman游戏时如何让控制台记住用户输入的猜测字母
Python Hangman猜词游戏动态进度展示实现方案
核心思路是用集合记录已猜对的字母,每次用户输入后动态拼接当前的猜词进度,不用针对每个单词硬编码展示规则,适配所有词库内的单词。
修改后的完整可运行代码如下:
import random import string import time # 预设词库,后续新增单词直接加在这里即可 hangman_words = ['tree', 'sun'] max_tries = 5 while True: # 每次开局初始化参数 target_word = random.choice(hangman_words) guessed_correct = set() # 记录猜对的字母 guessed_wrong = set() # 记录猜错的字母 remaining_tries = max_tries game_over = False print("===== 新游戏开始 =====") # 初始展示全下划线 initial_progress = ' '.join(['_' for _ in target_word]) print(f"当前进度:{initial_progress}") while not game_over: user_input = input("\n请输入你要猜的字母/单词:").strip().lower() # 输入合法性校验 if len(user_input) == 0: print("输入不能为空,请重新输入") continue # 判断用户是猜整个单词还是单个字母 if len(user_input) > 1: # 猜整个单词 if user_input == target_word: print(f"恭喜你猜对了!正确单词就是 {target_word}") game_over = True else: remaining_tries -= 1 print(f"猜错了,你还有 {remaining_tries} 次机会") else: # 猜单个字母 guess_letter = user_input if guess_letter in guessed_correct or guess_letter in guessed_wrong: print("你已经猜过这个字母了,请换一个") continue if not guess_letter.isalpha(): print("请输入有效的英文字母") continue if guess_letter in target_word: print("猜对了!这个字母在单词里") guessed_correct.add(guess_letter) else: print("猜错了,这个字母不在单词里") guessed_wrong.add(guess_letter) remaining_tries -= 1 # 生成当前进度 current_progress = [] for char in target_word: if char in guessed_correct: current_progress.append(char) else: current_progress.append('_') current_progress_str = ' '.join(current_progress) print(f"当前进度:{current_progress_str}") # 判断是否全部猜对 if '_' not in current_progress_str: print(f"恭喜你猜全了所有字母!正确单词是 {target_word}") game_over = True # 判断是否用完次数 if remaining_tries <= 0: print(f"很遗憾你用完了所有机会,正确单词是 {target_word}") game_over = True # 询问是否再玩一局 play_again = input("按回车键再玩一局,输入其他内容退出游戏:").strip() if play_again != '': print("游戏结束,再见") time.sleep(1) break
本次修改的核心优化点:
- 通用进度生成逻辑:不用针对每个单词单独写展示规则,词库新增单词无需修改业务逻辑
- 自动去重判断:用户重复猜同一个字母不会消耗次数
- 同时支持猜单个字母和直接猜整个单词两种玩法
- 修正了原代码中多个逻辑错误:比如字符串和列表比较、赋值符号写成等于号、重复判断等问题
内容的提问来源于stack exchange,提问作者Infui0ayaan
相关产品推荐
相关产品推荐

