需要帮助用Python编写单词查找器

0 投票
3 回答
1716 浏览
提问于 2025-04-17 02:43

你好,我有一个关于Python的问题,我还是个新手:

我有一个文本文件,里面有大约23000个按字母顺序排列的单词,就像一个小字典一样。每一行都是一个单词。

我需要写一个程序,要求用户输入九个字母,然后这个程序要重新排列这些字母,找出文本文件中所有符合这九个字母组合的单词。

我在编写这个程序时遇到了一些困难,希望能得到一些帮助。

这是我目前的代码:

Nian = raw_input ("Type in nine letters :")

filename = "dictionary.txt"
fil = open(filename, "r")

lines = fil.read()

tx4 = lines.strip()

a = Nian[0]    
b = Nian[1]      
c = Nian[2]       
d = Nian[3]       
e = Nian[4]    
f = Nian[5]      
g = Nian[6]    
h = Nian[7]     
i = Nian[8]

for w in lines[0:23005]:
       if a or b or c or d or e or f or g or h or i in lines:
       print w 

3 个回答

0

接下来该怎么做:

  1. 把文件内容读入一个集合(set())对象中。如果你用的是文件对象的 readlines() 方法,记得把每行末尾的 '\n' 去掉。
  2. 遍历所有的排列组合,可以使用 这个链接里的工具,检查这些排列组合中有没有在你的集合里。可能需要把元组(tuple)转换成字符串,使用 strjoin 方法会很有帮助。

你知道有 9! = 362880 种排列组合吗?

0

我首先想到的是集合。

这可能不是最理想的解决方案,但应该能解决问题:

match_letters = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'}
for line in file:
    line = line.strip()
    line_letters = set(line)
    # test whether any letter from match_letters is in line_letters
    if line_letters & match_letters:
        print(line)

或者,如果我理解错了,你是在寻找包含所有九个字母的单词:

    if line_letters >= match_letters:
        print(line)

或者,如果你是在寻找仅仅包含这九个字母的单词:

    if line_letters <= match_letters:
        print(line)
2

如果我们要找的正好是那9个字母的组合,我们可以用一个小技巧。与其生成所有可能的排列然后一个个检查,不如直接用Python自带的 sorted 函数把这些单词按字母顺序排列,然后比较结果。

这里的“技巧”就是要明白你其实是在找这9个字母的变位词。例如,'terse' 和 'reset' 是彼此的变位词,但如果你把它们排序,都会变成 'eerst'。

即使你不需要完全匹配,这个技巧也可以帮助你进行一些优化。

至于程序的其他部分,如果你找一些关于用Python读取文本文件的基础教程,我相信你能顺利搞定剩下的内容。祝你好运!

撰写回答