Vigenere 密码列表处理

Vigenere Cipher List Processing

所以,我正在 Python 中制作我自己的维吉涅尔密码程序,我已经有了两个列表;一个是消息的 ASCII 码为 encrypted/decrypted 的列表,另一个长度相同,包含重复的密码密钥的 ASCII 码。为了将这两个列表加在一起,我使用了这行代码:

encryption =  [x + y for x, y in zip(msglist, keylist)]

这可行,但我希望循环忽略不属于字母表的 ASCII 数字,但我不知道如何执行此操作。我尝试做类似的事情:

encryption =  [if chr(x).isalpha() != True: x + y for x, y in zip(msglist, keylist)]

但语法无效!我需要做什么才能完成这项工作?

如果您仍想包含数字字符但未加密,请在 ternary if:

上使用 Python 变体
[x + y if chr(x).isalpha() else x for x, y in zip(msglist, keylist)]

如果您想完全忽略它们,请使用 if part of list comprehensions:

[x + y for x, y in zip(msglist, keylist) if chr(x).isalpha()]

你有ord(chr),列表中的数字,所以检查是否x <128

[x + y for x, y in zip(msglist, keylist) if x < 128]

测试

>>> chr(222)
'\xde'
>>> chr(222).isalpha()
False
>>> 222 < 128
False
>>>