Python 单词表

2 投票
3 回答
1420 浏览
提问于 2025-04-17 02:35

我想把输入的字母(字典)和一个单词列表(文本文件里的单词)进行比较,然后打印出与输入字母匹配的单词。我哪里做错了呢?(我知道目前的代码只是在找到匹配单词时打印“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:因为你想要完全匹配,所以最简单的办法就是数一下字母的数量,确保单词的长度和这个数量一致。

撰写回答