Caesar-ciph移位词典的建立与应用

2024-04-19 06:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题来自我正在学习的一门课程。 我试过回答这个问题,但没有取得任何进展。 请用能解决此问题的代码响应。 问题如下。

问题: “Message”类包含可用于对字符串应用密码的方法,用于加密或解密消息(因为对于Caesar代码,这是相同的操作)。

在接下来的两个问题中,您将根据docstrings中的规范填写ps6.py中的消息类的方法。消息类中已填写的方法有:

__init__(self, text)

getter方法get_message_text(self)

getter方法get_valid_words(self),注意这个方法返回self.valid_words的副本,以防止有人对原始列表进行变异。

在这个问题中,您将填写两种方法:

填写Message类的build_shift_dict(self, shift)方法。确保字典中同时包含小写和大写字母,但小写字母的移位字符及其大写版本是同一字母的小写和大写实例。这意味着,如果原始字母是“a”,其移位值是“c”,则字母“a”应移位到字母“c”。

如果您不熟悉英文字母表的顺序或字符,我们将遵循string.ascii_小写和string.ascii_大写显示的字母顺序:

>>> import string
>>> print string.ascii_lowercase
abcdefghijklmnopqrstuvwxyz
>>> print string.ascii_uppercase
ABCDEFGHIJKLMNOPQRSTUVWXYZ

来自简介页的提示-空格字符、逗号、句点、感叹号等字符将不会被此密码加密-基本上,string.penstion中的所有字符,加上“string.digits”中的空格('')和所有数字字符(0-9)。

填写Message类的apply_shift(self, shift)方法。您可能会发现使用build_shift_dict(self, shift)更容易。记住,空格和标点符号不应该被密码改变。

非常感谢您的帮助!


Tags: 方法代码self消息密码messagestringshift
1条回答
网友
1楼 · 发布于 2024-04-19 06:23:01
def build_shift_dict(self, shift):
    dict1 = {}
    str1 = string.ascii_uppercase
    for s in str1:
        if (ord(s)+shift-65) < 26 :
             dict1[s] = chr(ord(s)+shift)
        elif (ord(s)+shift-65) >= 26 :
             dict1[s] = chr(ord(s)+shift-26)

    str1 = string.ascii_lowercase
    for s in str1:
        if (ord(s)+shift-97) < 26 :
             dict1[s] = chr(ord(s)+shift)
        elif (ord(s)+shift-97) >= 26 :
             dict1[s] = chr(ord(s)+shift-26)

    return dict1    

def apply_shift(self, shift):
    msg = self.get_message_text()
    newMsg = ""
    dict1 = self.build_shift_dict(shift)
    for i in range(len(msg)):
        if dict1.has_key(msg[i]):
            newMsg += dict1.get(msg[i])
        else:
            newMsg += msg[i]
    return newMsg

相关问题 更多 >