Python 中的波利比奥斯方阵加密

PythonBeginner
立即练习

介绍

在这个项目中,你将学习如何实现波利比奥斯方阵加密算法。波利比奥斯方阵是一个 5x5 的网格,它将英文字母表中的每个字母映射到一对坐标上。通过使用这种方法对文本进行加密,你可以创建一个只有了解波利比奥斯方阵的人才能解密的编码消息。

👀 预览

## 示例1
text = "tynam"; encryption_text = "4454331132"
## 示例2
text = "tynam123"; encryption_text = "4454331132123"
## 示例3
text = "TYnam"; encryption_text = "4454331132"
## 示例4
text = None; encryption_text = None

🎯 任务

在这个项目中,你将学习:

  • 如何定义波利比奥斯方阵
  • 如何去除空格并将文本转换为小写
  • 如何处理空输入或 None 输入
  • 如何使用波利比奥斯方阵对文本进行加密
  • 如何返回加密后的文本

🏆 成果

完成这个项目后,你将能够:

  • 理解波利比奥斯方阵加密算法的概念
  • 在 Python 中实现波利比奥斯加密算法
  • 使用波利比奥斯方阵对文本进行加密和解密
  • 处理各种输入场景,包括空输入或 None 输入

去除空格并转换为小写

在这一步中,你将学习如何通过去除空格并将所有字符转换为小写来为加密准备输入文本。

  1. 在你的代码编辑器中打开 polybius.py 文件。
  2. 将以下代码添加到 polybius_encryption() 函数中:
## 去除空格并转换为小写
text = text.replace(" ", "").lower()

这将去除输入文本中的所有空格,并将所有字符转换为小写。

处理空输入或 None 输入

在这一步中,你将学习如何处理输入文本为空或 None 的情况。

  1. polybius_encryption() 函数的开头添加以下代码:
if text is None:
    return None

if text == "":
    return None

这将确保如果输入文本为 None 或空字符串,函数将返回 None

  1. 完成此步骤后的代码如下所示:
def polybius_encryption(text: str) -> str:
    if text is None:
        return None

    ## 去除空格并转换为小写
    text = text.replace(" ", "").lower()

    if text == "":
        return None

设置波利比奥斯方阵

在这一步中,你将学习如何定义波利比奥斯方阵,它是一个 5x5 的网格,包含了英文字母表中的 26 个字母。

  1. 在上一步之后,将波利比奥斯方阵定义为一个列表的列表,其中每个内部列表代表方阵的一行:
polybius_square = [
    ["a", "b", "c", "d", "e"],
    ["f", "g", "h", "ij", "k"],
    ["l", "m", "n", "o", "p"],
    ["q", "r", "s", "t", "u"],
    ["v", "w", "x", "y", "z"],
]

这个波利比奥斯方阵将用于把输入文本中的字母映射到它们相应的坐标上。

加密文本

在这一步中,你将学习如何使用波利比奥斯方阵对输入文本进行加密。

  1. 在上一步之后,将以下代码添加到 polybius_encryption() 函数中:
encrypted_text = ""

for char in text:
    if char.isalpha():
        for i, row in enumerate(polybius_square):
            for j, ch in enumerate(row):
                if char in ch:
                    encrypted_text += str(i + 1) + str(j + 1)
    else:
        encrypted_text += char

这段代码会遍历输入文本中的每个字符。如果字符是字母,它会在波利比奥斯方阵中找到对应的坐标,并将其添加到 encrypted_text 字符串中。如果字符不是字母,则直接将其添加到 encrypted_text 字符串中。

返回加密后的文本

在这最后一步中,你将学习如何从 polybius_encryption() 函数返回加密后的文本。

  1. polybius_encryption() 函数的末尾添加以下代码行:
return encrypted_text

这将返回加密后的文本作为函数的输出。

现在,完整的 polybius_encryption() 函数应该如下所示:

def polybius_encryption(text: str) -> str:
    if text is None:
        return None

    ## 去除空格并转换为小写
    text = text.replace(" ", "").lower()

    if text == "":
        return None

    ## 定义波利比奥斯方阵
    polybius_square = [
        ["a", "b", "c", "d", "e"],
        ["f", "g", "h", "ij", "k"],
        ["l", "m", "n", "o", "p"],
        ["q", "r", "s", "t", "u"],
        ["v", "w", "x", "y", "z"],
    ]

    encrypted_text = ""

    for char in text:
        if char.isalpha():
            for i, row in enumerate(polybius_square):
                for j, ch in enumerate(row):
                    if char in ch:
                        encrypted_text += str(i + 1) + str(j + 1)
        else:
            encrypted_text += char

    return encrypted_text


if __name__ == "__main__":
    txt = input()
    print(polybius_encryption(txt))

你现在已经完成了波利比奥斯加密算法的实现。你可以通过运行 polybius.py 文件并提供要加密的输入文本来测试你的代码。

  1. 运行 polybius.py 文件并提供要加密的输入文本。
python3 polybius.py
  1. 观察加密后文本的输出。
## 示例1
text = "tynam"; encryption_text = "4454331132"
## 示例2
text = "tynam123"; encryption_text = "4454331132123"
## 示例3
text = "TYnam"; encryption_text = "4454331132"
## 示例4
text = None; encryption_text = None

恭喜你!你已经在 Python 中成功实现了波利比奥斯加密算法。

总结

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

✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习