我正在尝试在Python中编写一个Scrabble有效字检查函数。我需要查看列表中是否包含单词中的所有字母,但是一旦我匹配字母,我就不能再使用它了。因此,如果我的单词是'test'而且我的列表是['t','a','e','s'],那么它应该返回False,因为我需要2 t。
这是我的想法:
def validWord(word, letterList):
for x in word:
if x in letterList:
letterList = letterList.remove(x)
else:
return False
return True
但是编译时我遇到了这个错误: TypeError:'NoneType'类型的arument不可迭代
现在我猜测“if letter in letterList”只能运行一次而不能迭代。所以现在我希望有人能给我一个正确的方向。这只是为了我的乐趣,我打算用它来创建一个“与朋友骗子的话”,并向我的朋友们展示。
谢谢!
答案 0 :(得分:1)
list.remove
返回None
,您将其分配给letterList
。在下一次迭代中,它变为if x in None
,其中in
运算符尝试迭代None
并因该错误而失败。所以,改变
letterList = letterList.remove(x)
到
letterList.remove(x)
你可以像这样解决这个问题
from collections import Counter
def validWord(word, letterList):
word2, word1 = Counter(word), Counter(letterList)
return all(word2[k] <= word1.get(k, 0) for k in word2)
print validWord("test", ["t", "a", "e", "s"]) # False
print validWord("test", ["t", "e", "t", "s"]) # True