u++の備忘録

言語処理100本ノック 2020「08. 暗号文」

問題文

nlp100.github.io

問題の概要

文字の文字コードを得るには「ord()」を使います。逆に文字コードから文字を得る場合は「chr()」です。「print(ord(a), ord(z))」として、英小文字が取りうる文字コードの範囲を調べ、条件分岐に盛り込みましょう。

「''.join(リスト)」とすることで、リストを文字列として結合できます。

問題文からは読み取りづらいですが、219-122=97であり、暗号化も復号も同じ関数で処理できます。

def cipher(text):
    text = [chr(219 - ord(w)) if 97 <= ord(w) <= 122 else w for w in text]
    return ''.join(text)


text = 'this is a message.'
ans = cipher(text)
print(ans)
ans = cipher(ans)
print(ans)