猜单词(Hangman)游戏代码问题:如何替换列表中所有匹配项
解决Hangman游戏中多匹配字母替换问题
你的代码核心问题在于每次调用self.word.find(guess)只会返回第一个匹配字符的索引,循环中反复修改的都是同一个位置,导致像apple里的第二个p无法被替换。同时self.num_letters -= 1的逻辑也有问题,若字母重复出现,剩余字母数会计算错误。
修改后的代码
if guess in self.word: print(f"Good guess! {guess} is in the word.") guessed = True # 统计当前字母出现的总次数,用于更新剩余待猜字母数 match_count = self.word.count(guess) # 遍历每个索引和对应字符,替换所有匹配项 for idx, char in enumerate(self.word): if char == guess: self.word_guessed[idx] = guess self.num_letters -= match_count print(f"Your progress so far: {self.word_guessed}.") else: self.num_lives -= 1 print(f"Sorry. {guess} is not in the word. Try again.") print(f"You have {self.num_lives} lives left.") print(f"Your progress so far: {self.word_guessed}.")
关键优化点
- 使用
enumerate()同时获取字符的索引和内容,确保每个匹配的位置都被精准替换 - 用
str.count()获取字母在单词中的总出现次数,准确更新剩余需要猜测的字母数量
内容的提问来源于stack exchange,提问作者Jen
相关产品推荐
相关产品推荐

