循环浏览文件列表,并针对一个9个字母的单词

时间:2017-02-25 15:25:01

标签: python file

我正在为学校做一个简单的python项目,涉及用户试图在30秒内从9个字母的随机池中找​​到最长的真实单词。通过循环使用英语中许多单词的文件(它有114,000个单词,可能不包括所有单词),可以很容易地测试用户的答案是否是真实的单词。事实上,这需要一瞬间才能运行。

但是,为了检查随机字母池是否有完整的“解决方案”(9个字母的真实单词),除了测试9个字母的每个单独排列外,我想不出什么单词池对文件中的每个单词。问题是,效率非常低,大约需要7分钟。毕竟,考虑到有9个! anagram的(阶乘)排列,并且“随机”模块不排除先前的排列,并且文件中有许多单词,计算机必须通过超过500亿次比较。最后,没有找到(使用'幸福'的字谜)这个词。这是我试过的代码:

# python 3.5.2

import random

anagram = ['p','s','h','a','i','s','n','p','e'] # anagram of hapiness


with open('wordlist.txt') as in_file:
    for line in in_file:
    line = line.rstrip() 
    shuffledList = random.sample(anagram, len(anagram)) # randomise order
    shuffledWord = ''.join(shuffledList) # make it a string
    if shuffledWord == line:
        print("YES") # (never happens)
        break

除了实际产生解决方案的代码之外,我正在寻找某种聪明的算法解决方案/线程技术/绝对任何东西,它可以在30秒或更短的时间内找到9个字母的字谜的原始单词。这看起来真的很牵强,但我认为值得一试。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

以下是anagrams的小线索:排序后它们是相同的列表。 你可以试试这样的东西:

>>> def is_anagram(word_one, word_two):
...     return sorted(word_one) == sorted(word_two)
...
>>> print(is_anagram('ranagam', 'anagram'))
True