- 조건문의 기본 구조
if expression: codes to execute
expression의 값이 true 이면 codes to execute부분이 실행되고. False 이면 실행되지 않는다.
if condition:
print("if statement code 1")
print("if statement code 2")
print("Not if statemet code")
==
2개의 값을 비교할때 쓰인다.
=
는 변수에 값을 넣어줄때 사용된다.(둘이 바꿔쓰지 않도록 조심해야 한다)
!=
not equal 을 나타냄. ==와 반대의 의미를 가진다.
% 나누기 값의 나머지값 구하기
/ 나누기의 값의 몫 구하기
if today == "월요일":
print("오늘은 월요일입니다.")
elif today == "화요일":
print("오늘은 화요일입니다.")
if (age >= 8) and (age <= 13):
print("초등학생입니다.")
elif (age >= 14) and (age <= 17):
print ("중학생입니다.")
else:
print("고등학생이거나 성인입니다.")
and
모든 조건들이 true 여야 if문이 실행 된다.
즉, 하나라도 False 이면 if문은 실행되지 않는다.
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
반복되는 컨디션이 있을땐 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("열심히 공부 해서 대학교 부터 가라!")
Q. 2019년도의 다음날 구하기
원래 내가 짯던 코드
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임.