如何不使用导入日历而是使用导入数学来创建日历
我无法做到这一点,尝试后日历无法显示加上我尝试使用 def day_of_week(day, Month, Year) , def is_leap(year) 和其他函数
为了使其正常工作,您需要找出一年(您想要日历的年份)的第一天(星期几,周日至周六)。执行此操作的一种方法是手动初始化过去一年的第一天。假设您的日期是 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