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$5",
"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

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

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

*