Python 为字符串中的每个字母旋转列表
我正在尝试制作一个Caesar密码来更改每个字母的密钥,目前我有一个可以对整个字符串进行一次加密的工作密码,运行1-25,但是我希望它对每个字母进行加密,因为字符串“ABC”会将a移位1,B移位2,C移位3,从而产生BDF 我已经有一个工作密码,只是不知道如何让它改变每个字母Python 为字符串中的每个字母旋转列表,python,python-3.x,Python,Python 3.x,我正在尝试制作一个Caesar密码来更改每个字母的密钥,目前我有一个可以对整个字符串进行一次加密的工作密码,运行1-25,但是我希望它对每个字母进行加密,因为字符串“ABC”会将a移位1,B移位2,C移位3,从而产生BDF 我已经有一个工作密码,只是不知道如何让它改变每个字母 upper = collections.deque(string.ascii_uppercase) lower = collections.deque(string.ascii_lowercase)
upper = collections.deque(string.ascii_uppercase)
lower = collections.deque(string.ascii_lowercase)
upper.rotate(number_to_rotate_by)
lower.rotate(number_to_rotate_by)
upper = ''.join(list(upper))
lower = ''.join(list(lower))
return rotate_string.translate(str.maketrans(string.ascii_uppercase, upper)).translate(str.maketrans(string.ascii_lowercase, lower))
#print (caesar("This is simple", 2))
our_string = "ABC"
for i in range(len(string.ascii_uppercase)):
print (i, "|", caesar(our_string, i))
结果是:
0 | ABC
1 | ZAB
2 | YZA
3 | XYZ
4 | WXY
5 | VWX
6 | UVW
7 | TUV
8 | STU
9 | RST
10 | QRS
11 | PQR
12 | OPQ
13 | NOP
14 | MNO
15 | LMN
16 | KLM
17 | JKL
18 | IJK
19 | HIJ
20 | GHI
21 | FGH
22 | EFG
23 | DEF
24 | CDE
25 | BCD
我希望第一个字母的移位为1或0,第二个字母的移位为2,依此类推。很好!请注意,映射不仅会重新排列字母表中的字母,因此它永远不会通过旋转字母表来实现。在您的示例中,upper将成为以下映射:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
BDFHJLNPRTVXZBDFHJLNPRTVXZ
还请注意,此密码不容易可逆,即不清楚是反转“B”->“A”还是反转“B”->“N”
(旁注:如果我们将字母zabcdeffghijklmnopqrstuvxy视为数字0-25,则此密码将乘以2(模26):(x*2)%26
。如果不是2,而是乘以任何不可被2和13整除的数字,则生成的密码将始终是可逆的。您知道为什么吗?提示:,)
当您对一段代码感到困惑时,通常这是一个好迹象,是时候将其中的一部分重构为单独的函数,例如: (游乐场:) 输出:
caesar("ABC"): BDF
caesar("abc"): bdf
caesar("XYZ"): VXZ
资源:
caesar("ABC"): BDF
caesar("abc"): bdf
caesar("XYZ"): VXZ