Ceasar 编码返回错误字符

问题描述 投票:0回答:1

enter image description here 我认为问题出在 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 应该回来永远不会放弃你,永远不会让你失望

我稍微调整了大多数值,但这只会让事情变得更糟

我认为答案非常简单,但请尽量保持初学者水平(学校项目;))

python for-loop if-statement ascii ordinal
1个回答
0
投票

你必须换线

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

相反。

© www.soinside.com 2019 - 2024. All rights reserved.