该计划如何以及何时达到"返回True"?

时间:2018-05-24 22:37:14

标签: python python-3.x

这是代码(作业),这段代码是正确的,但是我玩了第二次尝试,但我不知道我的理解是否正确:

def isWordGuessed(secretWord, lettersGuessed):
    '''
    secretWord: string, the word the user is guessing
    lettersGuessed: list, what letters have been guessed so far
    returns: boolean, True if all the letters of secretWord are in lettersGuessed;
      False otherwise
    '''
    # FILL IN YOUR CODE HERE...
    for i in secretWord:
        if i not in lettersGuessed:
            return False
    return True

因此,如果返回True在循环之外,如果secretWord中的每个字母都在那里,它将只返回True,但是如果缺少一个字母,它将立即返回False。这是对的吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

对 - 这相当于:

all(lett in lettersguessed for lett in secretword)

请注意,由于列表(或字符串)的成员资格测试为O(n),因此如果secretword的{​​{1}}比lettersguessed要大,则可以更快:

def is_word_guessed(secretword, lettersguessed):
    guessed_set = set(lettersguessed)
    return all(lett in guessed_set for lett in secretword)

这是因为测试集合中的成员资格是在恒定时间内完成的(O(1)),因此许多成员资格检查调用会超过构建集合的成本。

通常在这些边缘优化中 - 强烈建议在进行任何更改之前进行分析。