def rotated(n: int):
'''Returns a rotated letter if parameter is greater than 26'''
ALPHABET = 'abcdefghijklmnopqrstuvwxyz'
if n>= 26:
n %= 26
return ALPHABET[n:26] + ALPHABET[:n]
assert rotated(0) == 'abcdefghijklmnopqrstuvwxyz'
assert rotated(26) == 'abcdefghijklmnopqrstuvwxyz'
上面的函数是重置字母,如果给定的整数等于大于26(所以字母z与键1将等于a)。通过蛮力解码密文
def Caesar_decrypt(text: str, key: int) -> str:
'''Returns a decryption of parameter text and key'''
text = text.lower()
key_to_zero = str.maketrans(rotated(key),rotated(0))
return text.translate(key_to_zero)
assert Caesar_decrypt('Cat', 29) == Caesar_decrypt('Cat', 3)
assert Caesar_decrypt('Good night', 0) == 'good night'
Caesar_decrypt然后采用旋转的函数来解密一个给定的文本字符串。但是,我试图解密给定的文本没有一个键,这将是我的下一个功能:Caesar_break。
word = open('wordlist.txt', 'r')
dictionary = word.readlines()
def Caesar_break(code: str) -> str:
alist = []
for x in range(26):
a = Caesar_decrypt(code, x)
alist += a
for i in dictionary:
if i in alist:
return i
***注意:wordlist.txt只是一个包含所有字典单词的文档。请参阅http://www.ics.uci.edu/~kay/wordlist.txt。所以我想知道为什么当我测试出Caesar_break代码时,shell窗口不会返回任何东西。我如何修复代码?谢谢!
如果我的话令人困惑,这是该函数如何工作的例子:
Caesar_decrypt('mjqqt', 5) == 'hello'
使用Caesar_break,上面的表述看起来像:
Caesar_break('mjqqt') == 'hello'
(都等于到'你好')
换句话说,我需要Caesar_break解码消息没有那里5。
原谅我,如果我只是被真正愚蠢的权利,但我从来没有见过蟒蛇明确的参数/返回类型的声明......比 –
其他,你有Caesar_break'的'里面缩进问题。我认为'范围(26)中的x:'是错误缩进的?你也知道'wordlist.txt'是一个巨大的文件,所以'我在字典'循环中可能会运行很长时间.... –
是的,当我将代码粘贴到stackoverflow上时,意外地添加了四个空格,谢谢。至于wordlist文件,有没有办法让代码在没有循环的情况下工作那么多时间? –