您好,提前感谢您的回答,
我试图为 PythonChallenge 做第一个任务:
http://www.pythonchallenge.com/pc/def/map.html
我有一些关于代码的问题。
我知道这段代码有效:
import string
letters = string.ascii_lowercase
uletters = string.ascii_uppercase
text = ("g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.")
for x in range(0, 26):
text = text.replace(letters[x-2], uletters[x])
print(text.lower())
我在玩代码,这里是我的观察,我有问题:
1.当我运行时:
text = text.replace(letters[x], uletters[x+2])
出现错误,例如“trynslyte”而不是“translate”。为什么这种转变会产生这样的变化?
2.当我改变时:
uletters = string.ascii_uppercase
至uletters = string.ascii_lowercase
出现了一堆“z”和“y”。又是怎么回事?
非常感谢
最佳答案
当您评估 letters[x-2]
并且 x
是 0 或 1 时,您最终会得到 letters[-1]
或 letters[-2]
,它们在 Python 中分别访问最后一个和倒数第二个元素。这就是这一步起作用的原因。但是,大于最后一个元素索引的索引不会产生相同的效果,因此当 letters[x+2]
太大时 x
将不起作用。
你需要做的是这样的:
letters[(x+2)%len(letters)]
强制这种环绕。
关于python - 凯撒的代码——Python 实现中的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17750952/