2017-02-08 22 views
2

Я пытаюсь расшифровать некоторый текст и хотел написать скрипт Python для этого. Способ шифрования текста заключается в том, что каждая буква сопоставляется букве в алфавите. Я хочу попытаться сопоставить большие слова с английским списком слов, потому что я думаю, что у них очень мало возможностей.Соответствие слов шаблону в Python

Мой вопрос в том, как проверить, соответствует ли слово шаблону, подобному ABCB. Итак, первые три буквы разные, но последняя буква такая же, как и четвертая. Здесь была бы возможность. Я попытался использовать регулярное выражение, но я не могу придумать регулярное выражение, которое делает это для слова длины n. Есть ли у кого-нибудь предложения?

EDIT: меня попросили объяснить шаблон немного больше. В приведенном выше примере каждая буква сопоставляется букве в алфавите. Таким образом, A сопоставляет букву, B переходит к другой букве, C - другой, а последний B - к той же букве, что и первая B. Таким образом, шаблон подскажет вам, какие буквы одинаковы, а какие разные. Вышеприведенный рисунок говорит о том, что первые три буквы различны (A, B и C разные), а последняя буква совпадает с второй (потому что они оба являются B). «Было бы» было бы решением, потому что A будет отображаться в w, B будет отображаться на e, а C будет отображаться на r.

+0

Не могли бы вы опубликовать код, который у вас есть до сих пор? Кроме того, я не уверен, что вы хотите сделать. У вас есть образец ABCB, и если соответствует только последняя буква, это должно быть совпадение? –

+0

Не могли бы вы привести больше примеров того, чего бы вы хотели достичь? – SWLim

+0

У меня пока нет кода. У меня есть список английских слов, которые я могу сопоставить с регулярным выражением. Идея состоит в том, что A сопоставляет букву в алфавите, B отображает другую букву в алфавите, C в другую, а последний B должен быть таким же, как и первый B. Таким образом, шаблон в основном говорит вам, какие буквы те же, которые отличаются друг от друга – Danagon

ответ

3

Вот код доказательства концепции для преобразования слова в его шаблон в предложенном вами формате. (Я не писал это с эффективностью в виду, только ясность).

import string 

def word_to_pattern(word): 
    # Stores actual-letter to pattern-placeholder mapping 
    mapping = {} 

    # ZYXW... so we cap pop letters starting with A from the end 
    available_pattern_letters = list(string.ascii_uppercase)[::-1] 

    pattern = [] 
    for letter in word.upper(): 
     if letter not in string.ascii_uppercase: 
      # for punctuation etc 
      pattern.append(letter) 
      continue 
     if letter not in mapping: 
      # new letter we haven't seen yet in this word 
      mapping[letter] = available_pattern_letters.pop() 
     pattern.append(mapping[letter]) 
    return pattern.join("") 

Тогда это просто вопрос проверки, если word_to_pattern(a) == word_to_pattern(b).

+0

Благодарим за быстрый ответ. Это действительно не очень эффективно, но это определенно метод, который будет работать. благодаря! – Danagon

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

  • Нет связанных вопросов^_^