【问题标题】:need help with programming a word finder in python需要帮助在 python 中编写单词查找器
【发布时间】:2011-09-20 19:10:46
【问题描述】:

嗨,我有一个关于 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 

【问题讨论】:

  • 你写过代码吗?这是一个“教你钓鱼,而不是卖你鱼”的网站。首先,在 python 中,查看itertools 包中的实用函数,这些函数会生成诸如排列之类的东西。
  • 如果您需要使用所有九个字母,这很容易。只需对它们进行排序,对每个单词的字母进行排序,然后进行比较。如果您可以使用少于九个,则比较会有点困难,但不会太多。
  • @ericcoo:编辑您的问题以包含您刚刚写的内容。
  • @ericcoo:另外,在清理您的问题时,请在每个句子的开头使用大写字母。并使用大写“I”来指代自己。标准的写得好的英语真的很有帮助。

标签: python list-manipulation


【解决方案1】:

因此,如果它是这 9 个字母的完全匹配,我们可能会有点棘手。无需创建所有这些排列并检查每个排列,只需使用 python 内置 sorted 函数 (doc) 将单词按字母顺序排序并比较结果。

这里的“诀窍”是意识到您正在寻找这 9 个字母的字谜。例如, 'terse' 和 'reset' 是彼此的字谜,但如果你对它们进行排序,它们都会变成 'eerst'。

即使您不是在寻找精确匹配,您仍然可以使用此技巧进行优化。

至于程序的其余部分,如果您寻找一些有关使用 python 读取文本文件的基本教程,我相信您将能够完成其余部分。祝你好运!

【讨论】:

  • 是的,这是最简单最有效的方式。生成所有排列不是要走的路。如果你有 20 个字母呢? 20! = 一个非常大的数字,算法将永远持续下去,但这个解决方案仍然可以正常工作。
【解决方案2】:

这里是如何进行的:

  1. 将文件读入 set() 对象,如果您使用file 对象的readlines() 方法,请不要忘记删除行尾的'\n'
  2. 遍历所有排列,使用http://docs.python.org/library/itertools.html#itertools.permutations 并检查这些排列之一是否在您的集合中。也许您必须将元组映射到字符串,使用strjoin 方法会很有帮助。

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

【讨论】:

  • 生成所有排列是一种非常低效的查找字谜的方法。请参阅我上面的评论。
  • 嗯,谢谢,但这不是我的主意。我在 Programming Pearls 中读到它。
【解决方案3】:

首先映入我脑海的是布景。

这可能不是理想的解决方案,但应该可以完成工作:

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)

OR,如果我理解错了,而您正在寻找包含 ALL 九个字母的单词:

    if line_letters >= match_letters:
        print(line)

OR,如果您正在寻找包含ONLY这九个字母的单词:

    if line_letters <= match_letters:
        print(line)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多