Python Hangman游戏:如何处理列表中重复字符的显示问题
Hangman游戏重复字母匹配问题解决
问题描述
当前代码仅能替换第一个匹配字母对应的下划线,例如当secretWord为"skill"、猜测字符为"l"时,仅显示_ _ _ l _,期望显示_ _ _ l l。原代码如下:
secretWorld=list(input("secretWorld: ")) guess=str(input("guess: ")) if guess in secretWord: ind=secretWord.index(guess) contl[ind*2]=guess print(contl)
问题原因
list.index(guess)方法只会返回第一个匹配字符的索引,因此仅能替换对应位置的下划线,无法处理重复出现的字符。另外原代码存在变量名拼写错误:secretWorld应为secretWord,否则会引发未定义变量报错。
解决方案
遍历整个秘密单词列表,找出所有与猜测字符匹配的索引,逐个替换显示列表中对应的位置,同时补全显示列表的初始化逻辑:
# 获取秘密单词并转为列表 secretWord = list(input("secretWord: ")) # 初始化显示列表,生成"_ _ _ _ _"样式的结构 contl = [] for _ in secretWord: contl.append("_") contl.append(" ") # 移除最后多余的空格 if contl: contl.pop() # 获取用户猜测的字符 guess = input("guess: ") # 遍历所有字符,替换所有匹配的位置 for idx, char in enumerate(secretWord): if char == guess: contl[idx * 2] = guess # 更美观地打印结果 print("".join(contl))
代码说明
- 用
enumerate遍历secretWord,同时获取字符的索引和对应值 - 对每个匹配的索引,计算其在
contl中的对应位置(idx*2)并替换为猜测字符 - 用
"".join(contl)将列表转为字符串,避免打印出列表的方括号和逗号,显示更符合游戏预期
内容的提问来源于stack exchange,提问作者Andro 65
相关产品推荐
相关产品推荐

