【Python】言語処理100本ノック2020 08. 暗号文
問題
与えられた文字列の各文字を,以下の仕様で変換する関数cipherを実装せよ. 英小文字ならば(219 - 文字コード)の文字に置換 その他の文字はそのまま出力 この関数を用い,英語のメッセージを暗号化・復号化せよ.
環境
Macbook Pro
Python3.7.7
コード
def cipher(sentense): secretList = list() for word in sentense: if word.islower(): secretList.append(chr(219 - ord(word))) else: secretList.append(word) return "".join(secretList) sentense = input("英語で文章を入力してください >>") print(cipher(sentense)) ''' <出力イメージ> 英語で文章を入力してください >>I live in Tokyo I orev rm Tlpbl '''
説明-文字コードについて
今回キーとなるワードは「文字コード」。
Pythonで文字コードを得るには、ordが使えるようで、文字コードから文字に直すにはchrが使えるようです。
環境がPython3とPython2では微妙に書き方が違うので注意。
また、この際得られる文字コードはASCIIです。
説明-関数の処理について
お題の通り、cipherという関数を定義します。
まずリストを作成します。
ちょうどこの部分ですね。
def cipher(sentense): secretList = list()
引数にコマンドライン入力された文字列を受け取っており、
その文字列をfor文で単語を取り出すという作業をしております。
問題なのが「小文字」の判定。 ですがPythonには簡単に文字列を大文字小文字に変換したり、判定するメソッドが備わっています。
print('TOKYO.isupper()) # True
といった感じです。 これを応用して、あとは問題の通り、「英小文字ならば(219 - 文字コード)の文字に置換」するだけになります。
for word in sentense: if word.islower(): secretList.append(chr(219 - ord(word))) else: secretList.append(word)
小文字以外であれば、そのまま単語をリストに加えるだけです。
return "".join(secretList)
あとはjoinで文字列のリストを連結すれば完成です!
もっと他にいい書き方があれば、ぜひ教えて下さい!!