質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

2401閲覧

シーザー暗号を解く関数を作りたい

saldjawoig

総合スコア13

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/06/05 01:31

シーザー暗号は指定された文字数だけ文字をシフトする(今回の場合はアルファベット)暗号です。その暗号を第1引数に文字列、第2引数にシフトする数を渡して暗号を解く関数を作りたいです。
教えていただければ嬉しいです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2018/06/05 01:38

どこまでコードを書きましたか? できているところまでで良いので、cipherさんのコードを質問に追加してください。
guest

回答4

0

そのおっしゃっていることをそのままコードに書けばいいだけ、のはなしです。
で、なにがわからないのでしょうか

投稿2018/06/05 01:42

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2018/06/05 01:52

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

答えだけ。

python

1from string import ascii_letters as chars 2nchars = len(chars) 3encrypt = lambda source, shift: ''.join( 4 c in chars and chars[(chars.index(c) + shift) % nchars] or c 5 for c in source) 6print(encrypt('Hello, world!', 100))

投稿2018/06/05 02:07

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

それなりに見た目がわかりやすいことを重視して書いてみました。要所にはコメントも入れてあるので、理解できると思います。

python

1char_ui_dict = {c:i 2 for i, c in 3 enumerate("ABCDEFGHIJKLMNOPQRSTUVWXYZ")} 4char_li_dict = {c:i 5 for i, c in 6 enumerate("abcdefghijklmnopqrstuvwxyz")} 7char_iu_dict = {v:k 8 for k,v in char_ui_dict.items()} 9char_il_dict = {v:k 10 for k,v in char_li_dict.items()} 11 12""" 13print(char_ui_dict) 14print(char_li_dict) 15print(char_iu_dict) 16print(char_il_dict) 17=> 18{'F': 5, 'G': 6, 'D': 3, 'V': 21, 'C': 2, 'U': 20, 'A': 0, 'O': 14, 'W': 22, 'Z': 25, 'S': 18, 'R': 17, 'X': 23, 'J': 9, 'M': 12, 'I': 8, 'Y': 24, 'P': 15, 'N': 13, 'T': 19, 'L': 11, 'K': 10, 'Q': 16, 'B': 1, 'H': 7, 'E': 4} 19{'d': 3, 'l': 11, 'p': 15, 'm': 12, 'b': 1, 'z': 25, 'u': 20, 'c': 2, 'i': 8, 'j': 9, 'y': 24, 'q': 16, 'h': 7, 'w': 22, 'o': 14, 'n': 13, 'x': 23, 'k': 10, 'g': 6, 't': 19, 'f': 5, 'a': 0, 'v': 21, 'r': 17, 's': 18, 'e': 4} 20{0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F', 6: 'G', 7: 'H', 8: 'I', 9: 'J', 10: 'K', 11: 'L', 12: 'M', 13: 'N', 14: 'O', 15: 'P', 16: 'Q', 17: 'R', 18: 'S', 19: 'T', 20: 'U', 21: 'V', 22: 'W', 23: 'X', 24: 'Y', 25: 'Z'} 21{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g', 7: 'h', 8: 'i', 9: 'j', 10: 'k', 11: 'l', 12: 'm', 13: 'n', 14: 'o', 15: 'p', 16: 'q', 17: 'r', 18: 's', 19: 't', 20: 'u', 21: 'v', 22: 'w', 23: 'x', 24: 'y', 25: 'z'} 22""" 23 24alpha_n = 26 25 26def cshift(c, shift_n): 27 if c in char_ui_dict: 28 code = char_ui_dict[c] + shift_n 29 return char_iu_dict[code%alpha_n] # 1%26 => 1, 2%26 => 2, 28%26 => 2, -3%26 => 23 30 elif c in char_li_dict: 31 code = char_li_dict[c] + shift_n 32 return char_il_dict[code%alpha_n] 33 else: 34 return c 35 36def caesar(string, shift_n): 37 return "".join([cshift(c, shift_n) for c in string]) # "".join(["h", "o", "g", "e"]) => "hoge" 38 39def code(string, shift_n): 40 return caesar(string, shift_n) 41 42def decode(string, shift_n): 43 return caesar(string, -shift_n) 44 45print(code("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 3)) 46print(decode(code("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 3), 3)) 47""" => 48DEFGHIJKLMNOPQRSTUVWXYZABCdefghijklmnopqrstuvwxyzabc 49ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 50"""

投稿2018/06/05 04:38

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/06/05 04:40

そして書いている間に解決・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問