-
Notifications
You must be signed in to change notification settings - Fork 0
/
008.py
executable file
·43 lines (33 loc) · 1.36 KB
/
008.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
def cipher(s):
# re.sub(pattern, repl, string[, count, flags])
# string 内の pattern を repl で置換する.
# repl は関数でもよい.この関数は 1 つの MatchObject を引数にとり,
# 置換文字列を返す.matchobj.group(0) でマッチ全体を参照できる.
#
# ord(c)
# c が unicode 文字列の場合,Unicode コードポイントを表す整数を返す.
# c が 8 ビット文字列の場合,そのバイトの値を返す.
# 日本語を使わなければ単に ASCII コードを返すものと考えて差し支えない.
#
# chr(i)
# ASCII コードが i となるような文字を返す.ord() の逆.
return re.sub(r'[a-z]', lambda m: chr(219 - ord(m.group(0))), s)
def main():
"""08. 暗号文
与えられた文字列の各文字を,以下の仕様で変換する関数cipherを実装せよ.
- 英小文字ならば(219 - 文字コード)の文字に置換
- その他の文字はそのまま出力
この関数を用い,英語のメッセージを暗号化・復号化せよ.
"""
s = 'This is a test.'
print s
print cipher(s)
print cipher(cipher(s))
# This is a test.
# Tsrh rh z gvhg.
# This is a test.
if __name__ == '__main__':
main()