윤년, 평년 판별식
# 1. 윤년 판별 함수 구현
# (공식) ①,② 두조건을 다 만족해야 윤년임
# ① 년도가 4로 나누어 떨어져야 함
# ② 년도가 100으로나누어 떨어지지 않거나 년도가 400으로 나누어 떨어져야 함
# ex) 4(윤년), 100(평년), 400(윤년)
def is_leap_year(year):
"""
연도를 입력받아 윤년인지 평년인지 판별하는 함수
매개변수:
year (int): 판별할 연도
반환값:
bool: 윤년이면 True, 평년이면 False
윤년 판별 규칙:
1. 4로 나누어 떨어지면 윤년
2. 100으로 나누어 떨어지면 평년
3. 400으로 나누어 떨어지면 윤년
예시:
is_leap_year(2020) # True 반환
is_leap_year(2100) # False 반환
is_leap_year(2000) # True 반환
"""
# 직접 구현
if year%400 ==0:return True
elif year%100 ==0 : return False
elif year%4 == 0 : return True
else: return False
제라의 공식으로 요일 판별하기
# 2. 요일 계산 함수 구현
# 제라의 공식을 이용하여 특정 날짜의 요일을 계산합니다.(인터넷 검색하여 요일 구하기)
def get_week(year, month, day) :
"""
연도, 월, 일을 입력받아 해당 날짜의 요일을 계산하는 함수
매개변수:
year (int): 연도
month (int): 월 (1-12)
day (int): 일
반환값:
int: 요일을 나타내는 정수 (0: 일요일, 1: 월요일, ... 6: 토요일)
알고리즘:
제라의 공식을 활용하여 요일 계산
예시:
get_week(2024, 1, 1) # 1 반환 (월요일)
get_week(2024, 1, 7) # 0 반환 (일요일)
"""
# 직접 구현
if month < 3:
month +=12
year -= 1
year_a=year//100
year_b=year%100
return int(((21 * year_a // 4) + (5 * year_b // 4) + (26 * (month + 1) // 10) + day - 1) % 7)
간단한 달력 함수 구현
import calendar
# 3. 간단한 달력 출력 함수 구현
# 연도와 월을 입력받아 해당 월의 일수를 나열하는 함수를 구현합니다.
# 윤년, 평년을 고려하여 2월달의 일수도 알맞게 출력해야 합니다. (문제 1의 함수 활용)
def print_simple_calendar(year, month):
"""
연도와 월을 입력받아 해당 월의 모든 일자를 나열하는 함수
매개변수:
year (int): 연도
month (int): 월 (1-12)
출력 형식:
"YYYY년 MM월 - 01일, 02일, 03일, ..., NN일"
작동 방식:
1. 해당 월의 일수 결정 (윤년 여부에 따라 2월 일수 조정)
2. 모든 일자를 나열하여 출력
예시:
print_simple_calendar(2024, 1)
# "2024년 01월 - 01일, 02일, 03일, ..., 31일" 출력
"""
day =0
# 직접 구현
if month==2:
if is_leap_year(year) : day =29
else: day = 28
else : day = calendar.monthrange(year, month)[1]
print (f'{year}년 {month}월 - ',end="")
for i in range(1,day+1):
if i == day :
print(f'{i:02d}일',end = '')
else: print(f'{i:02d}일,',end = '')
print_simple_calendar(2024, 2)
더보기
i:02d -> 두 숫자로 채우되 한자리면 0으로 채움
calendar.monthrange(year, month)[1] ->며치리까지 있는지
[0]은 1일의 요일을 반환
달력 출력
#4. 달력 형식 출력 함수 구현
# 연도와 월을 입력받아 실제 달력처럼 요일별로 정렬된 형태로 출력합니다.
def print_calendar(year, month):
"""
연도와 월을 입력받아 달력 형식으로 출력하는 함수
매개변수:
year (int): 연도
month (int): 월 (1-12)
출력 형식:
YYYY년 MM월
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
...
시각화 요소:
- 일요일: 빨간색으로 표시
- 토요일: 파란색으로 표시
- 기타 요일: 기본 색상으로 표시
작동 방식:
1. 해당 월의 1일의 요일 계산
2. 해당 월의 일수 결정
3. 2차원 리스트에 날짜 배치
4. 요일에 따라 색상을 적용하여 출력
예시:
print_calendar(2024, 1)
# 2024년 01월 달력 출력
"""
# 직접 구현
week = ['Sun','Mon','Tue','Wed','Fri','Sat']
wee, day = calendar.monthrange(year,month)
print(f"{year}년 {month:02d}월")
print(" ".join(week))
print(" " * wee, end="")
for i in range(1,day+1):
if (wee + i - 1) % 7 == 0: # 일요일 (빨간색)
print(f"\033[91m{i:2d}\033[0m", end=" ")
elif (wee + i - 1) % 7 == 6: # 토요일 (파란색)
print(f"\033[94m{i:2d}\033[0m", end=" ")
else: # 평일 (기본 색상)
print(f"{i:2d}", end=" ")
# 토요일마다 줄바꿈
if (wee + i-1) % 7 == 6:
print()
print_calendar(2024, 1)
더보기
\033[91m{day:2d}\033[0m
빨간색\033[색상코드 하면 색상 바뀜
2d 해야 두글자처럼 너비 같아서 예쁨
'Python' 카테고리의 다른 글
파이썬 strftime, rrul 함수 (0) | 2025.03.13 |
---|---|
파이썬 정규표현식 : re 함수 (0) | 2025.03.11 |
파이썬 버전 확인하기, 다운로드하기 (0) | 2025.03.05 |
Python with 함수 (0) | 2025.02.28 |