2016-10-07 27 views
0

我的循环似乎遍历第一个字母,然后打破它应该遍历secretWord中的每个字母,例如,代码波纹管应该打印出“_pp_e”,但是它只打印“_”。我不明白,那个代码有什么问题?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. 
    ''' 
    # 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

您应该在确定您的答案之前从您的循环中创建一组结果,因为您正在缩短回报,就像Martijn所说的那样。 – Fallenreaper

+0

为了教育目的,你也可以使用列表理解:'''.join([如果x中的字母被猜出,'secret'中的x''))' – 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

return关键字退出CA 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'])) 

在这里,你开始与一个空字符串作为结果,或者追加一个字母(如果它被列入名单)或下划线(如果不是),然后返回结果字符串。