我试图在Python中找出简单的列表加密

时间:2013-11-21 16:52:08

标签: python

所以,我必须模拟某种加密协议。例如,我有清单 哎= [ 'Z', 'A'] 然后我使用ord()命令将该列表转换为ascii列表。没什么大不了。问题在这里。为了加密,我输入一些移动值,它将移动ascii值,然后将其重新改回字母。它应该是从A到Z的大写字母,所以ascii代码的范围从65到90.我已经修改了移位值,所以即使它大于26它仍然可以正常工作。但是,如何修改ascii列表本身,以便如果列表中的一个元素大于90,它会向后移动? 我试过这个:

num=[ord(i)+shift for i in hey]
if num[i]>90:
   num[i]=num[i]-26

但是,只有当列表的两个(或所有)元素都大于90时才会发生转换。是否有办法使该条件分别影响每个元素?因此,如果一个元素的ascii值大于90,那么将发生移位,但是另一个值将不受影响,直到它变得大于90.

2 个答案:

答案 0 :(得分:2)

我认为使用模运算符%会更好。这得到了分裂的剩余部分。

示例:

>>> 10 % 5
0
>>> 10 % 2
0
>>> 10 % 3
1
>>> 10 % 6
4

使用此功能,您可以使用以下代码替换代码:

num = [(ord(i) + shift - 65) % 26 + 65 for i in hey]

这也适用于大的移位值。减去26意味着在shift >= 27时你仍然可以超出范围。

答案 1 :(得分:1)

num=[(ord(i)+shift) if ord(i) + shift <= 90 else (ord(i)+shift - 26) for i in hey]

虽然我觉得你的其他地方有问题......你应该回到ascii集的开头