【发布时间】:2013-04-10 15:30:26
【问题描述】:
正如标题所示,我目前正在使用 Python 开发 BASIC 模拟器。这是我解决这个问题的代码:
def getBASIC():
l = []
x = 1
while x == 1:
i = input()
l.append(i)
if len(i.split()) != 3:
x = 0
return l
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
visited = [False] * len(prog)
while True:
T = prog[location].split()[2]
location = findLine(prog, T)
visited[location] = True
if visited[len(visited)-1] == False:
return "infinite loop"
else:
return "success"
第一个函数做了它打算做的事情——将 BASIC 代码的输入转换成一个列表。第二个函数 findLine 也做了它打算做的事情,因为它找到包含等于输入的字符串的项目。然而,最后一个功能,我无法开始工作。我知道我必须做什么,那就是检查它的一部分是否被访问过两次。由于 while 循环的存在,我无法弄清楚如何做到这一点。因此,该函数的后半部分只是占位符。如果您能帮我弄清楚如何解决这个问题,将不胜感激。谢谢。
【问题讨论】:
-
Python 3 - BASIC Simulator 的可能重复项
-
请使用真正反映您的问题的标题。
-
两件事:1. 在你的循环中,如果你到达最后一行,则设置一个退出条件。 2. 不要使用
while True,而是限制程序可以执行的步数(例如:for i in range(1000000)) -
@CharlesBrunet 我意识到这在技术上是重复的,但是我很久以前提交了这个问题,以至于任何人都无法真正考虑回答它。除此之外,我已经接受了你的回答。问题是,虽然您的回答很有帮助并给了我一些指导,但它不包含任何代码,我坚持实际编写代码。
-
看起来您的第三个函数正在尝试检测您的程序是永远循环还是最终停止。您可能希望跳过该功能,因为不可能解决图灵完备语言(例如 BASIC)的 Halting Problem。
标签: python python-3.x