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))
关键改动说明
- 用列表
display代替原来的字符串:列表可以直接修改指定位置的元素,比字符串拼接更灵活。 - 每次猜字母时,不再累加字符串,而是遍历单词的每个位置,把猜中的字母替换到
display列表对应位置。 - 打印时用
"".join(display)把列表转成字符串,这样每次输出的长度都和原单词一致。
你试试这个代码,就能得到正确的效果啦:猜中c后输出c____,再猜中a后输出c_a__,完全符合预期~
备注:内容来源于stack exchange,提问作者Chris Zimmer N0chi11Z
相关产品推荐
相关产品推荐

