0

正如标题所示,我目前正在使用 Python 开发 BASIC 模拟器。这个程序应该打印“成功”或“无限循环”,这取决于哪个是真的。这是我的代码:

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
  while True:
    if location==len(prog)-1: return "success"
    else: return "infinite loop"
    T = prog.split()[location]
    location = findLine(prog, T)

FindLine 应该接受这样的输入:findLine(['10 GOTO 20', '20 END'], '20') 并输出出现目标的 prog 的索引。
execute 应该接受这样的输入: execute(['10 GOTO 21', '21 GOTO 37', '37 GOTO 21', '40 END'])

问题是,这段代码的“def execute(prog)”部分被破坏了,我需要一些帮助来修复它,这样它才能完成我之前描述的操作。任何有关调试的帮助将不胜感激,如果这有点含糊,我深表歉意——我不太确定要写什么。

4

1 回答 1

3

您应该尝试在调试器中逐步执行您的代码,看看会发生什么。或者只是在精神上做。

首先,您设置location为 0。然后,您查看它是否等于行数。如果是,则返回成功,否则,返回无限循环。你如何期望接下来的两行被执行?

我认为您应该重新设计检测无限循环的方式。当前不在最后一行不是充分条件......如果您的解释器只处理GOTO,那么两次到达同一行可能是一个很好的提示。但是如果你实现更多的逻辑,那么你应该考虑检测你到达每一行的次数,并在上面设置一个阈值。

于 2013-04-05T11:34:27.403 回答