MikiTech

文系新卒エンジニアの学習記録

【Python】言語処理100本ノック2020 08. 暗号文

問題

nlp100.github.io

与えられた文字列の各文字を,以下の仕様で変換する関数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が使えるようです。

python.civic-apps.com

環境がPython3とPython2では微妙に書き方が違うので注意。
また、この際得られる文字コードASCIIです。

説明-関数の処理について

お題の通り、cipherという関数を定義します。
まずリストを作成します。 ちょうどこの部分ですね。

def cipher(sentense):
   secretList = list()

pycarnival.com

引数にコマンドライン入力された文字列を受け取っており、
その文字列をfor文で単語を取り出すという作業をしております。

問題なのが「小文字」の判定。 ですがPythonには簡単に文字列を大文字小文字に変換したり、判定するメソッドが備わっています。

note.nkmk.me

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で文字列のリストを連結すれば完成です!

note.nkmk.me

もっと他にいい書き方があれば、ぜひ教えて下さい!!