编程语言
首页 > 编程语言> > python算法1.6打鱼or晒网

python算法1.6打鱼or晒网

作者:互联网

1.问题叙述
中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起便开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
2.解决方案
根据题意可以将解题过程分为以下三步:
1)计算从1990年1月1日开始至指定日期共有多少天。
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除。
3)根据余数判断他是在“打鱼”还是在“晒网”。若余数为1,2,3,则他是在“打鱼”,否则是在“晒网”。
使用的算法为数值计算算法,要利用循环求出指定日期距1990年1月1日的天数,并考虑到循环过程中的闰年情况,闰年二月为29天,平年二月为28天。
判断闰年的方法可以用伪语句描述如下:如果能被4整除并且不能被100整除或者能被400整除,则该年是闰年,否则不是闰年。
3.代码演示

#三天打鱼两天晒网
print("please input 指定日期 包括年,月,日 如:1999 1 31")
year,month,day=[int(i) for i in input().split()]
#判断是否为闰年,是,返回1;否则返回0
def runYear(year):
    if (year%4==0 and year%100!=0) or (year%400==0):
        return 1
    else:
        return 0
def countDay(currentDay):
    #每月天数数组
    perMonth=[0,31,28,31,30,31,30,31,31,30,31,30]
    totalDay=0
    year=1990
    while year<currentDay['year']:
        #求出指定日期之前的每一年的天数之和
        if runYear(year)==1:
            totalDay+=366
        else:
            totalDay+=365
        year+=1
    #如果为闰年,则二月份为29天
    if runYear(currentDay['year'])==1:
        perMonth[2]+=1
    i=0
    while i<currentDay['month']:
        #将本年内的天数累加道totalDay中
        totalDay+=perMonth[i]
        i+=1
    totalDay+=currentDay['day']
    return totalDay

#定义一个日期字典
today={'year':year,'month':month,'day':day}
totalDay=countDay(today)
print("%d年%d月%d日与1990年1月1日相差 %2d天"%(year,month,day,totalDay))
result=totalDay%5
if result>0 and result<4:
    print("今天打鱼")
else:
    print("今天晒网")

4.结果展示
在这里插入图片描述

标签:1990,1.6,晒网,闰年,打鱼,python,31,year
来源: https://blog.csdn.net/qq_42111085/article/details/123170609