2013-04-05 89 views
0

正如标题所示,我目前正在Python中使用BASIC模拟器。这个程序应该打印“成功”或“无限循环”,这取决于哪一个是真的。这是我的代码:Python 3 - 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的在其中出现靶的指标。执行(['10 GOTO 21','21 GOTO 37','37 GOTO 21','40 END'])

问题是,“def execute(prog )“这段代码的一部分被破坏了,我需要一些帮助修复它,以便它能够完成我之前描述的内容。任何帮助调试这将不胜感激,并道歉,如果这有点模糊 - 我不太确定写什么。

+0

究竟是什么问题?你是什​​么意思?破* *?你能描述一下发生了什么,以及你期望的是什么? – 2013-04-05 11:25:49

+0

@CharlesBrunet通过破碎,我的意思是代码不能正常工作。发生的事情是它返回“成功”时返回“无限循环”。 – Dan 2013-04-05 11:29:10

回答

3

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

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

我认为你应该重新设计你探测无限循环的方式。目前不在最后一行不是一个充分的条件......如果你的翻译只处理GOTO,那么两次到达同一条线可能是一个很好的提示。但是如果你实现更多的逻辑,那么你应该考虑检测你到达每条线路的次数,并设置一个门槛。

+0

谢谢你。 – Dan 2013-04-05 11:44:16