如何保留我已遇到的数字列表?

时间:2013-04-10 15:30:26

标签: python python-3.x

正如标题所示,我目前正在使用Python中的BASIC模拟器。这是我的问题代码:

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"

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

2 个答案:

答案 0 :(得分:0)

您保留已访问过的地点列表(您已经这样做了),然后当您遇到goto时,检查它是否对已经访问过的行进行了检查,如果已访问过该行,则退出

现在的一个错误就是你制作了一个与程序一样长的列表。这毫无意义。只需记下访问过的行号列表,然后查看

if current_line in visited:

答案 1 :(得分:0)

尝试添加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)