基于字符串和for循环Python的Caesar密码算法

2024-09-30 02:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

任务是编写一个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))

Tags: 方法字符串参数dist字母findcipherprint
2条回答

alphabet和{}应该是原始流和密文之间的映射。循环的任务是迭代流中的所有字母,并替换它们。更具体地说,alphabet中的字母和{}中的替代字母位于同一索引中,因此映射。在伪代码中:

ciphertext = empty
for each letter in x
    i = index of letter in alphabet
    new_letter = shifted[i]
    add new_letter to ciphertext

整个循环可以简化为一个理解列表,但这不应该是您的主要关注点。在

要获得比上述伪代码更直接的映射,请查看字典。在

代码中另一个突出的问题是生成shifted,它应该依赖于参数dist,因此不能只是硬编码。所以,如果dist是5,那么{}中的第一个字母应该是{}中0+5的任何一个字母,依此类推。提示:模运算符。在

以下是一些建议和提示:

  1. 你应该验证你的输入。尤其要确保换档距离是“合理的”,合理意味着你可以处理一些事情。我建议<;=25。

  2. 如果最大移位量为25,字母“a”加上25将得到“z”。字母“z”加上25将超过字母表的末尾。但它不会超过两个字母的末尾。所以这是处理环绕的一种方法。

  3. 在他的解决方案中,用户@zondo处理大写字母。你没说你想不想处理他们。你可以和你的老师澄清一下。

  4. 如果您了解字典,您可能需要构建一个字典,以便于将旧字母映射到新字母。

  5. 您需要认识到字符串被视为元组或列表—您可以为它们编制索引。我看不出你在代码里这么做。

  6. 您可以使用^{}获得字母的“ASCII代码”编号。数字是任意的,但大小写数字都在26的范围内紧密地组合在一起。这意味着你可以用它们来做数学。(例如,ord('a')是97。不是很有用。但是ord('b') - ord('a')是1,这可能是个好消息。)

相关问题 更多 >

    热门问题