任务是编写一个Caesar密码算法,它接收两个参数,第一个参数是字符串参数,第二个参数指示字母表的移位量。第一部分是设置一个方法,并设置两个字符串,一个正常字符串和一个移位字符串。我已经做到了。然后我需要创建一个循环来遍历原始字符串以构建一个新字符串,方法是查找原始字母并从移位字符串中选择适当的新字母。我已经花了至少两个小时盯着这张照片,并且和我的老师谈过了,这样我就知道我做的有些事情是对的。但至于while循环中发生了什么,我真的不知道。任何向正确方向的暗示或推动都会很有帮助,所以我至少有个地方可以开始将是很好的,谢谢。在
def cipher(x, dist):
alphabet = "abcdefghijklmnopqrstuvwxyz"
shifted = "xyzabcdefghijklmnopqrstuvw"
stringspot = 0
shiftspot = (x.find("a"))
aspot = (x.find("a"))
while stringspot < 26:
aspot = shifted(dist)
shifted =
stringspot = stringspot + 1
ans =
return ans
print(cipher("abcdef", 1))
print(cipher("abcdef", 2))
print(cipher("abcdef", 3))
print(cipher("dogcatpig", 1))
alphabet
和{alphabet
中的字母和{整个循环可以简化为一个理解列表,但这不应该是您的主要关注点。在
要获得比上述伪代码更直接的映射,请查看字典。在
代码中另一个突出的问题是生成}中的第一个字母应该是{}中0+5的任何一个字母,依此类推。提示:模运算符。在
shifted
,它应该依赖于参数dist
,因此不能只是硬编码。所以,如果dist
是5,那么{以下是一些建议和提示:
你应该验证你的输入。尤其要确保换档距离是“合理的”,合理意味着你可以处理一些事情。我建议<;=25。
如果最大移位量为25,字母“a”加上25将得到“z”。字母“z”加上25将超过字母表的末尾。但它不会超过两个字母的末尾。所以这是处理环绕的一种方法。
在他的解决方案中,用户@zondo处理大写字母。你没说你想不想处理他们。你可以和你的老师澄清一下。
如果您了解字典,您可能需要构建一个字典,以便于将旧字母映射到新字母。
您需要认识到字符串被视为元组或列表—您可以为它们编制索引。我看不出你在代码里这么做。
您可以使用^{} 获得字母的“ASCII代码”编号。数字是任意的,但大小写数字都在26的范围内紧密地组合在一起。这意味着你可以用它们来做数学。(例如,
ord('a')
是97。不是很有用。但是ord('b') - ord('a')
是1,这可能是个好消息。)相关问题 更多 >
编程相关推荐