#python #debugging #for-loop
#python #отладка #цикл for
Вопрос:
Кажется, что мой цикл повторяет первую букву, а затем прерывается, хотя предполагается, что он повторяет каждую букву в секретном слове, например, приведенный ниже код должен выводить «_pp_e», но вместо этого он выводит только «_». Я не понимаю, в чем проблема с этим кодом??
def getGuessedWord(secretWord, lettersGuessed):
'''
secretWord: string, the word the user is guessing
lettersGuessed: list, what letters have been guessed so far
returns: string, comprised of letters and underscores that represents
what letters in secretWord have been guessed so far.
'''
# FILL IN YOUR CODE HERE...
for letter in secretWord:
if letter in lettersGuessed:
return letter
else:
return '_'
print(getGuessedWord("apple", ['e', 'i', 'k', 'p', 'r', 's']))
Комментарии:
1.Ну, вы
return
из функции на первой итерации.return
завершает функцию там и тогда, такfor
что цикл тоже не будет продолжаться.2. вы должны создать набор результатов из своего цикла, прежде чем определять свой ответ, так как вы сокращаете возврат, как сказал Мартинн.
3. В образовательных целях вы также можете использовать понимание списка для этого:
''.join([x if x in lettersGuessed else '_' for x in secretWord])
Ответ №1:
Вы return
из функции на первой итерации. return
завершает функцию там и тогда, поэтому for
цикл также не будет продолжаться.
Вам нужно создать возвращаемое значение в самой функции. Создавайте результирующую строку по одному символу за раз, используя список для хранения всех символов, а затем объединяя их в одну строку в конце:
def getGuessedWord(secretWord, lettersGuessed):
'''
secretWord: string, the word the user is guessing
lettersGuessed: list, what letters have been guessed so far
returns: string, comprised of letters and underscores that represents
what letters in secretWord have been guessed so far.
'''
guessed = []
for letter in secretWord:
if letter in lettersGuessed:
guessed.append(letter)
else:
guessed.append('_')
return ''.join(guessed)
Если вы чувствуете себя предприимчивым, вы могли бы даже сделать это для понимания списка и выполнить всю работу в одной строке:
def getGuessedWord(secretWord, lettersGuessed):
'''
secretWord: string, the word the user is guessing
lettersGuessed: list, what letters have been guessed so far
returns: string, comprised of letters and underscores that represents
what letters in secretWord have been guessed so far.
'''
return ''.join([l if l in lettersGuessed else '_' for l in secretWord])
Любая из версий дает ожидаемый результат:
>>> print(getGuessedWord("apple", ['e', 'i', 'k', 'p', 'r', 's']))
_pp_e
Ответ №2:
Ключевое слово return завершает работу вызывающей функции. Это должно сработать:
def getGuessedWord(secretWord, lettersGuessed):
result = ''
for letter in secretWord:
if letter in lettersGuessed:
result = letter
else:
result = '_'
return result
print(getGuessedWord("apple", ['e', 'i', 'k', 'p', 'r', 's']))
Здесь вы начинаете с пустой строки в качестве результата и либо добавляете букву (если она была включена в список), либо символ подчеркивания (если его не было), затем возвращаете результирующую строку.