需要帮助用Python编写单词查找器
你好,我有一个关于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
接下来该怎么做:
- 把文件内容读入一个集合(set())对象中。如果你用的是文件对象的
readlines()
方法,记得把每行末尾的'\n'
去掉。 - 遍历所有的排列组合,可以使用 这个链接里的工具,检查这些排列组合中有没有在你的集合里。可能需要把元组(tuple)转换成字符串,使用
str
的join
方法会很有帮助。
你知道有 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读取文本文件的基础教程,我相信你能顺利搞定剩下的内容。祝你好运!