
윤년 판별 함수

def isLeapYear(year): # 윤년이면 True, 아니면 False 를 출력하는 함수.
return year % 4 == 0 and year % 100 != 0 or year % 400 == 0

#잘 작동하는지 확인
calendar 모듈을 이용하면 함수를 따로 생성하지 않고 가능하다.
마지막 날짜 계산
마지막 날짜가 월별로 다르고 윤년일때는 2월의 마지막 날짜가 또 달라집니다.
def lastDay(year, month):
# 각 달의 마지막 날짜를 기억하는 리스트 만들기
m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 2월의 마지막 날짜를 확정 => 윤년이면 29일로 수정
if isLeapYear(year):
m[1] = 29
return m[month - 1] # 마지막 날짜 리턴
윤년일 때는 m[1] 즉, 2월의 마지막 날짜가 수정됨 .
마지막 날짜를 반환하는 함수 생성
지나온 날짜 계산
totalDay 년, 월, 일을 넘겨받아 1년 1월 1일 부터 지난 날짜의 합계를 리턴하는 함수
total 계산 순서
- 평년을 기준으로 전년도까지 일자 합계 -> 윤년이었던 횟수 더하기
- 전달까지 해당 연도 일자 더하기
- 이번달 날짜 더하기
def totalDay(year, month, day):
# 1년 1월 1일 부터 전 년도 12월 31일 까지 지난 날짜를 합산
total = (year - 1) * 365 + (year - 1) // 4 - (year - 1) // 100 + (year - 1) // 400
# 전년도 까지 지난 날짜의 합계에 전 달까지 지난 날짜 더하기
for i in range(1, month):
total += lastDay(year, i) # 윤년 확인 포함
return total + day # 전달 까지 지난 날짜에 이번달 날짜를 더해서 리턴
#코드 설명
total = (year - 1) * 365 + (year - 1) // 4 - (year - 1) // 100 + (year - 1) // 400
total -> 윤년을 반영한 작년까지의 총 일수. 윤년이면 1년이 하루가 더 많기 때문에
for i in range(1, month):
total += lastDay(year, i)
입력한 년도의 바로 직전 달 까지 몇 일이 지났는지 계산해서 total에 더해준다
여기까지 하면 total은 현재 저번 달 까지의 모든 일수를 더한것
return total + day
마지막에 이번달 날짜까지 더한다.
요일 반환
def weekDay(year, month, day):
return totalDay(year, month, day) % 7
- weekDay 인수로 년, 월, 일을 넘겨받아 요일을 계산해 숫자로 리턴하는 함수
- 1년 1월 1일 부터 인수로 넘겨받은 년, 월, 일 까지 지난 날짜의 합계를 7로 나눈 나머지 반환
- 일요일(0), 월요일(1), 화요일(2), 수요일(3), 목요일(4), 금요일(5), 토요일(6)
달력 확인
if __name__ == "__main__":
# 달력 프로그램 도입부
year, month = map(int, input('달력을 출력할 년, 월을 입력하세요 : ').split())
print('=' * 28)
print(' {0:4d}년{1:2d}월'.format(year, month))
print('=' * 28)
print(' 일 월 화 수 목 금 토 ')
print('=' * 28)
# 1일이 출력될 요일의 위치를 맞추기 위해서 1일의 요일만큼 반복하며 빈칸을 출력
for i in range(weekDay(year, month, 1)):
print(' ', end = '')
# 1일 부터 달력을 출력할 달의 마지막 날짜까지 반복하며 달력을 출력
for i in range(1, lastDay(year, month) + 1):
print(' {0:2d} '.format(i), end = '')
# 출력한 날짜(i)가 토요일이고 그 달의 마지막 날짜가 아니면 줄바꿈
if weekDay(year, month, i) == 6 and i != lastDay(year, month):
print()
print('\n' + '=' * 28) # 달력 하단
사용자에게 원하는 년도와 월을 받아서 달력을 만드는 함수.
print('=' * 28)
print(' {0:4d}년{1:2d}월'.format(year, month))
print('=' * 28)
print(' 일 월 화 수 목 금 토 ')
print('=' * 28)
이 부분은 달력처럼 보이기 위한 포맷생성
작동 확인
이번달 넣기
결과
윈도우 달력과 비교
'데이터 분석 실습 > Python' 카테고리의 다른 글
뉴스 3줄 요약하기 (1) | 2023.04.20 |
---|---|
Disney 데이터 시각화 with Google Colab (1) | 2023.04.11 |