【问题标题】:Python 3 - BASIC SimulatorPython 3 - 基本模拟器
【发布时间】:2013-03-27 18:50:45
【问题描述】:

正如标题所示,我目前正在使用 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)”部分被破坏了,我需要一些帮助来修复它,这样它才能完成我之前描述的操作。任何有关调试的帮助都将不胜感激,如果这有点含糊,我们深表歉意——我不太确定要写什么。

【问题讨论】:

  • 到底是什么问题? 破碎是什么意思?您能否描述正在发生的事情以及您的预期?
  • @CharlesBrunet 坏了,我只是说代码没有按应有的方式运行。发生的事情是它应该返回“成功”时返回“无限循环”。

标签: python simulator basic


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    相关资源
    最近更新 更多