我对编程很陌生,并且一直致力于滑铁卢大学的免费Python课程。我目前停留在Section 15A,我必须编写一个BASIC模拟器。我正在研究标题为“智能模拟”的部分,我正在编写执行BASIC程序的代码。
部分练习是必须确定程序是否成功完成,或者是否进入无限循环。以下是本节的当前代码:
def findLine(prog, target):
for x in range(0,len(prog)):
prog2 = prog[x].split()
start = prog2[0]
if len(prog2) > 2:
end = prog2[2]
if start == target:
return x
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"
currentLine = prog[location]
currentLine = currentLine.split()
T = currentLine[2]
location = findLine(prog, T)
visited[location] = True
所以我通过他们的Python可视化工具运行了这个代码,而我遇到的问题是它应该返回infinite loop
时返回success
。到目前为止,他们的自动分级器使用以下两个输入来测试我的代码:
execute(['10 GOTO 21', '21 GOTO 37', '37 GOTO 21', '40 END'])
导致“无限循环”的正确答案,但execute(['5 GOTO 30', '10 GOTO 20', '20 GOTO 10', '30 GOTO 40', '40 END'])
的第二个输入也返回“无限循环”,尽管它应该返回“成功”。
可能有更好的方法来确定程序是否正在循环,但我已经按照课程给我的提示进行设置,我希望能够按照他们期望我的方式完成它。我非常感谢任何人可能对此提出的任何意见!我一直坚持这个并试验了一段时间,我正在拔头发,因为我无法弄清楚要做些什么才能使它发挥作用。感谢您提供的任何帮助! :)
答案 0 :(得分:1)
你几乎做到了!
你只是错放了作业顺序,它应该是:
T = currentLine[2]
visited[location] = True
location = findLine(prog, T)
答案 1 :(得分:0)
问题出在
行Copier
在您在循环顶部测试之前,您已将新mvn install:install-file -Dfile=path/to/okhttp-3.4.2.jar -DgroupId=com.squareup.okhttp3 -DartifactId=okhttp -Dversion=3.4.2 -Dpackaging=jar
标记为已访问。只需更改这两行的顺序即可。在更新为新 location = findLine(prog, T)
visited[location] = True
之前,请将当前 location
标记为已访问。