检查字符串的所有字母是否都包含在字母列表中(Python)
我正在尝试用Python写一个可以检查Scrabble(拼字游戏)有效单词的函数。我需要查看一个字母列表中是否包含单词的所有字母,但一旦匹配到一个字母,就不能再使用它了。比如,如果我的单词是'test',而我的字母列表是['t', 'a', 'e', 's'],那么结果应该是False,因为我需要两个't'。
这是我的想法:
def validWord(word, letterList):
for x in word:
if x in letterList:
letterList = letterList.remove(x)
else:
return False
return True
但是在我编译的时候出现了这个错误:TypeError: arument of type 'NoneType' is not iterable
现在我猜测“if x in letterList”这个判断只能运行一次,而不能重复使用。所以我希望有人能给我一些正确的方向。这只是我个人的一个小项目,我打算用这个来制作一个“朋友之间的单词作弊工具”,然后给我的朋友们看看。
谢谢!
1 个回答
3
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