はじめに
このプロジェクトでは、簡単で広く知られている暗号化技術であるシーザー暗号を実装する方法を学びます。シーザー暗号は、置換法を使って、メッセージ内の英字をアルファベット順で N 文字後または前の文字に置き換えます。
👀 プレビュー
## 例 1
text = "python"; encryption_text = "ravjqp"
## 例 2
text = "pyThon"; encryption_text = "raVjqp"
## 例 3
text = "Python31"; encryption_text = "Ravjqp31"
## 例 4
text = None; encryption_text = None
🎯 タスク
このプロジェクトでは、以下を学びます。
- プロジェクト環境をセットアップし、必要なファイルを作成する方法
- 文字列を構成する各英字を 2 文字分右にシフトするシーザー暗号化関数を実装する方法
- 英字、非英字、null 値など、さまざまな種類の入力を処理する方法
- さまざまな入力例を使ってシーザー暗号化関数をテストする方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- シーザー暗号化技術の基本原理を理解する
- 標準ライブラリやサードパーティライブラリを一切使わずに、Python でシーザー暗号化関数を実装する
- 文字列操作、文字エンコーディング、条件分岐ロジックに関するスキルを磨く
- コードをテストして、プロジェクト要件を満たしていることを確認する
シーザー暗号化を実装する
このステップでは、シーザー暗号化関数を実装します。
caesar_cipher.pyファイルを開きます。caesar_encryption(text)関数を変更して、次の機能を実現します。- 文字列を入力し、文字列内のすべての半角英字を右に 2 文字分シフトします。
- 半角英字以外はそのままにします。
- 文字の大文字小文字は維持されます。たとえば、A は C に変換され、b は d に変換されます。
"""TODO"""コメントを次のコードに置き換えます。
def caesar_encryption(text: str) -> str:
if text is None:
return None
encryption_text = ""
for char in text:
if char.isalpha() and char.isascii():
if char.islower():
encryption_text += chr((ord(char) - ord("a") + 2) % 26 + ord("a"))
else:
encryption_text += chr((ord(char) - ord("A") + 2) % 26 + ord("A"))
else:
encryption_text += char
return encryption_text
このコードは、プロジェクト要件に記載されている通りのシーザー暗号化アルゴリズムを実装しています。
シーザー暗号化をテストする
このステップでは、いくつかのサンプル入力を使ってシーザー暗号化関数をテストします。
caesar_cipher.pyファイルの末尾に次のコードを追加します。
if __name__ == "__main__":
test_input_text = input()
print(caesar_encryption(test_input_text))
caesar_cipher.pyファイルを保存します。- ターミナルを開き、
/home/labex/projectディレクトリに移動します。 - 次のコマンドを使って
caesar_cipher.pyスクリプトを実行します。
python3 caesar_cipher.py
- いくつかのテスト入力文字列を入力し、暗号化された出力を確認します。
要件を検証する
このステップでは、あなたの実装がプロジェクト要件を満たしていることを確認します。
プロジェクト要件を見直し、
caesar_encryption(text)関数が以下のことを行うことを確認します。- 文字列を入力し、文字列内のすべての英字を右に 2 文字分シフトします。
- 半角英字のみを変換し、その他の内容は変更しません。
- 文字の大文字小文字を維持します。たとえば、A は C に変換され、b は d に変換されます。
提供された参照例を使って関数をテストします。
## 例 1
text = "python"; encryption_text = "ravjqp"
## 例 2
text = "pyThon"; encryption_text = "raVjqp"
## 例 3
text = "Python31"; encryption_text = "Ravjqp31"
## 例 4
text = None; encryption_text = None
- 関数がすべてのテストケースを正しく処理することを確認します。
おめでとうございます!あなたはシーザー暗号プロジェクトを完了しました。質問やさらなる支援が必要な場合は、遠慮なくお尋ねください。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を行って練習してください。



