2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python3なら4行で単一換字式暗号化プログラムができた

Last updated at Posted at 2021-11-04

(追記)fsdさんからコメントをいただき、それを参考にしたら、3行でコードが書けた。下のコメント欄に載せました。

(元記事)
 ITエンジニア向け転職・就活・学習サービスサイトのスキルチェック問題に挑戦するなかで、「単一換字式暗号」がでてきた。(単一換字式暗号については、ググってください。)

 最初に提出したコードはforifを多用していたので、満足のいくものはでなかった。そこで何種類か考えたなかで、次のコードは初心者なりにうまくできたと思った。

plain  = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz' # 平字
cipher = 'czQPHLsU rneVdEKfvyWSwIGCZqgoFBxtTiklDaOJRjNbAhmYMupX' # 暗字

# 換字表の作成
table = [i for i in range(128)]
for i in range(len(plain)):
  table[ord(plain[i])] = ord(cipher[i])

# 暗号化
text = ''
for c in input():
  text += chr(table[ord(c)])
print(text)


# 入力例
# This is a pen

# 出力例
# WikAqkAqgqjxJ

(復号するときは、7行目のplaincipherを入れ替えて、table[ord(cipher[i])] = ord(plain[i])に変更する。)

 しかし、@KatsunoriNakamuraさんの「Pythonのテキスト作りました」からテキストをダウンロードさせていただき、勉強するなかで、str.maketrans()str.translate()を使えば、4行でコードが書けることに気づきました。自己流はだめですね。

plain  = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz' # 平字
cipher = 'czQPHLsU rneVdEKfvyWSwIGCZqgoFBxtTiklDaOJRjNbAhmYMupX' # 暗字
table = str.maketrans(plain, cipher)  # 換字表
print(input().translate(table)) # 暗号化

(やはり、復号するときは、3行目のplaincipherを入れ替えて、table = str.maketrans(cipher, plain)に変更する。)

2
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?