Программа Hangman: некорректное использование глобальной переменной в цикле - PullRequest
0 голосов
/ 15 мая 2018

Я пишу программу для игры в палача и не думаю, что правильно использую свою глобальную переменную.

Как только первая итерация программы завершается после правильного предположения, любая последующая итерация с правильным предположением выводит 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

Примечание: это только короткий раздел моего кода, но я не чувствую, что другие куски имеют отношение.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Основная проблема, с которой вы сталкиваетесь, заключается в том, что вы добавляете глобальную переменную каждый раз, когда вызываете свою функцию. Однако я думаю, что вам не нужно использовать глобальную переменную, в общем, это очень плохая практика, вы можете просто использовать следующий код, учитывая то, что вы объясняете в своем вопросе:

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

Я также думаю, что было бы лучше, если бы вы использовали понимание Python, чтобы сделать ваш код быстрее.

0 голосов
/ 15 мая 2018

каждый раз, когда вы вызываете функцию getGuessedWord, которую вы добавляете к `word, вы не можете использовать глобальные:

secretWord = "myword"


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


getGuessedWord(secretWord,"")
getGuessedWord(secretWord,"m")
getGuessedWord(secretWord,"mwd")

Или вы можете решить эту проблему, задавая слово на постоянной длине, (не так приятно и труднее следовать) например: word='_ '*len(secretWord), затем вместо добавления заменить его на букву word=word[:2*i]+letter +word[2*i+1:]

Пример здесь:

secretWord = "myword"
word='_ '*len(secretWord)

def getGuessedWord(secretWord, lettersGuessed):
    global word
    for i, letter in enumerate(secretWord):
        if letter in lettersGuessed:
            word=word[:2*i]+letter +word[2*i+1:]
    return print(word)

getGuessedWord(secretWord,"")
getGuessedWord(secretWord,"m")
getGuessedWord(secretWord,"w")
getGuessedWord(secretWord,"d")
...