首页 > 解决方案 > 刽子手程序:循环中不正确使用全局变量

问题描述

我正在编写一个程序来玩游戏刽子手,但我认为我没有正确使用我的全局变量。

一旦程序的第一次迭代在正确猜测后结束,任何具有正确猜测的后续迭代都会打印出word它及其所有过去的值。

我怎样才能只打印 的最新值word?这段代码在一个 while 循环中,每次迭代都会获取用户输入。谢谢!

代码:

word=''

#lettersGuessed is a list of string values of letters guessed

def getGuessedWord(secretWord, lettersGuessed):
    global word
    for letter in secretWord:
        if letter not in lettersGuessed:
            word=word+' _'
        elif letter in lettersGuessed:
            word=word+' '+letter
    return print(word)

输出:

#first iteration if 'a' was guessed:
a _ _ _ _

#second iteration if 'l' was guessed:
a _ _ _ _ a _ _ l _

#third iteration if 'e' was guessed:
a _ _ _ _ a _ _ l _ a _ _ l e

#Assuming the above, for the third iteration I want:
a _ _ l e

注意:这只是我代码的一小部分,但我觉得其他块不相关。

标签: python-3.xwhile-loopglobal-variables

解决方案


您面临的主要问题是每次调用函数时都会附加全局变量。但是,我认为您不需要使用全局变量,通常这是一种非常糟糕的做法,您可以简单地使用以下代码来考虑您在问题中解释的内容:

def getGuessedWord(secretWord, lettersGuessed):
    return ' '.join(letter if letter in lettersGuessed else '_'
                    for letter in secretWord)

我还认为,如果您使用 python 理解来使您的代码更快,那会更好。


推荐阅读