凯撒密码Python

时间:2018-02-12 15:25:13

标签: python caesar-cipher

在下面的第一个For循环中,代码成功地将字母num位置向右移动。问题出现在第二个For循环中,它并没有像它应该的那样完全颠倒它。我在下面列出了输出。任何意见,将不胜感激。谢谢

if(line.contains(input))

cipher("纽约时报在纽约市。")

输出: (我为num输入了数字3)

First For Loop的输出:Wkh Qhz \ run Wlphv lv lq Qhz \ run Flw ||。

第二轮For Loop的输出:TheNewYYorkTimesisinNewYYorkCityy +

预计第二轮的输出:纽约时报在纽约市。

2 个答案:

答案 0 :(得分:1)

这里有几个问题。

您应该使用else

您使用if <condition>:关注if not <condition>:。相反,使用else:

if i.isalpha():
    i = chr(ord(i)+num)
    final.append(i)
else:
    final.append(i)

这不仅仅是整容......因为您更改了i区块中的if可能 if和{{1}阻止在单次迭代中运行。使用if not解决了这个问题(无论如何都是更好的风格)。

您忘记在解密部分调用else

您需要在解密部分的isalpha调用结束时添加parens,否则只会运行isalpha块(因为方法或函数对象始终被视为true)。< / p>

if

您在解密if chr(ord(i)-num).isalpha(): ... 循环中使用了错误的变量

您将else附加到解密部分的x块中的列表,但else仅在x块中有意义。使用if

i

修复这些内容应成功生成原始邮件。

答案 1 :(得分:0)

答案很简单。在第一个循环中,您没有对空格执行任何转换。

if not i.isalpha(): 
    final.append(i)

但是在第二个循环中,你试图在附加到解密列表之前转换空格。

if not chr(ord(i)-num).isalpha:           
    finalReverse.append(x)

此外,您还要附加x,它是来自上条件的值。

finalReverse.append(x)

而不是这个,你只需附加原始值。

if not chr(ord(i)).isalpha: 
    finalReverse.append(char(ord(i)))

如果您还有问题,请告诉我。

相关问题