You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:Hangman游戏打印逻辑异常问题

Python新手求助:Hangman游戏打印逻辑异常问题

嘿,我来帮你排查这个Hangman游戏的问题~

首先看你遇到的现象:每次猜中字母后,输出的字符串会越来越长,还带着多余的下划线,这是因为你的代码里**display变量一直在累加内容,而不是每次重新生成正确的显示字符串**。

咱们拆解下原代码的问题:

  • 你在循环外初始化了空的display,每次进入while循环猜字母时,都会遍历整个单词,把每个字母的判断结果(猜对的字母或下划线)追加到display后面。
  • 比如第一次猜c,display变成c____(对应单词camel的5个字符);第二次猜a时,又遍历camel的每个字符,生成_a___,然后追加到之前的c____后面,就变成了c_____a___——这就是多余下划线的来源!

修正方案

我们需要换个思路:维护一个和单词长度一致的列表,用来记录每个位置是否已经猜中字母,每次猜完只更新这个列表,再转成字符串打印。这样就不会出现累加的问题了。

修正后的代码如下:

import random as r
word_list = ["aardvark", "baboon", "camel"]
chosen_word = r.choice(word_list)
print(chosen_word)

# 初始化一个和单词长度一致的下划线列表
display = ["_"] * len(chosen_word)
print("".join(display))

while True:
    guess = input("Guess a letter: ").lower()
    # 遍历单词的每个位置,更新display列表
    for position in range(len(chosen_word)):
        letter = chosen_word[position]
        if letter == guess:
            display[position] = letter
    # 把列表转成字符串打印
    print("".join(display))

关键改动说明

  1. 用列表display代替原来的字符串:列表可以直接修改指定位置的元素,比字符串拼接更灵活。
  2. 每次猜字母时,不再累加字符串,而是遍历单词的每个位置,把猜中的字母替换到display列表对应位置。
  3. 打印时用"".join(display)把列表转成字符串,这样每次输出的长度都和原单词一致。

你试试这个代码,就能得到正确的效果啦:猜中c后输出c____,再猜中a后输出c_a__,完全符合预期~

备注:内容来源于stack exchange,提问作者Chris Zimmer N0chi11Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:33:10