【发布时间】:2016-02-07 10:37:42
【问题描述】:
作业是编写一个接收 2 个参数的 Caesar Cipher 算法,第一个是字符串参数,第二个告诉字母表移动多远。第一部分是设置一个方法,设置两个字符串,一个普通的,一个移位的。我已经做到了。然后我需要循环遍历原始字符串以构建新字符串,方法是找到原始字母并从移位的字符串中选择适当的新字母。我花了至少两个小时盯着这个,并和我的老师谈过,所以我知道我在做一些正确的事情。但至于 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))
【问题讨论】:
-
你应该在你没有得到的while循环部分使用debug,比如
DEBUG = True def log(s): if DEBUG: print s然后在循环中使用log("some string")` -
请注意:您已经手动设置了
shifted,但字符串应该根据dist参数而有所不同。如果dist为1,则shifted应以b开头。您应该动态构建shifted。此外,您稍后使用带有圆括号的shifted(好像它是一个函数),您应该使用方括号。此外,x不能有字母a,例如cipher("lol", 1)应该返回"mpm"。 -
另外,您的 while 循环迭代 26 次。然而,迭代
x的每个字母(可能比 26 更短/更长)是合理的,所以这可能是你应该改变的。我建议您尝试手动解决某些情况(例如,x的长度为 1 个字母时会发生什么情况?如果dist等于 0 会发生什么情况?)
标签: python