1.需求分析:
a:先输出提示语句,并接受用户输入的年、月。
b:根据用户输入的年,先判断是否是闰年。
c:根据用户输入的月来判断月的天数。
d:用循环计算用户输入的年份距1900年1月1日的总天数。
e:用循环计算用户输入的月份距输入的年份的1月1日共有多少天。
f:相加d与f的天数,得到总天数。
g:用总天数来计算输入月的第一天的星期数。
h:根据g的值,格式化输出这个月的日历。
2.完成代码如下:
# 1.获取月份的天数
def fn1(year,month):
if month in (1,3,5,7,8,10,12):
day=31
elif month ==2:
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print(f'{year}年是润年')
day=29
else:
day=28
else:
day=30
# print(f'{year}年{month:>02d}月有{day}天')
return day
# 2.判断输入年份闰年和平年总天数
def fn2(year):
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
days=366
else:
days=365
# print(f'{year}年共{days}天')
return days
# 3.今年到1900年的天数
def fn3(year):
days=0
for x in range(1900,year):
if fn2(x):
days+=fn2(x)
# print(f'{year}年-1900年,共{days}天')
return days
# 4.输入的月份距离当年1月1日的天数
def fn4(year,month):
days=0
for x in range(1,month):
days+=fn1(year,x)
# print(f'{year}年{month:>02d}月01日是{year}年的第{days}天')
return days
# 5.得到当前月的的第一天是星期几
def fn5(year,month):
# 公式:(总天数+1)%7=星期几
week=(fn3(year)+fn4(year,month)+1)%7
# 星期week为 0 表示星期天
# print(f'{year}年{month:>02d}月01日\t星期{week}')
return week
#6.格式化输出日历
def fn6(year,month):
print('星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期天')
count=0
# +6表示将周天从下标为1的位置挪到最后,所以加 6;
# 打印每月01日的前面的空格字符
for j in range((fn5(year,month)+6)%7):
print(end='\t\t')
count+=1
# 打印日期号数,向后递推
for i in range(1,fn1(year,month)+1):
count+=1
print(i,end='\t\t')
# 如果求余7恒等于0,则换行
if count % 7==0:
print('')
if __name__ == '__main__':
year= int(input('请输入年份:'))
month= int(input('请输入月份:'))
fn1(year,month)
fn2(year)
fn3(year)
fn4(year,month)
fn5(year,month)
fn6(year,month)
3.万年历效果展示: