most_common_letters_m = [sorted_letters[:8], sorted_letters[8:16], sorted_letters[-10:]] # high 8 middle 8 low 10 f1 = ['e'] # >10% f2 = ['a', 'i', 'r', 't', 'o', 'n'] f3 = ['s', 'l', 'c'] f4 = ['u', 'p', 'm', 'd', 'h'] f5 = ['g', 'b', 'y', 'f', 'v'] f6 = ['w', 'k', 'x', 'z', 'q', 'j'] 修改这段代码 使most_common_letters_m分成f1-f6形式的6段
时间: 2023-09-11 13:12:19 浏览: 80
好的,你可以按照下面的方式修改代码,将`most_common_letters_m`分成6个部分:
```
f1 = sorted_letters[:8] # >10%
f2 = sorted_letters[8:16] # high 8
f3 = sorted_letters[16:22] # middle-upper 6
f4 = sorted_letters[22:27] # middle-lower 5
f5 = sorted_letters[27:32] # low 5
f6 = sorted_letters[-6:] # lowest 6
most_common_letters_m = [f1, f2, f3, f4, f5, f6]
```
这样,`most_common_letters_m`就被分成了6个部分,分别对应6个频率段。其中,`f1`表示频率最高的前8个字母,频率大于10%;`f2`表示频率次高的8个字母;`f3`表示频率居中偏上的6个字母;`f4`表示频率居中偏下的5个字母;`f5`表示频率最低的5个字母;`f6`表示频率最低的6个字母。
相关问题
def guess_key(cipher_text, words): letter_frequency = get_letter_frequency(cipher_text.lower()) sorted_letters = sorted(letter_frequency.keys(), key=lambda x: letter_frequency[x], reverse=True) most_common_letters = sorted_letters[:6] for i in range(len(most_common_letters)): for j in range(i+1, len(most_common_letters)): for k in range(j+1, len(most_common_letters)): key = {most_common_letters[i]: 'e', most_common_letters[j]: 't', most_common_letters[k]: 'a'} decrypted_text = decrypt(cipher_text, key) if is_plaintext(decrypted_text, words): return key
这段代码实现了一个猜测密钥的算法,它接受两个参数:`cipher_text`(密文)和 `words`(单词列表),并返回一个字典类型的对象,表示猜测的密钥。
算法的实现原理是首先统计密文中每个字母出现的频率,然后按照频率从高到低排序,选取出现频率最高的 6 个字母作为备选字母。接下来,对于这 6 个字母中的任意 3 个字母,猜测它们分别对应明文中的 'e'、't'、'a' 三个字母,得到一个可能的密钥。然后使用这个密钥解密密文,判断解密后的明文是否合法,如果合法,则返回这个密钥。
需要注意的是,这个算法可能会产生错误的猜测,因为只是根据字母频率进行猜测,没有考虑其他语言特征(如单词长度、语法结构等)。因此,猜测的密钥不一定是正确的,需要进一步进行验证和调整。
def guess_key1(cipher_text, words): letter_frequency = get_letter_frequency(cipher_text.lower()) sorted_letters = sorted(letter_frequency.keys(), key=lambda x: letter_frequency[x], reverse=True) # paixu most_common_letters = sorted_letters[:6] # first 6 for i in range(len(most_common_letters)): for j in range(i+1, len(most_common_letters)): for k in range(j+1, len(most_common_letters)): key = {most_common_letters[i]: 'e', most_common_letters[j]: 't', most_common_letters[k]: 'a'} . for letter in sorted_letters: if letter not in key: key.update() 补充最后一行的key.update,使未被收入进key中的字母被合并入key中
可以将最后一行的key.update()修改为以下代码:
```
for letter in sorted_letters:
if letter not in key:
key[letter] = ''
```
这样未被收入进key中的字母会被加入到key中,并且对应的值为'',即空字符串。这样做的目的是为了后续使用key解密时,如果密文中出现了未被收录在key中的字母,可以将其直接输出而不需要进行解密。
阅读全文