Message='int' object is not iterable Source=E:\1daer\mmxdzy\1\dzy1\dzy1.py StackTrace: File "E:\1daer\mmxdzy\1\dzy1\dzy1.py", line 37, in <listcomp> perm_mf = [[mf[i][j] for j in perm_list[i]] for i in range(len(mf))] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\1daer\mmxdzy\1\dzy1\dzy1.py", line 37, in guess_key1 perm_mf = [[mf[i][j] for j in perm_list[i]] for i in range(len(mf))] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\1daer\mmxdzy\1\dzy1\dzy1.py", line 85, in <module> (Current frame) print(guess_key1(cipher_text, words)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: 'int' object is not iterable
时间: 2023-08-03 12:05:04 浏览: 141
这个错误提示是因为程序中的`perm_list`变量是一个整数,不能迭代。这可能是因为`itertools.product()`函数返回的元组中有一个元素是整数,而不是列表,导致程序在后面的列表推导式中出错。
你可以在程序中添加一个判断,检查`perm_list`是否是列表,如果不是列表,就跳过当前循环。具体的修改如下所示:
```python
import itertools
def guess_key1(cipher_text, words):
# 定义f1-f6和mf
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]
# 遍历所有情况
for perm in itertools.product(*[[j for j in range(len(mf[i]))] for i in range(len(mf))]):
if not isinstance(perm[0], list):
continue
perm_mf = [[mf[i][j] for j in perm[i]] for i in range(len(mf))]
# 检查是否符合条件
if check_text(cipher_text, words, perm_mf):
return perm_mf
return None
```
在修改后的程序中,我们添加了一个判断语句`if not isinstance(perm[0], list): continue`,用于检查`perm`中第一个元素是否是列表。如果不是列表,就跳过当前循环。这样可以避免程序在后面的列表推导式中出现迭代整数的错误。
阅读全文