Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何保存我已经遇到的数字列表?_Python_Python 3.x - Fatal编程技术网

Python 如何保存我已经遇到的数字列表?

Python 如何保存我已经遇到的数字列表?,python,python-3.x,Python,Python 3.x,正如标题所示,我目前正在用Python开发一个基本的模拟器。以下是我针对此问题的代码: def getBASIC(): l = [] x = 1 while x == 1: i = input() l.append(i) if len(i.split()) != 3: x = 0 return l def findLine(prog, target): for l in range(0, len(prog)):

正如标题所示,我目前正在用Python开发一个基本的模拟器。以下是我针对此问题的代码:

def getBASIC():
   l = []
   x = 1
   while x == 1:
      i = input()
      l.append(i)
      if len(i.split()) != 3:
         x = 0
   return l

def findLine(prog, target):
   for l in range(0, len(prog)):
      progX = prog[l].split()
      if progX[0] == target:
          return l

 def execute(prog):
      location = 0
      visited = [False] * len(prog)
      while True:
        T = prog[location].split()[2]
        location = findLine(prog, T)
        visited[location] = True
      if visited[len(visited)-1] == False:
          return "infinite loop"
      else:
          return "success"

第一个函数完成它想要做的事情——将基本代码的输入转换成一个列表。第二个函数findLine也完成了它的预期任务,它查找包含与输入相等的字符串的项。然而,最后一个功能,我无法开始工作。我知道我必须做什么,那就是检查它的一部分是否被访问过两次。由于while循环的存在,我不知道如何做到这一点。因此,该函数的后半部分只是占位符。如果你能帮我解决这个问题,我将不胜感激。谢谢。

您保留了一个已访问过的地方的列表(您已经这样做了),然后当您遇到goto时,您检查它是否与已访问过的线路连接,如果已访问过,则退出

现在的一个错误是,您制作了一个与程序一样长的列表。那是毫无意义的。只需保留一个访问过的行号列表,并与

if current_line in visited:

尝试添加一条if语句,在循环中遇到已访问列表中的一行时,将其声明为true。这是我的解决方案:

    def execute(prog):
       location = 0
       visited=[False]*len(prog)
   while True:
           if location==len(prog)-1:
           return "success"
       if visited[location]==True:
           return "infinite loop"
       if visited[location]==False:
           visited[location]=True
       line2strings=prog[location].split()
       T=line2strings[-1]
       location=findLine(prog, T)

请使用一个能真实反映你的问题的标题。两件事:1。在循环中,如果到达最后一行,请设置退出条件。2.而不是使用<代码>而真正的< /代码>,对程序可以执行的步骤的数量进行限制(例如:“代码> > i(在范围(1000000)< /代码>)@查尔斯布鲁内特”,我意识到这在技术上是重复的,但我在很久以前就提出过这个问题,任何人都可以真正考虑回答它。除此之外,我已经接受了你的回答。问题是,虽然您的回答很有帮助,并给了我一些指导,但它没有包含任何代码,我一直在实际编写代码。看起来您的第三个函数正在尝试检测您的程序是否将永远循环或最终停止。您可能希望跳过该功能,因为不可能解决图灵完整语言(如BASIC)的问题。我不太确定这将如何工作,但在循环该列表中的项数后,列表中的最后一项(结束)是否为false表示无限循环?不过,我不知道该怎么做。我可以实现什么使程序计算某个对象被访问的次数?@dan:“但是,在循环该列表中的项目数之后,列表中的最后一个项目(end)是否为false,这是否表示一个无限循环?”-我无法解析该问题。@dan:“我可以实施什么来计算访问次数?“您有一个字典,其中列出了访问过的内容,并且访问了很多次。我以前尝试过最后一个item==False方法,但只有当程序检查它是否循环了列表的长度时,该方法才会起作用。”。我怎么能这样做?或者,我如何检查一行是否被重复访问?@Dan:我不知道你为什么要检查最后一项==False。“我怎样才能检查一行是否被重复访问”-我已经回答过:你有一本字典,上面列出了访问过的内容,以及访问过的次数。