← クエスト一覧

クエスト71:シーザー暗号

スライド 1 / 5
コーデ
💻 コード例
実行結果
← クエスト一覧
🐍 Python / Quest 71 / 85

クエスト71:シーザー暗号

発展 +10 XP
🏠
今回の課題
文字を shift 文字ずらす caesar(text, shift) を作って、'Hello' を3ずらした結果と、それを元に戻した結果を表示しよう。
📖 解説を見る
🔐 シーザー暗号って何?

アルファベットを一定数ずらして暗号化する、古代ローマ発祥の暗号です。'Hello' を3文字ずらすと 'Khoor' になります(H→K, e→h, ...)。

✏️ 1文字をずらす手順:
ord() は文字を数値に、chr() は数値を文字に変換します。1文字 c をずらすには、次の4段階で考えます。
① 大文字なら ord('A')、小文字なら ord('a') を「基準」として決める
ord(c) から基準を引く → アルファベットの何番目か(0〜25)が出る
③ そこに shift を足し、% 26 で 0〜25 の輪に収める(Z の次が A に戻る)
④ 基準を足しもどして chr() で文字にする
大文字か小文字かは c.isupper() で調べられます。

📋 作るもの:
・関数名は caesar、引数は text(文字列)と shift(ずらす数)
text を1文字ずつ上の手順でずらし、つなげた文字列を返す
caesar('Hello', 3)'Khoor'caesar('Khoor', -3)'Hello'

💡 どこで使う?

暗号そのものより、ord() / chr() で「文字と数値を行き来する」技術がポイントです。文字コードを扱う、簡単な符号化、文字を1つずつずらす処理など、文字を数として計算したい場面の基礎になります。

⚠️ ポイント:
ord('a')=97, chr(97)='a'(文字↔数値)
% 26 でアルファベットの輪をぐるっと回す
shift をマイナスにすると元に戻せる
ヒントを見る
空の文字列を用意して、for で1文字ずつ処理しては += でつないでいこう。基準は大文字と小文字で変える(c.isupper() で判定)。% 26 を入れ忘れると Z の次で記号になってしまうよ。
期待する出力
Khoor
Hello
📄 見本
「答えを見る」を押すと、お手本のコードが出ます。クリックでコピーできます。
💻 コードエディタ
実行すると結果がここに表示されます
正解!見本と同じになりました。
次へ →
🏠 ホームへ

れんしゅうもんだい

☑ 0 / 3 正解 レッスンに戻る

全問正解でクエストクリア!

未挑戦

問題 1: 'Python' を 1 文字ずらして表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
Qzuipo
未挑戦

問題 2: 'Khoor Zruog' を -3 でデコードして表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
Hello World
未挑戦

問題 3: 'abc' を 25 文字ずらした結果を表示しよう!(z の次は a に戻る)

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
zab
コピーしました!