고수님들 어문 문돌이 4시간을 빼앗아간 문제입니다..

<문제>
두 개의 날짜를 월/일로 입력받아, 두 날짜 사이의 날짜 수를 계산하는 프로그램을 만듭니다.

<요구사항>
- 아래의 두 함수를 만들고, 두 함수를 사용하여 위의 문제를 해결해야 합니다.
- get_days_of_month(month: int)-> int:
- 정수형 자료형 (int, integer)으로 월을 입력받습니다
- 해당 월의 날짜 수를 반환합니다.
- count_days (from: str, to : str) -> int:
-월/일 형식으로 이루어진 문자열 (str, string) 자료형으로
- 시작날짜인 from
- 종료날짜인 to를 받습니다.
- 두 날짜 사이의 간격이 며칠인지 반환합니다.

<추가설명>
- 2월은 28일 / 1, 3, 5, 7, 8, 10 ,12월은 31일 / 그 외의 월은 30일로 간주합니다.
- 년도 및 년도에 따라 달라질 수 있는 요소 (윤달/ 윤년)은 고려하지 않습니다.
- 1자리 숫자는 0x로 입력하지 않고, 그냥 X라고 입력합니다.
- 예를 들어, 3월 3일을 입력하고 싶은 경우 '03/03'이 아닌 '3/3'을 입력합니다.
-시작일은 포함하지 않고, 종료일만을 포함합니다.
-예를 들어, 3월 15일과 3월 16일 사이의 날짜는 2일이 아닌 1일입니다.
-종료 날짜는 시작 날짜보다 앞설 수 없다는 상황만을 고려합니다.
-그렇기에, 앞서는 경우 예외처리 또한 고려하지 않습니다.
<입출력 예시>
시작 월/일을 month/date 형식으로 입력하세요: 10/9
종료 월/일을 month/date 형식으로 입력하세요: 10/10

10/9 부터 10/10까지는 1일입니다.
  • 부탁드립니다 융합형인재는 못되는 문돌이입니다..

moonsong1125 514

M 2022년 12월 8일 10:32 오후

목록으로
2개의 답변이 있습니다. 1 / 1 Page

month_package = [31,28,31,30,31,30,31,31,30,31,30,31]
start_date = input("시작 월/일을 month/date 형식으로 입력하세요:")
end_date = input("종료 월/일을 month/date 형식으로 입력하세요:")
start_month =int(start_date.split('/')[0])
start_day =int(start_date.split('/')[1])
end_month =int(end_date.split('/')[0])
end_day =int(end_date.split('/')[1])
count_month =start_month
count_day = start_day
count_date = 0
그뒤는 질의자 한테 맡기겠습니다.
while문으로 end_month, end_day가 count_month랑 count_day랑 일치할때까지 반복작업되게 count_date를 +1 씩 더해주시고
count_month의 최대치인 month_package에서 해당 달의 최대 일에 도착하였을때,
count_month를 +1 해주시고, count_day를 다시 0부터 시작하게 만들면 될것 같습니다.

jayb8463

2022년 12월 22일 3:55 오후

너무 늦은 것 같네요. 오랜만에 와서 시간이 없어서 직관적으로 코딩을 짜 봤어요. 코딩을 하다 보니 함수를 적용하라는 것을 보지 못해서 함수없이 코딩해 봅니다.

year = [31,28,31,30,31,30,31,31,30,31,30,31]

while True:
    start_month, start_day = map(int, input("시작 월/일을 입력하세요:").split("/"))
    finish_month, finish_day = map(int, input("종료 월/일을 입력하세요:").split("/"))

        # 아래 8줄을 위의 2줄로 간단히 요약 map을 모를 수도 있을 것 같아서...유용합니다. 코드 해독도 쉽고요.
        # start = input("시작 월/일을 입력하세요:")
        # finish = input("종료 월/일을 입력하세요:")
        # start_month, start_day = start.split("/")
        # finish_month, finish_day = finish.split("/")
        # start_month = int(start_month)
        # start_day = int(start_day)
        # finish_month = int(finish_month)
        # finish_day = int(finish_day)

    if (start_month > finish_month) or ((start_month == finish_month) and (start_day >= finish_day)):
        print("시작일이 종료일보다 같거나 늦으면 안됩니다. 다시 입력하세요.")
        continue
    else:
        start_count = 0
        for i, j in enumerate(year, 1):
            if start_month > i:
                start_count += j
            else:
                break

        start_total = start_count + start_day

        finish_count = 0
        for i, j in enumerate(year, 1):
            if finish_month > i:
                finish_count += j
            else:
                break

        finish_total = finish_count + finish_day

        total = finish_total - start_total
        break

print(f'{start_month}/{start_day}부터 {finish_month}/{finish_day}까지는 {total}일입니다.')

COM_MONG 클릭시 블로그로 이동
여기에도 놀러 많이 와 주세요 시월에 코딩 다시 시작한 컴몽입니다.

COM_MONG

M 2022년 12월 26일 8:40 오후