for循环只遍历第一个字母

时间:2016-10-07 23:10:35

标签: python debugging for-loop

我的循环似乎迭代了第一个字母,然后打破了虽然它应该遍历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']))

2 个答案:

答案 0 :(得分:2)

第一次迭代中来自函数的returnreturn 结束一个函数,然后,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

答案 1 :(得分:0)

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

在这里,你以一个空字符串作为结果,并附加一个字母(如果它包含在列表中)或下划线(如果不是),然后返回结果字符串。