[TIL. 20] Python- 조건문,주석, 함수

신지원·2021년 3월 21일
0

Python

목록 보기
7/14
post-thumbnail

IF

  • 조건문의 기본 구조
if expression:
	codes to execute

expression의 값이 true 이면 codes to execute부분이 실행되고. False 이면 실행되지 않는다.

조건문에서 indention의 중요성

if condition:
    print("if statement code 1")
    print("if statement code 2")
print("Not if statemet code")
  • 파이썬에서는 indention이 하나의 문법처럼 쓰이기때문에 조건문에서도 indention이 중요한 역할을 한다.
    따라서 true 일때 실행되어야하는 코드들은 항상 if문보다 시작 간격이 더 안으로 들어와 있어야 한다.
  • 위 코드에서 보면 if statement code 1과 if statement code 2는 if문과 연결되어 있는 코드이다. 그렇기때문에 condtion이 true일때만 실행된다. 반면에, Not if statemet code는 if에 종속되어 있는 코드가 아니기때문에 항상 실행된다.

비교연산자

  1. ==
    2개의 값을 비교할때 쓰인다.
    =는 변수에 값을 넣어줄때 사용된다.(둘이 바꿔쓰지 않도록 조심해야 한다)

  2. !=
    not equal 을 나타냄. ==와 반대의 의미를 가진다.

% 나누기 값의 나머지값 구하기
/ 나누기의 값의 몫 구하기

elif and else

  1. elif
if today == "월요일":
	print("오늘은 월요일입니다.")
elif today == "화요일":
	print("오늘은 화요일입니다.")
  • if를 보조하는 역할로서 else if를 줄인것이다.
  • elif는 if문과 연결되어 사용되기 때문에 반드시 if 다음에 사용해주어야 한다.
  • 먼저 나온 if문의 조건이 Flase인 경우 실행되고, if문의 조건이 True인 경우에는 elif문은 실행되지 않는다.
  1. else
if (age >= 8) and (age <= 13):
	print("초등학생입니다.")
elif (age >= 14) and (age <= 17):
	print ("중학생입니다.")
else:
	print("고등학생이거나 성인입니다.")
  • else는 if문의 조건이 False인 경우 default로 실행된다. (elif문이 있다면 elif문의 조건이 False인 경우 실행.)
  • else는 if, elif문의 코드가 실행되지 않을때 마지막으로 실해되는 것이기 때문에 else문에는 테스트 해야하는 조건을 넣지 않는다.

여러 조건들을 한번에 검사할 경우

  1. and
    모든 조건들이 true 여야 if문이 실행 된다.
    즉, 하나라도 False 이면 if문은 실행되지 않는다.

  2. or
    조건들 중에 하나만 True 여도 if문 실행된다.

단락평가: 첫번째 값만 보고 결과가 확실하면 두번째 값은 확인 하지 않는 방법

  • and의 경우 모든 조건이 참이여야 True로 여겨지기 때문에 첫번째 값이 False인 경우, 두번째 조건은 확인할 필요 없이 조건이 False로 결정된다. (첫번째가 False이면 무조건 False)
    False and True => False
    False and False => False

  • Or인 경우 두 값중 하나라고 참이면 True로 여겨지기때문에 첫번째 값이 참이면 두번째 값은 확인하지 않고 바로 True로 결정된다. (첫번째가 True이면 무조건 True)
    True or True => True
    True or False => True

Nested if

반복되는 컨디션이 있을땐 if를 중첩해서 사용하면 훨씬 간단해진다.

if status == "학생" and year >= 3:
    print("취업이 곧 다가온다!")
elif status == "학생" and year == 2:
    print("그래도 아직 놀 시간이 있네..")
elif status == "학생" and year < 2:
    print("한창 놀때지..")
else:
    print("열심히 공부 해서 대학교 부터 가라!")

status == "학생" 이라는 값이 중복된다. 이렇게 중복되는 값이 존재할때 if를 중첩해서 사용하면 편리해진다.

if status == "학생":
    if year >= 3:
        print("취업이 곧 다가온다")
    elif year == 2:         
        print("그래도 아직 놀 시간이 있네..")
    elif year < 2:                  
        print("한창 놀때지..")
else:
    print("열심히 공부 해서 대학교 부터 가라!")
  • 간격이 안으로 들어갈 수록 중첩단계가 증가된다. (indention)
  • 2단계 이상으로 중첩 할경우 가독성이 너무 떨어진다.
  • 가독성 때문에 대부분 중첩은 1단계에서만 끝난다.

Q. 2019년도의 다음날 구하기

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

원래 내가 짯던 코드

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

참으로 길고... 합리적이지 못한 코드...

처음에 생각했을때 우선 30일까지인 달과 31일까지 있는 달 29일까지 밖에 없는 월을 생각해서 그거를 월별로 나누고 마지막으로 12월 31일이 됐을 경우로 나누어서 생각했었다. 여기까지는... 잘 생각했는데...!
코드를 보면 더 간단히 줄일 수 있는 부분들이 있다.
우선 어짜피 1년은 12월달까지만 존재하니깐.. 30일까지 있는 달과 2월을 뺀 나머지달들을 굳이 적어주지 않아도 표현이 가능하다.
따라서 월별로 끝나는 날을 기준으로 생각해보면 다음과 같이 간단히 정리 할 수가 있다.

30일까지 있는 4,6,9,11월
28일까지 밖에 없는 2월
31일까지 있는 나머지 달.

1) day가 28, 30, 31(월별로 나누어 주고)에 걸리면 day를 1로 바꾸어 주고 동시에 month도 +=1 해준다.
2) day가 28, 30, 31일 아닌경우에는 Month는 그대로 두고 day에만 +=1 을 해주면 된다.
3) 마지막으로 12/31일인 경우에는 month = 1, day =1 로 바꾸어 주면 된다.

다시한번 정리하면..
30일이면서 4,6,9,11월인 경우 이거나 28이면서 2월인경우나 31일인 경우에는 month +=1, day =1
그렇지 않은 경우에는 day +=1.
마지막으로 12월 31일인 경우에는 month = 1
이거를 코드로 바꾸어 보면..

if (day == 30) and (month in [4,6,9,11]) or (month == 2) and (day == 28) or (day == 31):
	month += 1
    day = 1
else:
	day +=1
    if month == 13: #위에 첫번째 조건문에서 12/31일 경우는 true 임으로 month +=1 이 되어서 13이 된다.
	month = 1
print(month)
print(day)

이런식으로 간단하게 줄일 수 있다.

주석

# : 한줄 주석처리
''' ''' : 여러줄 주석 처리(일반적으로는 줄마다 #를 사용해준다.)
실제 주석은 잘 안읽게 된다. 주석이 필요없을 정도로 가독성이 높은 코드를 작성하는것이 가장 좋다.

함수

반복되어 계속 사용되는 코드들을 함수로 정의하여 효과적으로 사용할 수 있게 된다. 더불어 코드의 가독성도 높아진다.

def 함수명(parameter):
    문장1
    문장2
    ...
    문장N
    [return 리턴값]

parameter과 return은 optional임.

0개의 댓글