<TIL> Python- 올바른 Or 연산자 사용법

Sinjae Lee·2021년 6월 9일
0

날짜를 입력하면 다음 날짜가 출력되도록 하고 싶다
예를 들어
month= 3
day= 31
=>
출력
4
1

month = int(input("월(month) 를 숫자로 입력해주세요: "))
day = int(input("일(day) 를 숫자로 입력해주세요: "))

if month == 1 or 3 or 5 or 7 or 8 or 10 or 12 :
	if day == 31 :
    		print(month+1);
	    	print(1);
  	elif day >= 1 and day <=30 :
    		print(month);
    		print(day+1);

elif month == 4 or 6 or 9 or 11 :
  	if (day == 30) :
    	  	print('======')
      		print(month+1);
      		print(1);
  	elif (day >= 1 and day <=29) :
      		print('=====')
      		print(month);
      		print(day+1);

그래서 위와같이 코드를 짜고 있던 중 코드를 돌려보니 month 에 4를 입력해주어도 첫번째 if 에서 코드가 실행되어서
입력
month = 4
day = 30
=>
출력
month = 4
day = 31
이 출력되는거 아닌가

이유는 Python 의 언어처리 방식에 있다.

Python의 문법들이 자연어처럼 보이고 그렇게 작동 하는 경우들이 많지만 해당 or 의 구문은

if month == 1 or 3 or 5 :
	print('True')
else :
	print('False')

에서 'month' 는 '같다' '1' ,'3', '5'
이 같다 라는 동사에 1, 3, 5가 전부 걸리는 것처럼 보이지만
파이썬 인터프리터는 해당 코드를 있는 그대로 받아들여서

if (month == 1) or (3) or (5) :

이런식으로 코드를 읽는다
따라서 내가 month 에 4를 입력하는 순간

if (false) or (3) or (5) 

이런식으로 치환돼고 내가 4를 입력했기 때문에
첫번째 조건 값 다음의 조건값인 3에 걸려서

if (3) : 
	print('True')
else :
	print('False')

위와같이 작동하게 되는것이다
따라서 if (3)은 true값을 지니기 때문에
'True' 를 출력하게 되는것이다.

그렇다면 위 코드를 나의 의도에 맞게 작성하려면 어떻게 해야할까?

  1. 각각의 조건값들에게 Boolean 연산자를 대입해준다
if (month == 1) or (month == 3) or (month == 5) :
  1. 비교할 값들을 리스트로 하여 in 을 사용해주기
if month in (1, 3, 5):
profile
Back-end developer

0개의 댓글