【发布时间】:2019-08-23 19:49:15
【问题描述】:
我已经构建了一个运行良好的 Vigenere 密码函数,除了它没有通过我需要通过的编码测试这一事实。
这是因为我使用的是序数值,而我认为测试期望我使用一个函数来旋转字符串字母。
我已经解决了处理非字母字符的问题,并让它同时处理大写和小写字符。但是,如果密钥有大写或小写字符的任何变化,即密钥是小写但纯文本是大写,它似乎会崩溃。
def encrypt(text, key):
cipher_text = []
key = list(key)
if len(text) == len(key):
return(key)
else:
for i in range(len(text) -
len(key)):
key.append(key[i % len(key)])
for i in range(len(text)):
a = text[i]
if a.isalpha() and a.islower():
x = ((ord(text[i]) + ord(key[i])-97) % 26 + 97)
cipher_text.append(chr(x))
elif a.isalpha() and a.isupper():
x = ((ord(text[i]) + ord(key[i])-65) % 26 + 65)
cipher_text.append(chr(x))
else:
cipher_text.append(a)
return("" . join(cipher_text))
def main():
mess = input(str("What is message?"))
key = input("What is key?")
print(encrypt(mess, key))
if __name__ == '__main__':
main()
对于 vigenere.encrypt('BaRFoo', 'BaZ')
You should have returned this:
'CaQGon'
But you actually returned this:
'PtDTha'
【问题讨论】:
-
如果我使用全部大写和全部小写,我会得到不同的答案。这似乎表明您没有同时使用大写和小写。
-
这个短程序中有很多错误.. 1. 如果密钥长度等于源长度,它什么也不做,而是返回密钥。 2. 你从 key[i] 中减去 65 或 97,这取决于 text[i] 是低还是高。让它依赖于 key[i] 怎么样? 3. 你不能从 text[i] 中减去 65 / 97,但你应该这样做。 4. return 不是函数。不需要括号。