Python BASIC模拟器

时间:2016-11-05 15:39:25

标签: python infinite-loop

我对编程很陌生,并且一直致力于滑铁卢大学的免费Python课程。我目前停留在Section 15A,我必须编写一个BASIC模拟器。我正在研究标题为“智能模拟”的部分,我正在编写执行BASIC程序的代码。

部分练习是必须确定程序是否成功完成,或者是否进入无限循环。以下是本节的当前代码:

def findLine(prog, target):
   for x in range(0,len(prog)):
      prog2 = prog[x].split()
      start = prog2[0]
      if len(prog2) > 2:
         end = prog2[2]
      if start == target:
         return x


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"
      currentLine = prog[location]
      currentLine = currentLine.split()
      T = currentLine[2]
      location = findLine(prog, T)
      visited[location] = True

所以我通过他们的Python可视化工具运行了这个代码,而我遇到的问题是它应该返回infinite loop时返回success。到目前为止,他们的自动分级器使用以下两个输入来测试我的代码:

execute(['10 GOTO 21', '21 GOTO 37', '37 GOTO 21', '40 END'])导致“无限循环”的正确答案,但execute(['5 GOTO 30', '10 GOTO 20', '20 GOTO 10', '30 GOTO 40', '40 END'])的第二个输入也返回“无限循环”,尽管它应该返回“成功”。

可能有更好的方法来确定程序是否正在循环,但我已经按照课程给我的提示进行设置,我希望能够按照他们期望我的方式完成它。我非常感谢任何人可能对此提出的任何意见!我一直坚持这个并试验了一段时间,我正在拔头发,因为我无法弄清楚要做些什么才能使它发挥作用。感谢您提供的任何帮助! :)

2 个答案:

答案 0 :(得分:1)

你几乎做到了!

你只是错放了作业顺序,它应该是:

  T = currentLine[2]
  visited[location] = True
  location = findLine(prog, T)

答案 1 :(得分:0)

问题出在

Copier

在您在循环顶部测试之前,您已将新mvn install:install-file -Dfile=path/to/okhttp-3.4.2.jar -DgroupId=com.squareup.okhttp3 -DartifactId=okhttp -Dversion=3.4.2 -Dpackaging=jar 标记为已访问。只需更改这两行的顺序即可。在更新为新 location = findLine(prog, T) visited[location] = True 之前,请将当前 location标记为已访问。