python打印万年历_python青苔计划(六)打印万年历

947655efb8eb

青苔计划

/(ㄒoㄒ)/~~

我这样的小白

万年历打完,感觉身体被掏空

请给我暖暖的拥抱 ╮(╯╰)╭

----------正经的分割线----------

947655efb8eb

任务要求

刚看到要打印万年历,我彻底懵逼了,从何打起?怎么打!特别是把农历和阳历搞混了,被农历中的闰月的概念折磨的死去活来,一番折磨后彭老师在学习群中再次强调要分拆目标(PS:分拆真的是一种能力)

目标分拆

判断year是否为闰年(关系到2月的天数)

判断month每个月的天数

分为31天,30天,29天,28天四中(用于计算每年的总天数)

判断每月1日对应的星期几(根据参考日期:1990年1月1日是星期一,计算某年某月万年历开始打印的位置)

1.判断是否为闰年

#判读是否为闰年

def yes_or_not_leap_year(year): #定义函数

if year%4==0 and year%100!=0 or year%400==0:

return True #返回值供计算2月天数使用

else:

return False

2.判断每个月的天数

#判断每个月的天数,并返回对应月的天数,供计算输入日期与1990年1月1日的天数差

def days_of_the_month(year,month):

if month in [1,3,5,7,8,10,12]:

return 31

elif month in [4,6,9,11]:

return 30

elif yes_or_not_leap_year(year):#根据是否为闰年,返回2月对应的天数

return 29

else:

return 28

3.计算查询的日期距离1990年1月1日相差多少天

#计算查询的日期距离1990年1月1日相差多少天

def days_between_to_19900101(year,month):

sum_days=0

for y in range(1990,year):#计算相差年份对应的天数

if yes_or_not_leap_year(year):

sum_days=sum_days+366

else:

sum_days=sum_days+365

for m in range(1,month):将本年至查询日期的天数计入

sum_days=sum_days+days_of_the_month(year,month)

return sum_days

4.计算查询月1号对应的是星期几

#判断一个月的第一天是星期几,以1990年1月1日为时间参考

def the_firstday_of_month(year,month):

return 1+days_between_to_19900101(year,month)%7

5.打印万年历QAQ~

def print_wannianli(year,month):

print(year," ",month)

print(" "'星期一'" " '星期二'" "'星期三'" "'星期四'" "'星期五'" "'星期六'" "'星期日')

i=the_firstday_of_month(year,month)

print((' A '*(i-1)),end="")

for p in range(1,days_of_the_month(year,month)+1):

if i%7!=0:

if len(str(p))==1:

print(' ',end="")

print(p,end='')

print(' ',end="")

else:

print(' ', end="")

print(p, end='')

print(' ', end="")

else:

print(' ',end="")

print(p)

i=i+1

6函数调用

year=int(input("请输入要查询的年份"))

month=int(input("请输入要查询的月份"))

print_wannianli(year,month)

泪和汗

提前学些函数构建和调用,没时间写出来啦

打印时文字间的距离全部用空格调整,调了好久,因为日期存在len(month)=1的,还有len(month)=2的,所以导致错位,最终引起蝴蝶效应放大了错位

947655efb8eb

第一次尝试

经彭老师提醒后,加入日期的判断,终于可以了,日期中关键的几个空格我用了“A”代替,为了只管看到输出,其实可以删去

947655efb8eb

修正后

完整代码:打印万年历

#打印万年历

#1.判断是否为闰年

#2.计算每种情况下,每个月份的天数

#3.由2计算每年的天数

#4.计算每月一日对应的星期,基于1990年1月1日是星期一

#判读是否为闰年

def yes_or_not_leap_year(year):

if year%4==0 and year%100!=0 or year%400==0:

return True

else:

return False

#判断每个月的天数

def days_of_the_month(year,month):

if month in [1,3,5,7,8,10,12]:

return 31

elif month in [4,6,9,11]:

return 30

elif yes_or_not_leap_year(year):

return 29

else:

return 28

#计算查询的日期距离1990年1月1日相差多少天

def days_between_to_19900101(year,month):

sum_days=0

for y in range(1990,year):

if yes_or_not_leap_year(year):

sum_days=sum_days+366

else:

sum_days=sum_days+365

for m in range(1,month):

sum_days=sum_days+days_of_the_month(year,month)

return sum_days

#判断一个月的第一天是星期几

def the_firstday_of_month(year,month):

return 1+days_between_to_19900101(year,month)%7

#打印日历

def print_wannianli(year,month):

print(year," ",month)

print(" "'星期一'" " '星期二'" "'星期三'" "'星期四'" "'星期五'" "'星期六'" "'星期日')

i=the_firstday_of_month(year,month)

print((' A '*(i-1)),end="")

for p in range(1,days_of_the_month(year,month)+1):

if i%7!=0:

if len(str(p))==1:

print(' ',end="")

print(p,end='')

print(' ',end="")

else:

print(' ', end="")

print(p, end='')

print(' ', end="")

else:

print(' ',end="")

print(p)

i=i+1

#输入及启动程序

year=int(input("请输入要查询的年份"))

month=int(input("请输入要查询的月份"))

print_wannianli(year,month)

第一周打卡成功

青苔计划一周记

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值