[TIL] 5. if 조건문과 and, or을 활용한 다음 날 구하기

이태권 (Taekwon Lee)·2022년 5월 26일
0
post-thumbnail

and와 or

파이썬에서는 &&||대신 andor를 사용한다.
처음에 이걸 모른 채로 코드를 작성하니 오류가 나와서 크게 당황했었다.

if 조건문에서 and와 or는 너무 자주 쓰면 매우 복잡해지기에
너무 길게 쓰지 않는 게 낳다.

문제

월(month)와 일(day), 2가지를 input 값으로 받습니다.
2019년의 해당 월과 일의 다음 날의 월과 일을 출력해주세요.
예를 들어, month 는 3이고 일은 31이면 2019년 3월 31일의 다음날은 4월 1일 임으로 다음과 같이 출력이 되면 됩니다 (월 과 일을 각각 다른 줄에 출력 해주세요).

접근 방식

2019년에서
1, 3, 5, 7, 8, 10월은 끝나는 날이 31일,
4, 6, 9, 11월은 끝나는 날이 30일,
2월은 끝나는 날이 28일이다.

  1. 해당 월의 끝나는 일에만 if 조건으로
    month + 1 +1일을 하고,
  2. 다른 날에는 해당 월은 고정하고, 일수만 day + 1하면 된다.

처음 짠 코드

if (month == 1, 3, 5, 7, 8, 10) and (day == 31):
  print(month + 1)
  print(1)
elif (month == 4, 6, 9, 11) and (day == 30):
  print(month + 1)
  print(1)
elif (month == 2) and (day == 28):
  print(month + 1)
  print(1)
elif (month == 12) and (day == 31):
  print(1)
  print(1)
if month == 13:
  print(1)
  print(1)
else:
  print(month)
  print(day + 1)

궁금한 점

아래 코드를 입력하지 않으면
12월 31일 다음 날이 13월 1로 나타난다. 왜 그럴까?

if month == 13:
  print(1)
  print(1)

구글링 해 발견한 간결한 코드

if ((day == 30) and (month == 4 or month == 6 or month == 9 or month == 11)
    or (day == 28) and (month == 2)
    or (day == 31)):
  month += 1
  day = 1
else:
  day += 1  
if month == 13:
  month = 1
print(month)
print(day)

마치며

알게 된 것

  1. or 대신 ,를 써도 된다.
### 일일이 반복하는 수고로움이 있었다.
if (month == 1 or month == 3 or ...)

### 그런데 아래처럼 해도 성립이 된다.
if month == 1, 3, 5, 7, 8, 10
profile
(Backend Dev.) One step at a time

0개의 댓글