2013-04-05 3 views
0

현재 제목에서 알 수 있듯이 나는 Python으로 BASIC 시뮬레이터를 연구 중이다. 이 프로그램은 사실에 따라 "성공"또는 "무한 루프"를 인쇄해야합니다. 여기 내 코드는 :Python 3 - BASIC Simulator

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의 인덱스.
같이 입력을해야 실행할 다음 "DEF 실행

문제 ([ '10 GOTO 21', '21 GOTO 37 ', '37 GOTO 21', '40 END를 '])을 실행 (PROG) "부분이 깨져서 이전에 설명했던 내용을 해결하도록 도움이 필요합니다. 이 디버깅에 도움이 될 것입니다 및 사과 조금 애매한 경우 - 나는 무엇을 써야하는지 잘 모르겠습니다.

+0

정확히 무엇이 문제입니까? 깨진 *이 무슨 뜻이야? 무슨 일이 일어나고 있는지, 당신이 기대하는 바를 설명해 주시겠습니까? –

+0

@CharlesBrunet 깨진 점은 코드가 정상적으로 작동하지 않는다는 것을 의미합니다. 결과는 "성공"을 리턴해야 할 때 "무한 루프"를 리턴한다는 것입니다. – Dan

답변

3

디버거에서 단계별로 코드를 실행하여 어떤 일이 일어나는지 확인해야합니다. 아니면 그냥 정신적으로하십시오.

먼저 location을 0으로 설정합니다. 그러면 줄 수와 같아집니다. 그렇다면 성공을 반환하고 그렇지 않은 경우 무한 루프을 반환합니다. 다음 두 라인이 어떻게 실행될 것이라고 기대하십니까?

무한 루프를 감지하는 방법을 다시 설계해야한다고 생각합니다. 현재 마지막 줄에 있지 않은 것은 충분한 조건이 아닙니다. 통역사가 GOTO 만 처리하면 같은 줄에 두 번 도달하면 좋은 힌트가 될 수 있습니다. 그러나 더 많은 로직을 구현한다면 각 라인에 도달하는 횟수를 감지하고 그 임계 값을 설정해야합니다.

+0

고맙습니다. – Dan