Я создал решатель анаграмм на Python 2.7, который принимает ввод, находит все его перестановки, а затем проверяет, соответствует ли он какому-либо слову в этот текстовый файл словаря. Работает очень хорошо, но есть одна проблема. Он не только дает точные совпадения, но и дает совпадение, когда анаграмма является лишь частью слова в текстовом файле.
Пример:
Введите зашифрованное слово: python
Возможное слово: ypnoth
Возможное слово: питон
Возможное слово: гипнот
Это происходит потому, что некоторые слова, такие как гипнотизер или гипнотик, содержат гипноз. Анаграмму по-прежнему легко решить с этой ошибкой, но я хочу, чтобы программа была максимально простой.
# import permutations module
from itertools import permutations as prm
# take input
scrambled_word = list(str(raw_input("Input scrambled word: ")))
# empty lists that will be appended to later
prm_list = []
possible_words = []
# takes each permutation of the input and puts in a list
for i in prm(scrambled_word):
prm_list.append("".join(i))
def check(x, y):
# open list of words
dictionary = file('E:\MRP\Text_Files\dictionary.txt')
# check each line in the dictionary against each item
# in the list of permutations and add it to another empty list if it's a match
for line in dictionary:
for i in x:
if i in line:
y.append(i)
check(prm_list, possible_words)
# delete duplicates
possible_words = list(set(possible_words))
# print out possible words
for i in possible_words:
print "Possible Word: " + i
Как я мог распечатать только точные совпадения при сравнении перестановок и словаря? Я попробовал оператор ==
в функции check
, но это сделало программу хуже.
==
должно работать. Если он не работает для точных совпадений, возможно, при извлечении из файла может быть какой-то пробельный символ. Попробуйтеline.strip()
, прежде чем сравнивать его с чем-либо - person Kamehameha   schedule 24.12.2014