使用函数编码字符串
Encoding a string using function
我创建了以下函数,根据给定的班次将字母表中的每个字母与其对应的编码字母配对:
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
def build_cipher(shift):
'''
Description: takes in shift (an integer representing the amount the letter key in the dictionary is shifted from its corresponding letter) and returns a dictionary containing all letters and their corresponding letters after the shift. This is achieved through subtracting the shift from the number corresponding to the letter, and using modulo 26.
>>> build_cipher(-3)
{'a': 'x', 'b': 'y', 'c': 'z', 'd': 'a', 'e': 'b', 'f': 'c', 'g': 'd', 'h': 'e', 'i': 'f', 'j': 'g', 'k': 'h', 'l': 'i', 'm': 'j', 'n': 'k', 'o': 'l', 'p': 'm', 'q': 'n', 'r': 'o', 's': 'p', 't': 'q', 'u': 'r', 'v': 's', 'w': 't', 'x': 'u', 'y': 'v', 'z': 'w'}
'''
return {alphabet[i]: alphabet[(i + shift) % 26] for i in range(0, 26)}
接下来我需要定义一个函数 encode 来接受文本和移位,returns 编码的文本。为此,我还需要使用 build_cipher 函数。到目前为止我有:
def encode(text, shift):
'''
Description: takes in a text string and shift. Returns the text string encoded based on the shift.
>>> encode('test', -4)
>>> encode('code', 5)
'''
#return (text[(i + shift) % 26] for i in range(0,26))
#return (build_cipher(shift) for text in alphabet)
#return (build_cipher(shift) for text in range(0,26))
我对 return 声明的每一次尝试都在底部的评论中。 None 工作正常,我不确定如何准确地做到这一点,因为 build_cipher returns 作为字典。任何有关如何实现此目标的提示都将受到赞赏。
您已经创建了密码构建函数,现在让我们使用它来创建密码并将其应用于文本中的每个字符。我在这里使用 get
来保持不在密码中的字符不变。
def encode(text, shift):
cipher = build_cipher(shift)
return ''.join(cipher.get(c, c) for c in text)
示例:
>>> encode('good morning', 4)
'kssh qsvrmrk'
>>> encode('kssh qsvrmrk', -4)
'good morning'
注意。您的代码目前不处理大写字母,这是您可能想要解决的问题;)
我创建了以下函数,根据给定的班次将字母表中的每个字母与其对应的编码字母配对:
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
def build_cipher(shift):
'''
Description: takes in shift (an integer representing the amount the letter key in the dictionary is shifted from its corresponding letter) and returns a dictionary containing all letters and their corresponding letters after the shift. This is achieved through subtracting the shift from the number corresponding to the letter, and using modulo 26.
>>> build_cipher(-3)
{'a': 'x', 'b': 'y', 'c': 'z', 'd': 'a', 'e': 'b', 'f': 'c', 'g': 'd', 'h': 'e', 'i': 'f', 'j': 'g', 'k': 'h', 'l': 'i', 'm': 'j', 'n': 'k', 'o': 'l', 'p': 'm', 'q': 'n', 'r': 'o', 's': 'p', 't': 'q', 'u': 'r', 'v': 's', 'w': 't', 'x': 'u', 'y': 'v', 'z': 'w'}
'''
return {alphabet[i]: alphabet[(i + shift) % 26] for i in range(0, 26)}
接下来我需要定义一个函数 encode 来接受文本和移位,returns 编码的文本。为此,我还需要使用 build_cipher 函数。到目前为止我有:
def encode(text, shift):
'''
Description: takes in a text string and shift. Returns the text string encoded based on the shift.
>>> encode('test', -4)
>>> encode('code', 5)
'''
#return (text[(i + shift) % 26] for i in range(0,26))
#return (build_cipher(shift) for text in alphabet)
#return (build_cipher(shift) for text in range(0,26))
我对 return 声明的每一次尝试都在底部的评论中。 None 工作正常,我不确定如何准确地做到这一点,因为 build_cipher returns 作为字典。任何有关如何实现此目标的提示都将受到赞赏。
您已经创建了密码构建函数,现在让我们使用它来创建密码并将其应用于文本中的每个字符。我在这里使用 get
来保持不在密码中的字符不变。
def encode(text, shift):
cipher = build_cipher(shift)
return ''.join(cipher.get(c, c) for c in text)
示例:
>>> encode('good morning', 4)
'kssh qsvrmrk'
>>> encode('kssh qsvrmrk', -4)
'good morning'
注意。您的代码目前不处理大写字母,这是您可能想要解决的问题;)