我认为问题出在 if 语句内,但经过一番调整后我找不到问题。
txt = "xofob qyxxk qsfo iye ez, xofob qyxxk vod iye nygx"
def letterschuiven(cha, vsg):
for let in cha:
let = let.lower()
if let.isalpha():
numberlet = ord(let) + vsg
if numberlet < 97:
modlet= numberlet % 26
answer = modlet + 97
else:
answer=numberlet
realans = chr(answer)
print(realans, end = "")
else:
print(let, end = "")
letterschuiven(txt, -10)
应该返回“永远不会放弃你,永远不会让你失望”, 现在返回:“neoek会gioe ron np,neoek会lem ron dopn”
(这里是def的解释) 我正在尝试使用 CHA 作为字符串,使用 vsg 作为字符应移动的数量(此处为 -10)
来解码 txt给 Neoek 去 gioe ron np,neoek 去 lem ron dopn 应该回来永远不会放弃你,永远不会让你失望
我稍微调整了大多数值,但这只会让事情变得更糟
我认为答案非常简单,但请尽量保持初学者水平(学校项目;))
你必须换线
modlet = numberlet % 26
到
modlet = (numberlet - 97) % 26
由于“a”字符的十进制代码为 97,因此您需要在获取 mod 26 之前将其设置为 0。这样,
numberlet - 97
会告诉您在“z”之后必须采取的步骤,因此 (numberlet - 97) % 26
会告诉您如何执行从“a”开始你必须采取许多步骤。
顺便说一句,这样你甚至不需要
if numberlet < 97:
modlet = numberlet % 26
answer = modlet + 97
else:
answer =numberlet
部分,简单使用
answer = (ord(let) + vsg- 97) % 26 + 97
相反。