如何在维吉涅尔密码中生成避免标点符号的密钥



我必须编写Vigenère密码,但我遇到了一个问题。如何修改代码以获得忽略空格、回车、逗号等的键?

def generateKey(string, key):
key = list(key)
x = []
if len(string) == len(key):
return (key)
else:
for i in range(len(string)):
x.append(key[i % len(key)])
return ("".join(x))

m = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor 
incididunt ut labore et dolore magna aliqua."
k = 'test'
key = generateKey(m,k)
print(key)

输入:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

输出:

testtesttesttesttesttesttesttesttesttesttesttesttesttest

我想要这个:

testt estte sttes tes ttes, ttesttestte sttesttest test, tes tt esttest testte sttesttest testte st testte sttes ttestt.

您可能需要str.isalpha

def generate_key(string, key):
key_len = len(key)
if len(string) == key_len:
return key
x = []
i = 0
for char in string:
if char.isalpha():
x.append(key[i % key_len])
i += 1
else:
x.append(char)
return "".join(x)
m = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor" 
"incididunt ut labore et dolore magna aliqua.")
k = 'test'
key = generate_key(m,k)
print(key)
# 'testt estte sttes tte stte, sttesttestt esttesttes ttes, tte st testtes ttestt esttesttes tt esttes tt esttes ttest testte.'

为了更加Python化并避免索引操作,可以使用itertools.cycle:

from itertools import cycle
def generate_key(string, key):
if len(string) == len(key):
return key
key_iter = cycle(key)
return ''.join(next(key_iter) if char.isalpha() else char for char in string)

请注意,您的预期输出中有一个错误(第4个单词中缺少"t"(。

最新更新