在Hangman游戏中用玩家猜测字符替换所有匹配的下划线
解决Hangman游戏中替换所有匹配字符的问题
你的问题出在randomWord.find(userInput)——这个方法只会返回第一个匹配字符的索引,所以不管单词里有几个相同的字符,你都只能替换第一个下划线,自然没法批量更新所有匹配的位置。
用enumerate解决的思路
enumerate()是Python里遍历序列时的实用工具,它能同时返回每个元素的索引和元素本身。用它遍历目标单词,就能逐个检查每个位置的字符是否和用户输入一致,然后批量替换guess里对应的下划线。
修改后的代码示例
# 初始化下划线字符串,直接用乘法更简洁 guess = "_" * len(randomWord) # 标记是否找到匹配字符,避免重复减missLett found = False # 用enumerate遍历,同时拿到索引i和对应字符char for i, char in enumerate(randomWord): if char == userInput: # 把guess转成列表才能修改单个字符 guess_list = list(guess) guess_list[i] = userInput guess = "".join(guess_list) found = True # 只有找到匹配时才减少错误次数 if found: missLett -= 1
代码说明
- 初始化guess时,
"_" * len(randomWord)比循环拼接更高效,直接生成和目标单词长度相同的下划线字符串。 - 用
enumerate(randomWord)遍历,每次循环拿到i(当前字符的索引)和char(当前字符)。 - 每次匹配到用户输入的字符时,就修改guess对应索引的位置。
- 加个
found变量标记是否找到匹配,这样不管找到多少个字符,missLett只会减一次,符合Hangman的规则(猜对一个字符只算一次正确猜测)。
内容的提问来源于stack exchange,提问作者ProgrammingDummyHoe
相关产品推荐
相关产品推荐

