【发布时间】:2017-07-29 18:25:11
【问题描述】:
我正在尝试创建一个有效的 Vigenère 密码,但似乎无法弄清楚如何创建一个循环遍历两个不同列表的循环。
这应该由以下计算得出:
明文:HAPPYBIRTHDAY 密钥:BADBADBADBADB 密文:IASQYEJRWIDDZ
这是我的代码的实际结果:
密文:'IBQQZCJSUIEBZHAPPYBIRTHDAYKDSSBELUWKGDB'
我的代码:
def vigenere_enc(plain, key):
plain_ls = list( plain )
key_ls = list( key )
alpha = [ "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" ]
ls = []
for key in key_ls:
position_key = alpha.index( key )
for let in plain_ls:
position_let = alpha.index( let )
shift = position_let + position_key
if shift > 26:
shift_from_beg = ( shift - 26)
add_let = alpha[ shift_from_beg ]
ls.append( add_let )
else:
else_add_let = alpha[ shift ]
ls.append( else_add_letn )
string = ''.join( ls )
return string
我明白为什么我的代码是错误的,但不知道如何修复它。非常感谢任何反馈/帮助!
【问题讨论】:
-
您需要一个同时遍历 两个 列表的循环,这就是
zip()的用途:for key,let in zip(key_ls,plain_ls):...
标签: python list loops encryption