使用函数创建日历

问题描述 投票:0回答:1

如何不使用导入日历而是使用导入数学来创建日历

我无法做到这一点,尝试后日历无法显示加上我尝试使用 def day_of_week(day, Month, Year) , def is_leap(year) 和其他函数

python function calendar
1个回答
0
投票

为了使其正常工作,您需要找出一年(您想要日历的年份)的第一天(星期几,周日至周六)。执行此操作的一种方法是手动初始化过去一年的第一天。假设您的日期是 1999 年 1 月 1 日,那是星期五,因此您的日历从 2000 年开始有效。 对于 2000 年,该年的第一天将为
((365 + 0) - 2) % 7

(如果闰年加 1,则减 3,因为 1999 年的第一天是星期五)。这将给出当天的索引,在本例中为 
0
,即星期一。 (假设一周中的几天存储在数组中:
[Mon, Tue, Wed, Thu, Fri, Sat, Sun]
。现在您可以打印从 2000 年开始的任何一年的日历。

示例代码:

def first_day_of_year(year): # Calculates and returns the index of the day of the week for the first day of the given year. return (sum(365 + is_leap_year(y) for y in range(1999, year))-3) % 7
如果给定函数是闰年,则 
leap_year_function

返回 1,否则返回 0。

def print_calendar(month, year):
    # Month and year header
    month_arr = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
    print(f"Month: {month_arr[month-1]}, Year {year}")
    print("Mo Tu We Th Fr Sa Su")

    # Find the day of the week for the first day of the month
    start_day_index = first_day_of_year(year)
    # start_day_index = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"].index(start_day)

    # Determine the number of days in each month
    days_in_month = [0, 31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

    # Print spaces for the days before the first day of the month
    print("   " * start_day_index, end="")

    i = 0
    for day in range(1, days_in_month[month] + 1):
        print(f"{day:2}", end=" ")
        i += 1
        if i%7 == 0 and day != days_in_month[month]:
            print()

输入

print_calendar(1, 2001)

输出

Month: Apr, Year 2024 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

© www.soinside.com 2019 - 2024. All rights reserved.