문제 풀이 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))
참고
'코드예시👨🏻💻▶️ 파이썬' 카테고리의 다른 글
파이썬 입력받은 문자열 중 가운데 문자를 출력하는 프로그램 (0) | 2020.10.22 |
---|---|
파이썬 로또 프로그램 만들기 (0) | 2020.10.22 |
파이썬 딕셔너리로 영한/한영 사전 프로그램 작성하기 (0) | 2020.10.22 |
파이썬 딕셔너리로 우수/중지 제품 판단하는 프로그램 작성하기 (0) | 2020.10.22 |
파이썬 문자열 단어 개수 세기, 역순 출력, 공백 삭제, 단어 빈도 세기 (0) | 2020.10.22 |