Python vigenere密码-未添加正确的值
我想从for循环中获取特定值,添加到另一个字符串中,以创建vigenere密码 这是密码Python vigenere密码-未添加正确的值,python,python-3.x,for-loop,encryption,vigenere,Python,Python 3.x,For Loop,Encryption,Vigenere,我想从for循环中获取特定值,添加到另一个字符串中,以创建vigenere密码 这是密码 userinput = input('enter message') keyword = input('enter keyword') new = '' for a in keyword: pass for i in (ord(x) for x in userinput): if 96 < i < 123: #lowercase new += chr(97 + (
userinput = input('enter message')
keyword = input('enter keyword')
new = ''
for a in keyword:
pass
for i in (ord(x) for x in userinput):
if 96 < i < 123: #lowercase
new += chr(97 + (i+ord(a)-97)#keeps all values in alphabet
print(new)
userinput=input('enter message')
关键字=输入('输入关键字')
新=“”
对于in关键字:
通过
对于i in(ord(x)对于x in userinput):
如果96
因此,我想要的答案是,如果我把‘abcd’作为我的信息,把‘ab’作为我的关键词,那么我想要的结果是‘bddf’,因为‘a’+‘a’是‘b’,而‘b’+‘b’=‘d’等等。我将如何更改代码以匹配我想要的结果,或者我必须完全更改代码,我将如何进行更改。试试这个(你缺少了mod 26
-部分):
如果你喜欢列表理解,你也可以写
def vigenere(plaintext, keyword):
keystream = cycle(keyword)
return ''.join(add_chars(pln, key)
for pln, key in zip(plaintext, keystream))
更新
根据
a+a=b
的愿望进行了更新。注意z
在这种情况下是添加的中性元素(z+char=z
)。当我将97更改为96时,它工作得非常好。请您添加注释,请更新。谢谢更正。请注意z
的特殊情况。
def vigenere(plaintext, keyword):
keystream = cycle(keyword)
return ''.join(add_chars(pln, key)
for pln, key in zip(plaintext, keystream))