2016-11-05 2 views
1

私はプログラミングにはまったく触れられておらず、University of Waterlooの無料Pythonコースに取り組んでいます。私は現在Section 15Aに固執しています。そこで、私はBASICシミュレータを書く必要があります。私は「Smart Simulation」というタイトルのセクションで作業しています。ここでBASICプログラムを実行するコードを書いています。Python 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のビジュアライザを通じてこのコードを実行した、と私がいる問題は、それがsuccessを返すべきであるとき、それはinfinite loopを返すされていることです。彼らの自動化年生は、これまでのところ、以下の二つの入力で自分のコードをテストしました:それが、「無限ループ」の正しい答えになりますが、execute(['5 GOTO 30', '10 GOTO 20', '20 GOTO 10', '30 GOTO 40', '40 END'])の第二の入力はまた、「無限ループ」を返している

execute(['10 GOTO 21', '21 GOTO 37', '37 GOTO 21', '40 END']) 「成功」を返します。

プログラムがループしているかどうかを判断するにはより良い方法があるかもしれませんが、私がコースを設定してくれたヒントに従っています。私は彼らが私に期待する方法で完了できるようにしたいと思いますに。私は真剣に誰もがこれを持っている可能性がある入力を感謝します!私はこれに固執して、しばらく試してみて、私はそれを動作させるために何をすべきか分かりませんので、私の髪を引っ張っています。提供されているお手伝いをありがとう! :)

+0

あなたは 'while True:'を使っていると思います。 Python 3と2の場合、 'while not == len(prog)-1'を使用しなければならず、ループの終了後にprint( 'success')'または 'print" success "'を実行しなければなりません。私が間違っているか教えてください。 – MaxLunar

答えて

1

あなたはほとんどそれをしました!あなたがでそれをテストする前に問題が訪れたとしてあなたは新しいlocationをマークしているラインに

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

ある

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

ありがとう!この命令を修正するとコードが機能し、私はその演習に合格しました。君たちは最高です! – Ryan

+0

あなたの歓迎;) –

0

:あなただけの割り当て順序を置き忘れ

、それは次のようにする必要がありますループの先頭これらの2行の順序を変更するだけです。新しいlocationに更新する前に、の現在の番号をlocationに変更してください。