이 포스팅은 분기문 안에 있는 또 다른 분기문에서 else나 return 등을 이용해 구분을 해주지 않고 왜 오류가 나는지에 대해 한참 고민하다 조언을 듣고 유레카를 외친 경험으로 인해 생겨나게 됨.
우선 분기문에 대해 짚고 가자
분기문이란
파이썬 분기문은 프로그램 중 참(True) 또는 거짓(False)을 반환하는 조건식의 결과에 따라 프로그램을 어떠한 경로로 실행할지 를 결정하는 문이다. 0이 아니거나, null이 아닐 경우에 참(True) 값으로 판단하며, 그 반대의 경우에는 거짓(False) 값으로 판단한다.
그림으로 표현하면 아래와 같다.
개념을 자세히 보지 않았던 탓일까 이런 실수를 하고 말았다.
위 코드는 얼핏 보면
elif 'empty' in command : command 안에 'empty' 가 있을 때,
if not stack: : stack 함수가 비어있으면
result.append(1) : result에 1을 추가해라
result.append(0) : 아니면 result에 0을 추가해라
라고 잘못 해석할 수도 있다. 내가 그랬다.
위 해석이 맞았다면 실행했을 때 조건에 의해서 둘 중 하나만(1 또는 0) result에 추가가 되었어야 했다.하지만 위 코드는 그냥 1과 0이 전부 추가가 되어버린다.왜냐하면 가장 마지막 코드인 result.append(0)에 else나 return 등을 통해 구문을 구분하지 않았기 때문이다.
바른 해석
elif 'empty' in command : command 안에 'empty'가 있을 때,
if not stack: : stack 함수가 비어있으면
result.append(1) : result에 1을 추가해라
<끝>
result.append(0) : result에 0을 추가해라
if not stack 부분과 가장 마지막 줄은 그냥 별개의 코드이다. 같은 조건문으로서 연결되어있는 것이 아니다. 단순히 if문이 끝나면 순번대로 이어서 실행되는 다음 문장일 뿐이다.
그림으로 표현하면 이렇다. elif문 분기 안에 또 다른 분기 if문 이 있고 그 밑에 append라는 다른 분기가 하나 더 있는 셈이다.
위 사진처럼 else를 이용해서 분기를 확실히 나눠주어야 if 문으로만 끝내주어야 원하는 값을 하나만 담을 수 있다.
그럼 이렇게 된다.
'Python' 카테고리의 다른 글
Pandas 기본 파헤치기(DataFrame) (0) | 2020.09.08 |
---|---|
Pandas 기본 파헤치기(Series) (0) | 2020.09.07 |
Python(6) - 반복문(while, for, break, continue) (0) | 2020.08.21 |
Python(5) - 조건문 알아보기(If, else, elif, pass) (0) | 2020.08.20 |
Python(4) - List(리스트)란? (0) | 2020.08.12 |