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
반응형
'프로그램' 카테고리의 다른 글
[파이썬] 문제 : 블랙잭 게임 (0) | 2023.04.07 |
---|---|
[파이썬] 문제 : 터틀(turtle)로 세로줄 3개 그리기 (0) | 2023.04.07 |
[파이썬] 문제 : 성별,키,허리둘레로 지방 질량 지수(RFM) 계산 (0) | 2023.04.07 |
[파이썬] 주식 chart에 월별 주요 이슈 표시(plot) (0) | 2023.04.06 |
[파이썬] 문제 : 놀이공원 요금 계산 (0) | 2023.04.06 |
댓글