프로그램
[파이썬] 문제 : 년,월 입력 받아서 달력 출력
오디세이99
2023. 4. 7. 01:50
728x90
반응형
from datetime import datetime, date, timedelta
from dateutil import relativedelta
def getDay(date): # 요일 찾기 함수
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
day = date.weekday() # 요일 번호 (0:일요일, 1:월요일...6:토요일)
return day, days[day] # 요일 번호와 요일명 return
def getDate(year, month): # 그 달의 첫번째 날짜와 마지막 날짜 함수
first_day = date(int(year), int(month), 1) # 요일을 찾음(함수 사용)
day_idx, day_name = getDay(first_day) # 1일의 요일 찾기. 요일 번호, 요일명
next_month = first_day + relativedelta.relativedelta(months=1) # 첫날(datetime)에서 1개월을 더하면 다음달의 첫번째 날짜
last_day = next_month - timedelta(days=1) # 다음 달의 첫번째 날짜에서 -1 day 를 하면 이번달의 마지막 날짜
return first_day, last_day # 첫날, 마지막날 return
year, month = map(int, input('년, 월을 입력하세요(2023-3) : ').split('-')) # 년,월을 입력 받음. 양식은 yyyy-mm
first_day, last_day = getDate(year, month) # 함수 사용. 그해 년도, 월에 첫번째 날짜와 마지막 날짜
print('=' * 28) # '='를 28개 출력
print(' {0:4d}년{1:2d}월'.format(year, month)) # 년, 월 출력
print('=' * 28)
print(' 일 월 화 수 목 금 토 ') # 요일명 출력
print('=' * 28)
print(' '*(day_idx+1), end='') # 1일 앞 요일들 공백 2씩 으로 채우기
pos = day_idx + 1 # 날짜(1,2,3,..)가 어느 위치에 있어서 하는지 구분 변수. 첫음은 1일의 요일 번호
i = 0 # 날짜(1,2,3...) 번호
while True: # 반복문. 아래 break에서 종료
i += 1 # 날짜 1 씩 증가.
pos += 1 # 날짜 위치 1씩 증가
print(' {0:2d} '.format(i), end = '') # 날짜(1,2,3..)을 정수 2자리로 출력. 이때 줄바꿈 하지 않음
if pos%7 == 0: # 출력 날짜의 위치가 7의 배수면 줄바꿈
print()
if i == last_day.day: # 마지막 날짜의 일(30, 31 등)
break # 종료
print('\n' + '=' * 28) # 달력 하단 부분.
728x90
반응형