• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

while 반복문 실행순서 문의

20.04.11 22:55 작성 조회수 92

1

    pos = 0

    while True:

        if pos+1 > len(list):

            break

        if list[pos] in operator:

            temp = list[pos-1] + list[pos] + list[pos+1]

            #print('temp',temp)

            del list[0:3]

            #print('del',list)

            list.insert(0,str(eval(temp)))

            #print('list',list)

            pos = 0

        pos += 1

위 예제가 while 반복문은 세개 문단(?)으로 되어 있다고 한다면,

1) 1번 조건 확인 -> 2번조건 만족할때까지 계속반복 -> 3번 pos +=1 -> 1번조건 확인 반복순서인가요? 아니면

2) 1번 조건 확인 -> 2번조건 첫번째수행 -> 3번 pos +=1 수행 -> 1번 조건 확인 -> 2번조건 두번째수행 -> 3번 pos +=1 번 -> 다될때까지 반복 인가요? 

2번 논리로 실행된다고 하면  2번째 문단 끝이 pos =0이고 3번째 시작이 pos +=1을 해주는게 이해가 안되서 1)로 작동하는거 같은데, 확실치 않아서 문의드립니다. 감사합니다. 

답변 1

답변을 작성해보세요.

0

일단 위의 로직의 궁극적인 목적에 대해서 생각해보겠습니다. 예를 들어 list 에 ["10", "+", "20", "-", "5"] 가 있다고 가정을 할때 로직의 목표는 위의 리스트 값을 10 + 20 을 해서 10 의 자리에 넣을려고 하는겁니다. 그러면 ["30", "-", "5"] 가 되겠죠? 그리고 위의 반복문을 계속 돌아 최종적으로 [25] 가 남게 하기 위한 목적입니다. 그렇게 하기 위해서 일단 로직은 무한 루프로 while True로 돌게 됩니다.

먼저 이 로직은 현재 위치 pos + 1 이 총 리스트의 갯수 len(list) 보다 크면 종료해야 합니다. 이 말은 [25] 처럼 리스트의 갯수가 1개가 남았을때 종료된다는 이야기 인데 pos 는 항상 루프 마지막에 pos += 1 이 되기 때문에 루프를 한바퀴 돌았다면 pos는 최소 1이 되고 1+1 > len([25]) 의 조건에서 탈출하게 되어있습니다.

if list[pos] in operator:

구문은 입력이 정상적으로 되었다면 10 + 20 처럼 숫자, 연산자, 숫자의 모습으로 되어있을겁니다.(사실 엄밀히 따지면 이렇게 입력되지 않은 예외처리를 해야 좀 더 완성도 있는 로직이 됩니다만 여기선 생략되었습니다.) 

말씀하신 2번째 문단 끝에서 pos=0 으로 초기화 하는 이유는 10, +, 20, -, 5 가 30, -, 5 로 리스트 값이 변하기 때문에 다시 처음부터 검색을 하기 위함입니다. 그러면 30, -, 5 에서 30은 숫자가 확실하니 3번째 문단에서 pos+=1 을 해도 상관이 없게 됩니다.

사실 이게 말이 더 어려운데 궁극적인 목적이 무엇인지를 잘 생각해봐야 합니다. 도움이 되셨으면 좋겠습니다.