所以,我必须模拟某种加密协议。例如,我有清单 哎= [ '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.
答案 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集的开头