隠書暗号化の実装とテスト

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、完全なメッセージを 3 つの部分に分割し、それぞれを別々に受信者に届ける方法である隠書暗号化アルゴリズムを実装する方法を学びます。この暗号化技術は、古代において、1 人の使い手が敵に捕らえられた場合でも情報漏えいを防ぐために使用されていました。

👀 プレビュー

## 例1

## 例2

## 例3

## 例4

🎯 タスク

このプロジェクトでは、以下を学びます。

  • 隠書暗号化のルールに従って、与えられたテキストを複数の部分に分割する yin_book_encryption 関数を実装する方法。
  • さまざまな入力例を使って yin_book_encryption 関数をテストする方法。
  • yin_book_encryption 関数とヘルパー関数である calculate_length 関数の実装を理解する方法。

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • 隠書暗号化アルゴリズムの概念を理解する。
  • yin_book_encryption 関数を実装してメッセージの暗号化と復号化を行う。
  • さまざまな入力シナリオで yin_book_encryption 関数をテストする。
  • yin_book_encryption 関数を変更して特定の要件に合わせる。

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/while_loops("While Loops") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") subgraph Lab Skills python/strings -.-> lab-302786{{"隠書暗号化の実装とテスト"}} python/while_loops -.-> lab-302786{{"隠書暗号化の実装とテスト"}} python/lists -.-> lab-302786{{"隠書暗号化の実装とテスト"}} python/function_definition -.-> lab-302786{{"隠書暗号化の実装とテスト"}} python/file_reading_writing -.-> lab-302786{{"隠書暗号化の実装とテスト"}} end

yin_book_encryption 関数を実装する

このステップでは、yin_book.py ファイルに yin_book_encryption 関数を実装して、必要な機能を達成します。

  1. 好きなコードエディタで yin_book.py ファイルを開きます。

  2. 以下の要件に従って yin_book_encryption 関数を実装します。

    • 関数は文字列 text を入力として受け取り、暗号化された部分のリストを返す必要があります。
    • 最初の部分の長さは 1、2 番目の部分は 1 + 2、3 番目の部分は 1 + 2 + 3 となり、テキストが完全に分割されるまで続けます。
    • 入力テキストが空の場合、関数は None を返す必要があります。
    • 空白は 1 文字として数えます。

以下は、yin_book_encryption 関数を実装するために使用できるコードです。

def yin_book_encryption(text: str) -> list:
    """
    隠書暗号化のルールに従って、与えられたテキストを暗号化します。

    Args:
        text (str): 暗号化するテキスト。

    Returns:
        list: テキストの暗号化された部分のリスト。

    """

    def calculate_length(index):
        """
        与えられたインデックスに基づいて、各部分の長さを計算します。

        Args:
            index (int): 部分のインデックス。

        Returns:
            int: 部分の長さ。

        """
        return index * (index + 1) // 2

    if not text:
        return None

    encryption_text = []
    i = 0
    index = 1

    while i < len(text):
        part_length = calculate_length(index)
        sub_text = text[i : i + part_length]
        encryption_text.append(sub_text)
        i += part_length
        index += 1

    return encryption_text

yin_book_encryption 関数をテストする

このステップでは、提供された例を使って yin_book_encryption 関数をテストします。

  1. コードエディタで yin_book.py ファイルを開きます。
  2. ファイルの末尾に以下のコードを追加して、yin_book_encryption 関数をテストします。
## 例 1
text = "Hello, World!"
print(yin_book_encryption(text))

## 例 2
text = "!@#$%^&*) Hello, World!"
print(yin_book_encryption(text))

## 例 3
text = "None"
print(yin_book_encryption(text))

## 例 4
text = ''
print(yin_book_encryption(text))
  1. yin_book.py ファイルを保存し、端末で python yin_book.py コマンドを使ってコードを実行します。出力は以下のようになるはずです。
['H', 'ell', 'o, Wor', 'ld!']
['!', '@#$', '%^&*) ', 'Hello, Wor', 'ld!']
['N', 'one']
None

出力が予想される結果と一致していることから、yin_book_encryption 関数が期待通りに機能していることがわかります。

yin_book_encryption 関数を理解する

このステップでは、yin_book_encryption 関数の実装を理解します。

  1. yin_book_encryption 関数は文字列 text を入力として受け取り、暗号化された部分のリストを返します。

  2. calculate_length 関数は、与えられたインデックスに基づいて各部分の長さを計算するヘルパー関数です。n 番目の部分の長さは 1 + 2 + 3 +... + n です。

  3. 関数はまず、入力 text が空かどうかをチェックします。空の場合、関数は None を返します。

  4. 次に、関数は暗号化された部分を格納する空のリスト encryption_text を初期化します。

  5. 関数は while ループを使って text を反復処理し、部分に分割します。各反復処理では:

    • 関数は calculate_length 関数を使って、現在の部分の長さを計算します。
    • 関数はスライシングを使って text から現在の部分を抽出し、encryption_text リストに追加します。
    • 関数は、次の反復処理のために開始インデックス i と部分インデックス index を更新します。
  6. 最後に、関数は暗号化された部分を含む encryption_text リストを返します。

この実装を理解することで、あなたは自分のプロジェクトで yin_book_encryption 関数を使ったり、特定の要件に合わせて変更することができるようになります。

✨ 解答を確認して練習

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたは実験(Lab)をもっとたくさん行って、技術力を向上させることができます。