猜词游戏字符串叠加问题求助:无法保留已猜中字符状态
问题分析
你的猜词游戏核心问题在于每次猜中字母时,没有保留之前已经猜对的字符,而是重新生成了全下划线加当前字母的字符串。比如目标单词是apple,第一次猜p时生成_pp__,但第二次猜l时,代码会遍历apple,只把l的位置换成l,其他位置都加_,所以得到___l_,完全覆盖了之前猜对的p。
错误原因
问题出在这段核心代码:
if letter in Woord: count = Woord.count(letter) print('Correct') for char in Woord: if char == letter: geraden_letters += char correct = correct + 1 else: geraden_letters += '_' print(geraden_letters)
每次猜中字母时,geraden_letters会被从头拼接,之前存储的猜对字符完全被覆盖,自然无法叠加显示所有已猜中的字母。
修复方案
- 初始化
geraden_letters为与目标单词长度相同的下划线字符串,确保初始占位符数量匹配。 - 每次猜中字母时,仅替换目标单词中对应位置的字符,保留之前已猜中的内容。
- 修正正确计数逻辑,避免重复累加同一字母的次数。
修复后的完整代码:
while True: Woord = input('请输入猜词游戏的目标单词: ') correct = 0 superCorrect = len(Woord) gokjes = 8 dood = 0 # 初始化对应长度的下划线占位符 geraden_letters = '_' * len(Woord) # 打印初始界面 print('\n' * 20) print(' '.join(geraden_letters)) print('\n' * 2) for i in range(gokjes): letter = input('猜一个字母: ') if letter == "": exit() if letter in Woord: print('正确') # 字符串不可直接修改,转成列表操作 temp_list = list(geraden_letters) new_correct = 0 # 遍历目标单词,替换未被猜中的对应位置 for idx, char in enumerate(Woord): if char == letter and temp_list[idx] == '_': temp_list[idx] = letter new_correct += 1 # 更新已猜中的字符串和正确计数 geraden_letters = ''.join(temp_list) correct += new_correct print(' '.join(geraden_letters)) if correct == superCorrect: print(f'单词是... {geraden_letters.upper()}!') exit() else: print('错误') print(letter) dood = 1 if dood == 1: print('你输了,绞刑架完成') print()
关键改进点
- 用
'_' * len(Woord)初始化占位符,保证长度与目标单词一致。 - 借助列表修改字符(Python字符串不可变),只替换未被猜中的位置,保留之前的正确结果。
- 新增
new_correct变量统计本次猜中的新字符数,避免重复计数同一字母(比如apple里的两个p,第一次猜p时仅计数+2)。 - 用
' '.join(geraden_letters)让输出格式更清晰美观。
内容的提问来源于stack exchange,提问作者benyboya2
相关产品推荐
相关产品推荐

