Python 单词表
我想把输入的字母(字典)和一个单词列表(文本文件里的单词)进行比较,然后打印出与输入字母匹配的单词。我哪里做错了呢?(我知道目前的代码只是在找到匹配单词时打印“YES”或“NO”。顺便问一下,怎么才能更好地创建这个功能呢?)
def ordlista(list):
fil = open("ord.txt", "r")
words = fil.readlines()
list = []
for w in words:
w = w.strip()
list.append(w)
return list
chars = {}
word = raw_input("Write 9 letters: ")
for w in word:
w = w.lower()
if w not in chars:
chars[w] = 1
else:
chars[w] += 1
if chars.keys() in ordlista(list):
print "YES"
else:
print "NO"
3 个回答
1
使用 集合:
chars = set(raw_input("Write 9 letters: "))
for word in ordlista(None):
if(set(word) == chars):
print "YES for '%s'" % word
顺便说一下,传给 ordlista
的参数 list
是多余的,因为它没有被使用。我还建议不要使用 list
这个名字,因为它会遮盖掉 Python 内置的 <type 'list'>
。
更新:我看了你在 jellybean 的帖子上的评论。如果每个字母只能用一次,那显然不能使用集合!
2
你现在是在检查你的字符列表中是否包含所有的键,而不是一个一个地检查每个键。你需要逐个遍历你的键,然后检查它们是否存在。
for k in chars:
if k in ordlista(list):
print "YES"
else:
print "NO"
如果你想打印出只由你字符列表中的字母组成的单词,可以使用以下的方法。
for word in ordlista(list):
if not filter(lambda char: char not in chars, word):
print word
2
chars.keys()
是一个列表,所以
chars.keys() in ordlista(list):
这个条件永远不会成立。你想要的是把字母的数量和你列表中的每个单词进行比较。所以我建议你可以这样做:
charsum = sum(chars.values())
for word in wordlist:
if len(word) == charsum and all([(word.count(c) == chars[c]) for c in chars]):
print "YES for word '%s'" % word
补充说明:如果你想找那些字母数量“至少”符合的单词(比如一个有3个字母a的单词可以匹配输入的2个字母a),那么你需要把 ==
改成 >=
。
补充说明2:因为你想要完全匹配,所以最简单的办法就是数一下字母的数量,确保单词的长度和这个数量一致。