python 言語処理100本ノック -第1章: 準備運動- 08. 暗号文

設問

与えられた文字列の各文字を,以下の仕様で変換する関数cipherを実装せよ.
英小文字ならば(219 – 文字コード)の文字に置換
その他の文字はそのまま出力
この関数を用い,英語のメッセージを暗号化・復号化せよ.

“暗号化”、”復号化”という名目になっていますが、今回のポイントはord関数とchr関数の使い方です。
1)ord関数
引数で指定した文字列のアスキーコードを取得します。
2)chr関数
引数で指定したアスキーコードから文字を取得

10行目の「chr(219 – ord(val))」が今回の使用箇所です。
ord関数で変換したアスキーコードを219から減算します。(暗号化)
減算した結果をchr関数で再び文字列を取得しています。(復号化)

#coding: utf-8

def cipher(target):
    result = ''
    for val in target:
        #半角小文字の場合
        if val.islower():
            #ord:ユニコードを数値に
            #chr:数値をユニコードに
            result += chr(219 - ord(val))
        else:
            result += val

    return result

val = 'Diet lowers age of adulthood to 18 from 20'

result = cipher(val)
result2 = cipher(result)

print('元の値:' + val)
print('暗号化:' + result)
print('復号化:' + result2)


実行結果


元の値:Diet lowers age of adulthood to 18 from 20
暗号化:Drvg oldvih ztv lu zwfogsllw gl 18 uiln 20
復号化:Diet lowers age of adulthood to 18 from 20

開発環境

Windows10
Python 3.7.3
Visual Studio Code 1.33.1

言語処理100本ノック 公式

言語処理100本ノック 2015