-1

我有两个功能。第一个将构建一个编码器来对给定的文本进行凯撒密码:

def buildCoder(shift):

        lettersU=string.ascii_uppercase
        lettersL=string.ascii_lowercase
        dic={}
        dic2={}

        for i in range(0,len(lettersU and lettersL)):
            dic[lettersU[i]]=lettersU[(i+shift)%len(lettersU)]
            dic2[lettersL[i]]=lettersL[(i+shift)%len(lettersL)]
        dic.update(dic2)
        return dic

第二个将编码器应用于给定的文本:

def applyCoder(text, coder):
        cipherText=''
        for l in text:
            if l in coder:
                l=coder[l]
            cipherText+=l
        return cipherText

问题的第 3 部分要求我构建一个包装器,但由于我是编码新手,所以我不知道如何编写使用这两个函数的包装器。

def applyShift(text, shift):
  """
  Given a text, returns a new text Caesar shifted by the given shift
  offset. Lower case letters should remain lower case, upper case
  letters should remain upper case, and all other punctuation should
  stay as it is.

  text: string to apply the shift to
  shift: amount to shift the text (0 <= int < 26)
  returns: text after being shifted by specified amount.
  """
4

3 回答 3

2

将您的每个功能都视为获取某种数据并为您提供不同类型的东西。

buildCoder接受 ashift并给你一个coder.

applyCoder需要一些text(要编码的字符串)和 acoder并为您提供编码的字符串。

现在,您要编写applyShift一个函数,它接受 ashift和 sometext并为您提供编码字符串。

你在哪里可以得到编码的字符串?仅从applyCoder. 它需要text和一个coder. 我们有,text因为它是给我们的,但我们还需要一个coder. 所以让我们coder使用我们提供的buildCodershift

综合起来,这将如下所示:

def applyShift(text, shift):
  # Get our coder using buildCoder and shift
  coder = buildCoder(shift)
  # Now get our coded string using coder and text
  coded_text = applyCoder(text, coder)
  # We have our coded text!  Let's return it:
  return coded_text
于 2012-11-01T01:11:05.743 回答
1

忘记术语“包装器”。只需编写另一个函数来调用其他两个函数并返回结果。您已经获得了函数签名(其名称和参数)和所需结果的描述。所以在函数体中这样做:

  1. buildCoder()使用参数调用shift并将结果存储在变量中coder
  2. applyCoder()使用您刚刚存储的参数调用,text并将coder结果存储在cipher_text
  3. 返回cipher_text

要测试您的函数是否有效,请编写一些测试代码来运行您applyShift的一些示例数据,例如:

print applyShift('Loremp Ipsum.', 13)
于 2012-11-01T01:13:13.257 回答
0
def applyShift(text, shift):
    return applyCoder(text, buildCoder(shift))
于 2013-12-02T17:09:57.557 回答