Golang で ROT13 を書いたので、ついでに Python 版も書いてみる。
先に断っておくと、Python の場合 ROT13 は言語に組み込みで実装があるので、本来は自分で書く必要がない。
>>> import codecs >>> codecs.decode('Uryyb, Jbeyq!', 'rot13') 'Hello, World!'
自分で書いたバージョンは次の通り。 ジェネレータ内包表記で文字列に ROT13 を適用しているところがポイントかな。
#!/usr/bin/env python # -*- coding: utf-8 -*- def _rot13(c): if 'A' <= c and c <= 'Z': # 13 文字分ずらす return chr((ord(c) - ord('A') + 13) % 26 + ord('A')) if 'a' <= c and c <= 'z': # 13 文字分ずらす return chr((ord(c) - ord('a') + 13) % 26 + ord('a')) # その他の文字は対象外 return c def rot13(s): # ジェネレータ内包表記で文字列に ROT13 を適用する g = (_rot13(c) for c in s) # 文字列に直す return ''.join(g) def main(): s = 'Uryyb, Jbeyq!' print(rot13(s)) if __name__ == '__main__': main()
実行結果は次の通り。
$ python rot13.py Hello, World!
ばっちり。
スマートPythonプログラミング: Pythonのより良い書き方を学ぶ
- 作者: もみじあめ
- 発売日: 2016/03/12
- メディア: Kindle版
- この商品を含むブログを見る