Hangman游戏程序问题:循环中全局变量误用致输出异常
解决Hangman游戏中重复输出历史猜测结果的问题
你的核心问题是误用了全局变量word:这个全局变量会在每次函数调用时保留之前的拼接结果,导致每次正确猜测后都把历史输出也追加进去。要解决这个问题,我们需要去掉全局变量,让函数每次都从头构建当前的猜测结果,而不是累加历史值。
问题根源分析
你当前的代码里,全局变量word在第一次调用函数时被赋值,之后每次调用getGuessedWord,都会在这个已有的word字符串后面继续拼接新的内容,自然就会把之前所有的结果都重复输出。
修改后的代码方案
我们把函数改成纯函数(不依赖全局状态,只靠传入的参数生成结果),每次调用时重新构建当前的猜测字符串:
def getGuessedWord(secretWord, lettersGuessed): # 每次调用函数时,初始化一个空字符串,从头构建当前结果 current_word = '' for letter in secretWord: if letter not in lettersGuessed: current_word += ' _' else: current_word += ' ' + letter # 返回构建好的当前结果,而不是直接打印(更灵活) return current_word # 在你的while循环里这样使用: # 假设secretWord是目标单词,lettersGuessed是已猜字母的列表 while True: # 获取用户输入的逻辑... guessed_word = getGuessedWord(secretWord, lettersGuessed) print(guessed_word.strip()) # strip()去掉开头的空格,输出更美观
修改后的效果
按照你的例子,现在的输出会变成:
# 第一次猜'a'时: a _ _ _ _ # 第二次猜'l'时: a _ _ l _ # 第三次猜'e'时: a _ _ l e
额外建议
尽量避免使用全局变量来存储临时状态,像这样的场景,函数应该只负责根据输入的参数生成对应的输出,状态(比如lettersGuessed)可以在循环里维护,然后传递给函数。这种写法更清晰,也不容易出现类似的状态混乱问题。
内容的提问来源于stack exchange,提问作者tRot
相关产品推荐
相关产品推荐

