本文主要是介绍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 1else:return 0
def countDay(currentDay):#每月天数数组perMonth=[0,31,28,31,30,31,30,31,31,30,31,30]totalDay=0year=1990while year<currentDay['year']:#求出指定日期之前的每一年的天数之和if runYear(year)==1:totalDay+=366else:totalDay+=365year+=1#如果为闰年,则二月份为29天if runYear(currentDay['year'])==1:perMonth[2]+=1i=0while i<currentDay['month']:#将本年内的天数累加道totalDay中totalDay+=perMonth[i]i+=1totalDay+=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.结果展示
这篇关于python算法1.6打鱼or晒网的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!