2013-06-16 2 views
0

Эта программа сгенерирует список комбинаций букв и проверит, являются ли они английскими словами, но программа оставляет несколько слов, я проверил файл словаря и слова были там, но все же не были на выходе, Скажите, пожалуйста, почему программа оставляет много результатов, таких как homecornbarn и так далее.слова были опущены

import itertools 
#http://www.puzzlers.org/pub/wordlists/engwords.txt 

with open('/Users/kyle/Documents/english words.txt') as word_file: 
    english_words = set(word.strip().lower() for word in word_file if len(word.strip()) == 4) 

for p1 in itertools.combinations('abcdefghijklmnopqrstuvwxyz', 4): 
    word = ''.join(p1) 
    if word in english_words: 
     print '{} is {}'.format(word, word in english_words) 

Это словарь, который я использую http://www.puzzlers.org/pub/wordlists/engwords.txt

+0

здесь вы должны использовать 'itertools.product'. –

ответ

1

Вы ищете product (Cartesian product), не combinations (который не даст слова, чьи письма не в алфавитном порядке, или иметь дубликат буквы):

import string 

for letters in itertools.product(string.ascii_lowercase, repeat=4): 
    word = ''.join(letters) 

    if word in english_words: 
     print word 

Вы также могли бы использовать кортежи вместо строк, которые должны ускорить этот процесс:

import string 
from itertools import product 
#http://www.puzzlers.org/pub/wordlists/engwords.txt 

with open('/Users/kyle/Documents/english words.txt', 'r') as word_file: 
    english_words = set(tuple(word.strip().lower()) for word in word_file if len(word.strip()) == 4) 

words = english_words.intersection(product(string.ascii_lowercase, repeat=4)) 
+0

Это решает проблему, спасибо. –

Смежные вопросы