2016-11-05 2 views
1

Ich bin neu in der Programmierung und habe an einem kostenlosen Python Kurs von der University of Waterloo gearbeitet. Ich bin derzeit auf Section 15A stecken, wo ich einen BASIC-Simulator schreiben muss. Ich arbeite an dem Abschnitt mit dem Titel "Smart Simulation", wo ich den Code zum Ausführen des BASIC-Programms schreibe.Python BASIC Simulator

Ein Teil der Übung besteht darin, festzustellen, ob das Programm erfolgreich abgeschlossen wurde oder ob es in eine Endlosschleife eingetreten ist. Hier ist der aktuelle Code, den ich für diesen Abschnitt habe:

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 

Also ich diesen Code durch ihren Python Visualizer ausgeführt habe, und das Problem, das ich habe, ist, dass es infinite loop zurück, wenn es success zurückkehren soll. Ihr automatisierter Grader hat bisher getestet meinen Code mit den folgenden zwei Eingängen:

execute(['10 GOTO 21', '21 GOTO 37', '37 GOTO 21', '40 END']), die in der richtigen Antwort „Endlosschleife“ führt, aber der zweite Eingang der execute(['5 GOTO 30', '10 GOTO 20', '20 GOTO 10', '30 GOTO 40', '40 END']) wird auch als „Endlosschleife“, obwohl es Rückkehr sollte "Erfolg" zurückgeben.

Es mag bessere Wege geben, festzustellen, ob das Programm läuft, aber ich habe die Hinweise, die der Kurs mir gegeben hat, um es einzurichten, und ich möchte es so vervollständigen können, wie sie es erwarten zu. Ich schätze jeden Input, den jemand dafür haben könnte! Ich bin seit einiger Zeit daran fest und experimentiere und ziehe mir die Haare aus, weil ich einfach nicht herausfinden kann, was ich machen soll, damit es funktioniert. Danke für jede Hilfe, die angeboten wird! :)

+0

Ich nehme an, weil Sie 'while True:' verwenden. Sie müssen 'while not location == len (prog) -1' verwenden, und nach der Schleife endet' print ('success') 'oder' print 'success "' (für Python 3 und 2). Sag mir, ob ich falsch bin. – MaxLunar

Antwort

1

Du hast es fast geschafft!

Sie nur die Zuweisungsreihenfolge verloren geht, sollte es so sein:

T = currentLine[2] 
    visited[location] = True 
    location = findLine(prog, T) 
+0

Vielen Dank! Durch das Korrigieren dieser Bestellung funktionierte mein Code und ich bestand die Übung. Ihr seid die Besten! – Ryan

+0

Ihre Begrüßung;) –

0

Das Problem ist in den Linien

location = findLine(prog, T) 
    visited[location] = True 

Sie markiert die neue location als besucht, bevor Sie es testen auf die Spitze der Schleife. Ändern Sie einfach die Reihenfolge dieser zwei Zeilen. Markieren Sie die aktuellelocation wie besucht, bevor Sie auf die neue location aktualisieren.