这是代码(作业),这段代码是正确的,但是我玩了第二次尝试,但我不知道我的理解是否正确:
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。这是对的吗?
谢谢!
答案 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)
),因此许多成员资格检查调用会超过构建集合的成本。
通常在这些边缘优化中 - 强烈建议在进行任何更改之前进行分析。