코드예시👨🏻‍💻▶️ 파이썬

파이썬 경과한 날짜 구하기 (달력, 날짜 계산)

코뮤니티 2020. 10. 22. 18:14

문제 풀이 1

타임 라이브러리 내부에 있는 datetime 모듈을 사용하지 않고 구하는 방법

: 최대한 원본 코드를 건들이지 않고 작성 (약간의 제약사항이 있음)

#변수 설정
leap_month = [31,29,31,30,31,30,31,31,30,31,30,31]
month = [31,28,31,30,31,30,31,31,30,31,30,31]
leap_year = False
no_days = 0


#입력값 받기
year, mon, day = input("년,월,일을 공백 문자로 구분하여 입력하세요 : ").split()
year = int(year)
mon = int(mon)
day = int(day)

while no_days < 1:
    print("%s년 %s월 %s일로부터 경과되는 일수를 입력하세요 : " %(year,mon,day),end='')
    no_days = int(input())



mon -=1 
# mon = 10라 할때, month[mon]이면 month[10]이 됩니다. 리스트는 순서가 0부터이니, month[10]=30이 됩니다. 
# 하지만 10월은 31일까지죠?! 그래서 -1을 해서 인덱스를 맞춰주는 것입니다~

# 윤년 확인
if year%4==0 and year%100!=0 or year%400==0:
    leap_year = True
else:
    leap_year = False

# 날짜 계산
while no_days>0 and mon<12:
    if leap_year == True:
        no_days -= leap_month[mon]-day
    else:
        no_days -= month[mon]-day
    mon += 1
    day = 0

print("중간 값 확인하기: ", year, mon, no_days)

if mon < 12:
    mon -= 1
    if leap_year == True:
        no_days += leap_month[mon]
    else:
        no_days += month[mon]
else:
    mon = 0
    year += 1

mon += 1
print("결과 값: ", year,"년", mon,"월", no_days,"일")

 

 

문제 풀이 2

타임 라이브러리 내부에 있는 datetime 모듈을 사용하지 않고 구하는 방법

: while이 아닌 for문을 사용하여 작성

year, mon, day = input("년 원일을 공백문자로 구분하여 입력하세요 : ").split()
no_days = 0

while no_days < 1:
    print("%s년 %s월 %s일로부터 경과되는 일수를 입력하세요 : " %(year, mon, day), end = '')
    no_days = int(input())

year = int(year)
mon = int(mon)
day = int(day)

leap_year = False
month = [31,28,31,30,31,30,31,31,30,31,30,31]
leap_month = [31,29,31,30,31,30,31,31,30,31,30,31]

if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    leap_year = True

# no_days만큼 반복문을 실행하며 day에 1씩 더해줍니다.
for i in range(no_days):
    day += 1

    if leap_year == True:
        # day가 해당 month의 일수보다 커지면 day를 낮춰주고 mon을 1 더해줍니다.
        # ex) mon = 1, day = 32 -> day = 32 - 31 = 1, mon = 1 + 1 = 2
        if day >= leap_month[mon-1]:
            day = day - leap_month[mon-1]
            mon += 1
    else:
        if day >= month[mon-1]:
            day = day - month[mon-1]
            mon += 1
    # mon이 12보다 크면 mon을 1로 초기화하고 year를 1 더해줍니다.
    if mon > 12:
        mon = 1
        year += 1
        # 새로운 year가 윤년인지 아닌지 판단합니다.
        if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
            leap_year = True
        else:
            leap_year = False

print(year, "년", mon, "월", day, "일" + "입니다")

 

 

문제 풀이 3

타임 라이브러리 내부에 있는 모듈을 사용하는 방법

#모듈 삽입
from datetime import datetime, timedelta

#입력값 받기
year, mon, day = input("년,월,일을 공백 문자로 구분하여 입력하세요 : ").split()
year = int(year)
mon = int(mon)
day = int(day)
no_days = 0

while no_days < 1:
    print("%s년 %s월 %s일로부터 경과되는 일수를 입력하세요 : " %(year,mon,day),end='')
    no_days = int(input())

time = datetime(year,mon,day)
print (time + timedelta(days = no_days))

 

 

나와 어울리는 개발자 유형 찾기

MBTI로 알아보는 개발자 유형 내 안의 개발자를 찾아서...⭐

comu.codeuniv.kr

참고

 

파이썬 경과 날짜 구하기(파이썬 달력, 파이썬 날짜 계산) 과제

대한민국 모임의 시작, 네이버 카페

cafe.naver.com