Pythonで文字列の大文字・小文字、Leet変換の全ての組み合わせを得る

先日、sedとブレース展開を用いて文字列の大文字・小文字・Leet変換全ての組み合わせを取得するという処理についてやったが、今回は同じようなことをPythonでやるにはどうすればいいか調べてみた。
Pythonでは、itertoolsというモジュールを使うことで、この組み合わせを簡単に生成できるようだ。

以下のように、組み合わせとなる文字列をリストに入れておき、それを利用することでリストが取得できる。

●leetlist.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from itertools import product

def getLeetList(string):
    leet = ["Aa@",
            "Bb",
            "Cc",
            "Dd",
            "Ee",
            "Ff",
            "Gg",
            "Hh",
            "Ii1",
            "Jj",
            "Kk",
            "Ll1",
            "Mm",
            "Nn",
            "Oo0",
            "Pp",
            "Qq9",
            "Rr",
            "Ss",
            "Tt",
            "Uu",
            "Vv",
            "Ww",
            "Xx",
            "Yy",
            "Zz2"]
    getPlaces = lambda string: [leet[ord(el.upper()) - 65] for el in string]

    for letters in product(*getPlaces(string)):
        yield "".join(letters)

input_line = sys.stdin.readlines()
for line in input_line:
    for s in getLeetList(line.rstrip('\n')):
        print s
Sponsored Links

blacknon@BS-PUB-DEVELOP:~$ echo -e "abc\ndef" | ./leetlist.py
ABC
ABc
AbC
Abc
aBC
aBc
abC
abc
@BC
@Bc
@bC
@bc
DEF
DEf
DeF
Def
dEF
dEf
deF
def

 


Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*