阴书加密的实现与测试

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何实现阴书加密算法,这是一种将完整消息分成三部分并分别传递给接收者的方法。这种加密技术在古代被用于防止信息泄露,即使其中一个信使被敌人捕获。

👀 预览

## 示例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/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) 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,第二部分应为1 + 2,第三部分应为1 + 2 + 3,依此类推,直到文本完全分割。
    • 如果输入文本为空,函数应返回 None
    • 一个空格算作一个字符。

以下是你可以用来实现 yin_book_encryption 函数的代码:

def yin_book_encryption(text: str) -> list:
    """
    根据阴书加密规则对给定文本进行加密。

    参数:
        text (str):要加密的文本。

    返回:
        list:文本的加密部分列表。

    """

    def calculate_length(index):
        """
        根据给定的索引计算每个部分的长度。

        参数:
            index (int):部分的索引。

        返回:
            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 函数,或者根据具体需求对其进行修改。

✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。