正如标题所示,我目前正在使用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索引。
执行应该采取这样的输入:执行(['10 GOTO 21','21 GOTO 37','37 GOTO 21','40 END'])
问题是,此代码的“def execute(prog)”部分被破坏了,我需要一些帮助修复它,以便它完成我之前描述的操作。任何有关调试的帮助都会受到赞赏,如果这有点模糊,我会道歉 - 我不太清楚要写什么。
答案 0 :(得分:3)
您应该尝试在调试器中逐步执行代码以查看会发生什么。或者只是做到精神上。
首先,将location
设置为0.然后,查看它是否等于行数。如果是,则返回成功,否则返回无限循环。如何期望下两行被执行?
我认为你应该重新设计检测无限循环的方式。目前不在最后一行并不是一个充分的条件......如果你的翻译只处理GOTO
,那么两次到达同一行可能是一个很好的提示。但是如果你实现了更多的逻辑,那么你应该考虑检测你到达每一行的次数,并设置一个阈值。