Within a simple finite state machine, Error : 'int' object is not iteratable

Within a simple finite state machine, Error : 'int' object is not iteratable

我正在尝试创建一个读取状态、转换和字符串的有限状态机。我试图在没有对象的情况下创建它。一切正常,直到我的 for 循环。但是,一旦循环开始,我就会收到错误消息:

line 42, in <module>
    for I in len (Strings):
TypeError: 'int' object is not iterable

为什么会这样?如有任何提示,我们将不胜感激。

Sfile = open("states.txt","r")
States = []

ReadLine = Sfile.readline()
while ReadLine != "":
    A, B, C = ReadLine.split(",")
    States.append((A, bool(int(B)), bool(int(C))))
    ReadLine = Sfile.readline()
print States, "\n"
Sfile.close()



Tfile = open("transistions.txt","r")
Transitions = []

ReadLine = Tfile.readline()
while ReadLine != "":
    ReadLine = ReadLine.rstrip()
    Tran4, Tran5, Tran6 = ReadLine.split(",")
    Transitions.append((Tran4, Tran5, Tran6))
    ReadLine = Tfile.readline()
print Transitions
Tfile.close()

Strfile = open("strings2.txt","r")
Strings = []

ReadLine = Strfile.readline()
while ReadLine != "":
    Readline = ReadLine.rstrip()
    Strings.append(Readline)
    ReadLine = Strfile.readline()

print Strings, '\n'
Strfile.close()


for I in len (Strings):
       for C in Strings[I]:
           Start = '0'
           Current = Start
           if C in Strings == '0':
                Current = A
           else:
                Current = State

print Current...

我的不同文本文件包含:

状态2,1,0 状态 3,0,1 状态 4,1,0

状态 1,0,状态 2 状态2,1,状态3 状态 3,0,状态 4

10100101 1001 10010

你想要i in range(len(Strings))。 Len returns 一个整数,比如 13 -- in 想要一个向量之类的东西。 range(13) 给你一个向量 [0,1,2,3,4,5,6,7,8,9,10,11,12].

小测验:为什么最后一个数字是12?

您需要将数字转换为字符串,因为您无法提取 int 的第一个数字。所以 str(1234)='1234' '1234'[0]='1'

您正在尝试迭代一个整数,它应该是

for I in range(len(Strings))

您不能遍历整数。我想你的意思是迭代 range 对象 range(len(Strings))。这将起作用,因为 range 对象是可迭代的,而 int 不是。

len(s) 给你一个整数,你不能迭代它。如果要遍历字符串集合,请使用 for s in strings

你不能遍历一个数字或任何其他单一对象,你需要一个像列表这样的复合对象来做到这一点。在这种情况下看起来你想要这个

for words in Strings:
    for C in words:
        ...