【问题标题】:Building a Shift Dictionary and Applying Shift for Caesar cipher构建移位字典并为凯撒密码应用移位
【发布时间】:2016-06-05 13:43:24
【问题描述】:

这个问题来自我正在研究的一门课程。 我已经尝试回答这个问题,但我没有取得任何进展。 请回复可以解决此问题的代码。 问题出现在下面。

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

接下来的两个问题,你将根据文档字符串中的规范填写 ps6.py 中的 Message 类的方法。 Message类中已经填写的方法有:

__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_lowercase 和 string.ascii_uppercase 显示的字母顺序:

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

来自介绍页面的提醒 - 空格字符、逗号、句号、感叹号等字符不会被此密码加密 - 基本上是 string.punctuation 中的所有字符,加上空格('')以及在“string.digits”中找到的所有数字字符 (0 - 9)。

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

非常感谢任何帮助!

【问题讨论】:

  • 不太可能有人会回答要求您为作业提供代码的问题。如果您被困在某个地方并遇到特定问题,请提供您的解决步骤或提出新问题。有关“如何提问”的更多信息,请查看SO help page
  • 好的,谢谢你的建议。

标签: python python-2.7


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 1970-01-01
    • 2017-02-08
    • 2020-11-12
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    相关资源
    最近更新 更多