我正在尝试在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 letterList中的x”只能运行一次,而不能迭代。因此,现在我希望有人可以向我推向正确的方向。就我而言,这只是为了娱乐,我将使用它来创建“与好友作弊的单词”并向我的朋友们展示。
谢谢!
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句