如何在避免标点符号的Vigenère密码中生成密钥
How to generate key in Vigenère cipher which avoid punctuation marks
我必须编写 Vigenère 密码,但我遇到了问题。如何修改代码以获取忽略 space、回车、逗号等的密钥?
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.'
为了更加 pythonic 并避免索引操作,您可以使用 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”)。
我必须编写 Vigenère 密码,但我遇到了问题。如何修改代码以获取忽略 space、回车、逗号等的密钥?
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.'
为了更加 pythonic 并避免索引操作,您可以使用 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”)。