我有两个功能。 第一个将为Caesar密码构建一个给定文本的编码器:
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.
"""
答案 0 :(得分:2)
将您的每个功能视为需要某种数据并为您提供不同类型的功能。
buildCoder
需要shift
,并为您提供coder
。
applyCoder
需要一些text
(要编码的字符串)和coder
,并为您提供编码字符串。
现在,您想要编写applyShift
,这个函数需要shift
和一些text
,并为您提供编码字符串。
在哪里可以获得编码字符串?仅来自applyCoder
。它需要text
和coder
。我们有text
,因为它是给我们的,但我们还需要coder
。因此,让我们使用我们提供的coder
从buildCoder
获取shift
。
总之,这看起来像:
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
答案 1 :(得分:1)
忘记术语“包装”。只需编写另一个function来调用其他两个,然后返回结果。您已经获得了函数签名(其名称及其参数)以及所需结果的描述。所以在函数体中执行以下操作:
buildCoder()
参数调用shift
并将结果存储在变量coder
applyCoder()
和text
来调用coder
,并将结果存储在cipher_text
cipher_text
要测试您的函数是否有效,请编写一些运行applyShift
的测试代码,其中包含一些示例数据,例如:
print applyShift('Loremp Ipsum.', 13)
答案 2 :(得分:0)
def applyShift(text, shift):
return applyCoder(text, buildCoder(shift))