Araina's Blog
위 두 코드를 실행해 보면, 결과가 모두 동일하다. 여기서 주의할 점은, "왜 if 문을 2개로 나누었는데도 print 문 두 개가 모두 실행되는가?"라는 질문에 대한 것이다. 일단 파이썬에서 사용되는 or는 일반적으로 사용되는 논리 연산자, || 를 대신하는 역할을 한다는 것을 알아두고 시작하자. 그럼 이제 위의 코드를 해석해본다면, 먼저 month라는 변수에 12라는 정수 값을 저장했다. 그리고 첫 번째 if문에서 month 값이 2인가 아닌가를 검사했다. 이제 else 문으로 들어가 2번째 if 문에서 검사를 시작하고, 여기서부터 문제가 발생한다.
위의 문장을 해석할 때, "month의 값이 1 또는 3 또는 5 또는 7 또는 8 또는 10 또는 12와 같은가?"라고 해석하는 순간 틀린 것이다. 위의 조건문은 month의 값이 어떤 값인가를 따지는 것이 아니라 month의 타입을 따지는 조건문이다. 즉, "month(숫자)가 1(숫자) 또는 3(숫자) 또는 5(숫자) 또는 7(숫자) 또는 8(숫자) 또는 10(숫자) 또는 12(숫자)와 같은가?"를 검사하고 있는 것이다. 이를 다시 풀어보면, "숫자가 숫자 또는 숫자 또는 숫자 또는 숫자 또는 숫자 또는 숫자 또는 숫자와 같은가?"라고 묻는 것과 다름없는 것이다. 즉, or 연산자는 bool 타입 연산자이지, 비교 연산자가 아니라는 것. 그렇기 때문에 0이 아닌 다른 값들은 전부 True로 인식해서 이런 오류가 발생한 것이다. 그렇다면 어떻게 코드를 수정해야 할까.
위의 코드를 실행해보면 정상적으로 출력되는 것을 알 수 있다. 이처럼 month == 4 or month == 6 or month == 9 or month == 11 이랑, month == 4 or 6 or 9 or 11은 전혀 다른 의미임에 주의하자. 단순 if문은 한가지의 조건문만 테스트하는 간단한 구조지만 실제로는 여러가지 조건문들을 테스트 해야하는 복잡한 케이스들이 많다. 여러가지 조건문들을 테스트하기 위해 and, or연산자를 사용한다. and 연산자and를 이용해 if문 코드가 실행되기 위해서는 and 구문을 사용하여 테스트하는 모든 조건문이 True이여야 한다. or 연산자and의 반대의 경우에 해당, 테스트 하는 조건들 중 하나만 True여도 if문 코드가 실행된다. and, orand, or을 같이 사용할 수도 있다.
and와 or이 너무 많아 어떤것을 테스트 하는지 명확하지 않기때문에 ()괄호를 사용하는 것이 좋다. Assignment
우선 마지막 날이 30일과 31일인 달을 생간한다.
결과 |