0

タイトルが示すように、私は現在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 コードの入力をリストに変換します。2 番目の関数である findLine も、入力と等しい文字列を含むアイテムを検索するという点で、本来の目的を果たします。しかし、最後の機能は、仕事に行くことができません。私は何をしなければならないかを知っています。それは、その一部が 2 回訪問されたかどうかを確認することです。while ループが存在するため、これを行う方法がわかりません。この結果、その関数の後半は単なるプレースホルダーです。これを解決する方法を教えていただければ幸いです。ありがとう。

4

2 に答える 2

0

訪問した場所のリストを保持し (既にこれを行っています)、goto に遭遇したときに、それが既に訪問した行にあるかどうかを確認し、訪問した場合は終了します。

現在の間違いの 1 つは、プログラムと同じ長さのリストを作成することです。それはかなり無意味です。代わりに、訪問した行番号のリストを保持し、確認してください

if current_line in visited:
于 2013-04-11T04:42:10.237 に答える
0

ループ内で検出されたときに、訪問済みリスト内の行が true であることを宣言する if ステートメントを追加してみてください。これが私の解決策です:

    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)
于 2013-09-12T23:20:55.970 に答える