1

これを導出する特別な方法はありますか、それともループを作成する必要がありますか? この関数の実際のパラメーターは (year, num_of_days) です。しかし、これから月を導き出す方法がわかりません。これは私がこれまでに持っているものです (不完全です) が、別の月の日は考慮されていません。この問題に取り組む簡単な方法はありますか? 前もって感謝します!

def daynum_to_date(year : int, daynum : int) -> datetime.date:
    '''Return the date corresponding to the year and the day number, daynum,
    within the year.

    Hint: datetime handles leap years for you, so don't think about them.

    Examples:
    >>> daynum_to_date(2011, 1) # first day of the year
    datetime.date(2011, 1, 1)
    >>> daynum_to_date(2011, 70)
    datetime.date(2011, 3, 11)
    >>> daynum_to_date(2012, 70)
    datetime.date(2012, 3, 10)
    '''

    import calendar
    totalmonths = 0
    i = 1
    while i < 13:
        month_days = calendar.monthrange(year,i)[1]
        months = daynum//int(month_days)
        if months in range(2):
            days = daynum % int(month_days)
            totalmonths = totalmonths + 1

        else:
            daynum = daynum - int(month_days)
            totalmonths = totalmonths + 1
            i = i + 1
        return datetime.date(year, totalmonths, days)
4

1 に答える 1

0

あなたはもうすぐそこにいます:

import calendar
import datetime

def daynum_to_date(year : int, daynum : int) -> datetime.date:
    month = 1
    day = daynum
    while month < 13:
        month_days = calendar.monthrange(year, month)[1]
        if day <= month_days:
            return datetime.date(year, month, day)
        day -= month_days
        month += 1
    raise ValueError('{} does not have {} days'.format(year, daynum))

与える:

>>> daynum_to_date(2012, 366)
datetime.date(2012, 12, 31)
>>> daynum_to_date(2012, 367)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in daynum_to_date
ValueError: 2012 does not have 367 days
>>> daynum_to_date(2012, 70)
datetime.date(2012, 3, 10)
>>> daynum_to_date(2011, 70)
datetime.date(2011, 3, 11)
>>> daynum_to_date(2012, 1)
datetime.date(2012, 1, 1)
于 2013-03-09T18:02:36.933 に答える