【问题标题】:Within a simple finite state machine, Error : 'int' object is not iteratable在简单的有限状态机中,错误:'int' 对象不可迭代
【发布时间】:2016-04-30 18:13:26
【问题描述】:

我正在尝试创建一个读取状态、转换和字符串的有限状态机。我正在尝试在没有对象的情况下创建它。一切正常,直到我的 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

State2,1,0 状态3,0,1 状态4,1,0

  • transitions.txt

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

  • strings2.txt

10100101 1001 10010

【问题讨论】:

  • len(Strings) 将返回一个整数 - 字符串的长度。你的意思是for i in Strings 吗?
  • for I in len (Strings): --> for I in range(len (Strings)):

标签: python int fsm


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      for I in range(len(Strings))
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              猜你喜欢
              • 2020-06-10
              • 1970-01-01
              • 1970-01-01
              • 2021-03-02
              • 2018-08-17
              • 2020-11-28
              • 1970-01-01
              • 2022-12-06
              • 1970-01-01
              相关资源
              最近更新 更多