년, 월, 일을 입력 받아서 요일을 구하고 윤년인지 판별한다.
조건
- 서기 1년 1월 1일은 월요일이다.
- 요일은 서기 1년 1월 1일부터 입력된 날까지의 날수를 모두 더한 값을 7로 나누어 나머지를 이용하여 구한다.
윤년을 구하는 공식
- 4로 나누어지는 해는 윤년이다.
- 100으로 나누어지는 해는 윤년이 아니다.
- 400으로 나누어지는 해는 윤년이다.
입력함수, 윤년 판별 함수, 요일을 구하는 함수로 총 3개를 만들었다.
요일을 구하는 함수에서 return을 할 때 파이썬에서는 switch가 없기 때문에 딕셔너리를 사용했다.
[]안의 수와 일치하는 key의 값을 return 한다.
ln[1] |
%%writefile leapyear.py import datetime
def input_date(): y = int(input("__년도를 입력하시오: ")) m = int(input("__월을 입력하시오: ")) d = int(input("__일을 입력하시오: ")) return y, m, d
def is_leap(num): if (num % 4) ==0: if (num % 400) == 0: return True elif (num % 100) == 0: return False else: return True else: return False
def get_day_name(year, month, day): dt = datetime.datetime(year, month, day) dt = int(dt.strftime("%j")) count_day = 0 for i in range(year): if is_leap(i): count_day += 366 else: count_day += 365 count = (count_day + dt - 366) % 7 #1년 1월 1일은 0일째이지만 컴퓨터에서는 366일째로 계산되기 때문에 366을 빼줌. return {0: '일요일', 1: "월요일", 2: "화요일", 3: "수요일", 4: "목요일", 5: "금요일", 6: "토요일"}[count]
if __name__ == "__main__": year, month, day = input_date() day_name = get_day_name(year, month, day) print(day_name) if is_leap(year): print("입력하신 %s년은 윤년입니다" % year) else: print("입력하신 %s년은 윤년이 아닙니다" % year) |
실행결과
'Programing > PYTHON' 카테고리의 다른 글
[파이썬/python] 데코레이터(dacorator), 시간 계산 타임 체크(Time check) - jupyter notebook (0) | 2020.04.27 |
---|---|
[파이썬/python] 랜덤 숫자 lamda함수, 사칙연산 - jupyter notebook (0) | 2020.04.26 |
[파이썬/python] 문자의 개수 구하기, 대소문자 변경하기 - jupyter notebook (0) | 2020.04.25 |
[파이썬/python] 입력받은 문장 거꾸로출력하기 - 문자별, 문장별 역순 (0) | 2020.04.22 |