Python 练习维吉尼亚密码
Python exercise Vigenère code
我对下面这段代码有疑问:
ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def main():
encrypt_code = codeer('NOBODY EXPECTS THE SPANISH INQUISITION!', 'CIRCUS')
print("{}".format(encrypt_code))
print("{}".format(decrypt('CIRCUS', encrypt_code)))
def codeer(tekst, sleutel):
pairs = zip(tekst, cycle(sleutel))
code = ""
for pair in pairs:
total = reduce(lambda x, y: ALPHA.index(x) + ALPHA.index(y), pair)
code += ALPHA[total % 26]
return code;
此代码将崩溃,因为消息包含一个空格和一个 !符号。
total = reduce(lambda x, y: ALPHA.index(x) + ALPHA.index(y), pair)
ValueError: substring not found
谁能帮我解决我的问题
以下是预期输出的示例:
codeer('NOBODY EXPECTS THE SPANISH INQUISITION!', 'CIRCUS')
'PWSQXQ MORYUVA VBW AGCHAUP KHIWQJKNAQV!'
decodeer('PWSQXQ MORYUVA VBW AGCHAUP KHIWQJKNAQV!', 'CIRCUS')
'NOBODY EXPECTS THE SPANISH INQUISITION!'
在我看来,您需要做的只是 code/decode 只有当所讨论的字符是大写字母时。请参阅下面的示例,了解我的想法。
def codeer(tekst, sleutel):
pairs = zip(tekst, cycle(sleutel))
code = ""
for pair in pairs:
if pair[0].isupper():
total = reduce(lambda x, y: ALPHA.index(x) + ALPHA.index(y), pair)
code += ALPHA[total % 26]
else:
code += pair[1]
return code
您可以观察它的执行情况here。它似乎产生了所需的输出。
我对下面这段代码有疑问:
ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def main():
encrypt_code = codeer('NOBODY EXPECTS THE SPANISH INQUISITION!', 'CIRCUS')
print("{}".format(encrypt_code))
print("{}".format(decrypt('CIRCUS', encrypt_code)))
def codeer(tekst, sleutel):
pairs = zip(tekst, cycle(sleutel))
code = ""
for pair in pairs:
total = reduce(lambda x, y: ALPHA.index(x) + ALPHA.index(y), pair)
code += ALPHA[total % 26]
return code;
此代码将崩溃,因为消息包含一个空格和一个 !符号。
total = reduce(lambda x, y: ALPHA.index(x) + ALPHA.index(y), pair) ValueError: substring not found
谁能帮我解决我的问题
以下是预期输出的示例:
codeer('NOBODY EXPECTS THE SPANISH INQUISITION!', 'CIRCUS')
'PWSQXQ MORYUVA VBW AGCHAUP KHIWQJKNAQV!'
decodeer('PWSQXQ MORYUVA VBW AGCHAUP KHIWQJKNAQV!', 'CIRCUS')
'NOBODY EXPECTS THE SPANISH INQUISITION!'
在我看来,您需要做的只是 code/decode 只有当所讨论的字符是大写字母时。请参阅下面的示例,了解我的想法。
def codeer(tekst, sleutel):
pairs = zip(tekst, cycle(sleutel))
code = ""
for pair in pairs:
if pair[0].isupper():
total = reduce(lambda x, y: ALPHA.index(x) + ALPHA.index(y), pair)
code += ALPHA[total % 26]
else:
code += pair[1]
return code
您可以观察它的执行情况here。它似乎产生了所需的输出。