Message='int' object is not subscriptable Source=E:\1daer\mmxdzy\1\dzy1\dzy1.py StackTrace: File "E:\1daer\mmxdzy\1\dzy1\dzy1.py", line 37, in guess_key1 key[most_common_letters_m[i][row[i][j]]] = mf[i][j] ~~~~~~^^^ File "E:\1daer\mmxdzy\1\dzy1\dzy1.py", line 66, in <module> (Current frame) print(guess_key1(cipher_text, words)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: 'int' object is not subscriptable
时间: 2023-08-04 10:07:19 浏览: 161
这个错误通常是由于使用了 `[]` 运算符来访问一个整数类型的变量的某个元素,而整数类型不支持 `[]` 运算符来访问其元素所导致的。在这段代码中,可能是 `row` 变量或 `j` 变量的类型是整数,而不是列表类型,所以无法使用 `[]` 运算符来访问它们的元素。
为了解决这个问题,可以检查 `row` 变量和 `j` 变量的类型,并确保它们是列表类型,才可以使用 `[]` 运算符来访问它们的元素。
以下是修改后的代码示例:
```python
import itertools
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)
most_common_letters_m = [sorted_letters[:8], sorted_letters[8:16], sorted_letters[-10:]]
f1 = ['e']
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']
mf = [f1, f2, f3, f4, f5, f6]
mp = [[j for j in range(len(mf[i]))] for i in range(len(mf))]
flag = True
while(flag):
key = {}
i = 0
for row in mp:
for perm in itertools.permutations(row):
for j in range(len(mf[i])):
if isinstance(row, list) and isinstance(j, int):
key[most_common_letters_m[i][perm[j]]] = mf[i][j]
else:
raise TypeError('Invalid type for row or j')
i += 1
decrypted_text = decrypt(cipher_text, key)
if is_plaintext(decrypted_text, words):
flag=False
return key
return None
```
在这个代码示例中,我添加了一个类型检查,如果 `row` 或 `j` 的类型不是列表或整数,则会引发一个 `TypeError` 异常。
阅读全文