Python版Hang Man游戏重复字母显示错误问题求助
修复Python版Hang Man游戏重复字母显示错误问题
问题描述
开发Python版Hang Man游戏时,使用列表parola展示猜中的字母,但当目标单词包含重复字母时,第二个重复字母会显示在错误位置。朋友用C++复刻相同算法(对应代码第61-64行)却能正常运行。
错误原因
原代码中处理猜中字母的循环逻辑存在漏洞:
x = 0 guess = '' for i in word: if i == e: parola[x] = e else: x+=1
这段代码仅在字符不匹配时递增索引x,遇到匹配字符时x会停滞,导致后续字符的索引计算偏移,最终重复字母被放到错误位置。比如单词label中,第二个e会被错误地放到索引2的位置,而正确位置是3。
修复方案
修改循环逻辑,无论字符是否匹配,都要递增索引x,或者更简洁地使用enumerate遍历单词的索引和字符:
方法一:修正索引递增逻辑
x = 0 for i in word: if i == e: parola[x] = e x += 1 # 不管是否匹配,都保持索引递增
方法二:使用enumerate(更简洁推荐)
for idx, char in enumerate(word): if char == e: parola[idx] = e
替换后的完整click函数关键片段
if e in word: # 用enumerate遍历索引与字符,精准定位匹配位置 for idx, char in enumerate(word): if char == e: parola[idx] = e print(parola) out_lett['text'] = parola out_lett['font'] = ('Cormorant SC', 30) out_lett['fg'] = '#A5C9CA' out_lett.grid(row= 9, column= 4)
验证效果
以单词label为例,猜中字母e时,parola会正确更新为['-', 'e', '-', 'e', '-'],重复字母的位置不再偏移。
内容的提问来源于stack exchange,提问作者Revers_official
相关产品推荐
相关产品推荐

