带字符串和循环Python的Caesar密码算法
任务是编写一个Caesar密码算法,该算法接收两个参数,第一个是字符串参数,第二个告诉字母表移位的距离。第一部分是设置一个方法并设置两个字符串,一个正常字符串和一个移位字符串。我已经这样做了。然后我需要做一个循环,通过查找原始字母并从移位的字符串中选择适当的新字母,遍历原始字符串以构建新字符串。我已经花了至少两个小时盯着这个,并且和我的老师谈过,所以我知道我在做一些正确的事情。但是关于while循环中的内容,我真的不知道。在正确的方向上的任何提示或推动都会非常有帮助,所以我至少有一个开始的地方会很好,谢谢带字符串和循环Python的Caesar密码算法,python,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))
def密码(x,dist):
alphabet=“abcdefghijklmnopqrstuvxyz”
移位=“xyzabcdefghijklmnopqrstuv”
stringspot=0
shiftspot=(x.find(“a”))
aspot=(x.find(“a”))
当stringspot<26时:
aspot=移位(距离)
移位=
stringspot=stringspot+1
ans=
返回ans
打印(密码(“abcdef”,1))
打印(密码(“abcdef”,2))
打印(密码(“abcdef”,3))
打印(密码(“dogcatpig”,1))
以下是一些推送和提示:
字母表
和移位
应该是原始流和密文之间的映射。循环的工作是迭代流中的所有字母。更具体地说,字母表中的字母
和中的替代字母移位
位于同一索引中,因此映射。在伪代码中:
ciphertext = empty
for each letter in x
i = index of letter in alphabet
new_letter = shifted[i]
add new_letter to ciphertext
整个循环可以简化为一个理解列表,但这不应该是您主要关心的问题
要获得比上述伪代码更直接的映射,请查看字典
代码中另一件突出的事情是
移位
的生成,它应该取决于参数dist
,因此不能只是硬编码。因此,如果dist
为5,则移位的中的第一个字母应该是字母表中0+5处的任何字母,依此类推。提示:模运算符。您应该在未获得的while循环的部分内使用debug,类似于debug=True def log(s):如果debug:print s
,则在循环内使用log(“some string”)`注意:您已手动设置移位
,但是字符串应该根据dist
参数的不同而有所不同。如果dist
为1,shift
应以ab
开头。您应该动态构建shift
。此外,如果以后使用圆括号(好像它是一个函数)的移位,则应该使用方括号。另外,x
不能包含字母a
,例如密码(“lol”,1)
,该密码应返回“mpm”
。此外,while循环重复26次。然而,迭代x
的每个字母(可能比26短/朗格)是合理的,因此这可能是您应该更改的内容。我建议您尝试手动解决某些情况(例如,当x
为1个字母长时会发生什么?如果dist
等于0时会发生什么?)ord()
的结果不是任意的,但您可以将其称为对10秒钟内未查看ascii代码的人不敏感的结果。我还认为,将此功能引入游戏更令人讨厌。没有什么比他的字母表
字符串或字符串.ascii_小写字母
更简单的了。