[PythonBasic] and와 or 적절히 사용하기 (print를 너무 많이 사용하는 문제에 대하여)

Alex of the year 2020 & 2021·2020년 6월 24일
0

Python

목록 보기
4/18
post-thumbnail

모든 프로그래밍 언어를 배우며 아마 입출력을 맨 처음으로 배우지 않을까 생각한다.
System.out.println(); 은 대표적인 자바의 출력 명령이고
print()는 파이썬의 출력 명령이다 (확실히 더 알아듣기가 쉽다.)

내가 어떤 print() 중독인지는 아래 코드를 보면 알 수 있었다.
이 문제를 풀기 위해 내가 쓴 코드는 아래와 같다.

month = int(input())
day = int(input())

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

이번엔 짜놓고도 알았다 이게 최선이 아닐거라는...

(마치 and/or을 자유자재로 쓰지 않고 if만 주구장창 써서 코드가 길어진 모양을 보며
자바에서도 삼항연산자를 제대로 쓰지 않고 if만 길게 나열하여 코드가 길어졌던 것이 기억났다..)

나름 문제점을 분석해봤다

  1. if문을 나눈 층위의 문제: 나는 달에 일수가 31, 30, 28인 달로 즉 세 가지의 유형을 같은 층위로 분류했다. 하지만 일수가 31인 달과 그렇지 않은 달로 두 개의 큰 층위를 나눈 후, 그렇지 않은 달 속에서 30인달과 그렇지 않은 달로 나누었다면 보기에도 가독성이 좋았을 것이며 2월의 윤달 성질(4년에 한 번씩 29일임)도 고려할 수 있었을 것이다.
  2. 겹치는 요소가 그 이외에도 너무 많다 : print(month+1)이라든가, print(day+1)은 같은 말이 여러 번 반복되고 있다. 꽤나 의미 없는 반복으로 보여, 이것을 없애고 싶었다.
  3. += 연산자의 아른거림: 뭔가 day+=1 식으로 작성할 수 있을 것 같은데 print가 있는데 +=를 사용할 수 있던가? 싶었다.

우선 정상 작동되는 것을 확인한 후
문제점을 고려하며 여러가지 다른 시도를 해본 후(잘 안됐다)
숙련 답안을 보았다.

숙련 답안은 아래와 같다.

month = int(input())
day = int(input())

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. if문을 나눈 층위의 문제: 나는 '~라면' 이라는 가정을 기준으로 나누어 생각했고 숙련답안은 결과적으로 month가 1이 추가될 것인지, day가 1이 추가될 것인지에 더 기준점을 맞추어 식을 작성했다.
  2. print()문은 맨 마지막에 딱 한 번(각각) 썼다 : 사실 이런 문제에서는 print() 전에 모든 식을 완료하고 최종적으로 떨어지는 값은 맨 마지막에 한번만 출력하면 된다.
  3. += 연산자: print()를 한 번 적었으니 당연히 위에서 변수가 변하는 과정에서 자연히 쓰였다.

and 연산자와 or 연산자를 사용하며 코드를 줄이는 법과
print()를 줄여 쓰는 법을 조금 더 고민해볼 필요가 있겠다.

profile
Backend 개발 학습 아카이빙 블로그입니다. (현재는 작성하지 않습니다.)

0개의 댓글