2016-02-26 71 views
0

所以,我正在Python中製作我自己的Vigenere密碼程序,而且我已經有兩個列表;一個是要加密/解密的消息的ASCII編號的列表,另一個是相同的長度並且包含重複的密碼密鑰的ASCII編號。這兩個名單加起來我用這行代碼:Vigenere密碼列表處理

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)] 

但語法無效!我需要做些什麼來完成這項工作?

回答

1

如果你還希望包括數字字符,但不加密,使用上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()] 
1

你有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 
>>> 
+0

對不起,我是Python的初學者,我不太明白你的意思 – user3124306

+0

@ user3124306檢查我的編輯。 – Zety