2016-10-07 3 views
0

Моя петля, кажется, перебирает первую букву, а затем ломается, хотя она должна перебирать каждую букву в secretWord, например, код ниже должен печатать «_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' ** завершает ** функцию, там и тогда, поэтому цикл' for' также не будет продолжен. –

+0

, вы должны создать набор результатов из своего цикла, прежде чем определять свой ответ, так как вы коротко обращаетесь с возвратом, как то, что сказал Мартийн. – Fallenreaper

+0

Для образовательных целей вы также можете использовать для этого список: '. '.join ([x, если x в letterGuessed else _ _ для x в secretWord])' – Jaco

ответ

2

Вы 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) 

Если вы чувствуете приключений, вы можете даже сделать это list comprehension и делать всю работу в одной строке:

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 
0

Ответный ключевое слово выходит из са lling. Это должно сделать трюк:

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'])) 

Здесь, вы начинаете с пустой строкой в ​​качестве результата и либо приложить письмо (если он был включен в список) или подчеркивание (если это не было), то возвращение строка результата.

Смежные вопросы