正如标题所示,我目前正在使用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循环的存在,我无法弄清楚如何做到这一点。因此,该函数的后半部分只是占位符。如果你能帮我弄清楚如何解决这个问题,我将不胜感激。感谢。
答案 0 :(得分:0)
您保留已访问过的地点列表(您已经这样做了),然后当您遇到goto时,检查它是否对已经访问过的行进行了检查,如果已访问过该行,则退出
现在的一个错误就是你制作了一个与程序一样长的列表。这毫无意义。只需记下访问过的行号列表,然后查看
if current_line in visited:
答案 1 :(得分:0)
尝试添加if语句,声明在循环中遇到访问列表中的一行时为true。这是我的解决方案:
def execute(prog):
location = 0
visited=[False]*len(prog)
while True:
if location==len(prog)-1:
return "success"
if visited[location]==True:
return "infinite loop"
if visited[location]==False:
visited[location]=True
line2strings=prog[location].split()
T=line2strings[-1]
location=findLine(prog, T)