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...
我的不同文本文件包含:
- states.txt
状态2,1,0
状态 3,0,1
状态 4,1,0
- transitions.txt
状态 1,0,状态 2
状态2,1,状态3
状态 3,0,状态 4
- strings2.txt
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:
...
我正在尝试创建一个读取状态、转换和字符串的有限状态机。我试图在没有对象的情况下创建它。一切正常,直到我的 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...
我的不同文本文件包含:
- states.txt
状态2,1,0 状态 3,0,1 状态 4,1,0
- transitions.txt
状态 1,0,状态 2 状态2,1,状态3 状态 3,0,状态 4
- strings2.txt
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:
...