本文讲解如何在 hangman(猜单词)游戏中,将隐藏字符串中所有对应位置的下划线 `_` 替换为用户猜中的字母,重点使用 `enumerate()` 高效定位并批量更新多个匹配索引。
在 Hangman 游戏中,初始显示通常是一串下划线(如 "_____"),代表目标单词的每个字母。当玩家输入一个字母(例如 'p')后,程序需找出该字母在目标单词(如 "hippopotamus")中所有出现的位置,并将对应下划线全部替换为该字母。你原先的代码仅用 str.find() 获取第一个匹配索引,无法处理重复字母(如 'p' 在 "hippopotamus" 中出现 3 次),因此会遗漏后续匹配。
enumerate() 是解决此问题的理想工具——它在遍历字符串时同时提供索引和字符,避免手动维护计数器或多次调用 find()。以下是推荐的实现方式:
randomWord = "hippopotamus"
guess = list("_" * len(randomWord)) # 初始化为可变列表,便于按索引修改
userInput = "p"
# 遍历目标单词:i 是索引,char 是当前字符
for i, char in enumerate(randomWord):
if char == userInput:
guess[i] = userInput # 直接更新对应位置
guess_s
tr = "".join(guess) # 转回字符串用于显示
print(guess_str) # 输出: "__pp_p______"✅ 关键优势:
⚠️ 注意事项:
掌握 enumerate() 不仅能优雅解决 Hangman 的核心逻辑,也是 Python 迭代编程的重要基础技能——它让“既要位置又要元素”的需求变得直观而可靠。