0

タイトルが示すように、私は現在、Python で BASIC シミュレーターに取り組んでいます。このプログラムは、どちらが真であるかに応じて、「成功」または「無限ループ」のいずれかを出力する必要があります。これが私のコードです:

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
  while True:
    if location==len(prog)-1: return "success"
    else: return "infinite loop"
    T = prog.split()[location]
    location = findLine(prog, T)

FindLine は、findLine(['10 GOTO 20', '20 END'], '20') のような入力を受け取り、ターゲットが現れる prog のインデックスを出力します。
execute は次のような入力を受け取る必要があります: execute(['10 GOTO 21', '21 GOTO 37', '37 GOTO 21', '40 END'])

問題は、このコードの「def execute(prog)」部分が壊れていることです。前に説明したように修正するには、何らかの助けが必要です。これをデバッグするための助けをいただければ幸いです。これが少しあいまいである場合はお詫び申し上げます。何を書くべきかよくわかりません。

4

1 に答える 1

3

デバッガーでコードをステップごとに実行して、何が起こるかを確認する必要があります。または、単に精神的にそれを行います。

まず、location0 に設定します。次に、それが行数に等しいかどうかを調べます。そうであれば、あなたはsuccessを返し、そうでなければ、あなたは無限ループを返します。次の 2 行がどのように実行されると思いますか?

無限ループを検出する方法を再設計する必要があると思います。現在最後の行にいないことは十分な条件ではありません... インタープリターが のみを処理する場合GOTO、同じ行に 2 回到達することは良いヒントになる可能性があります。ただし、さらにロジックを実装する場合は、各行に到達した回数を検出することを検討し、それにしきい値を設定する必要があります。

于 2013-04-05T11:34:27.403 に答える