Python经常遇到的笔试题之三天打鱼两天晒网:
2020-04-02 18:57
681 查看
问题概述:中国有句俗语叫“三天打鱼两天晒网”某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
整体思路如下:
1.计算从1990年1月1日开始至指定日期共有多少天;
2.由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5取除;
3.根据余数判断他是在“打鱼”还是在“晒网”;若余数为1,2,3,则他是在“打鱼”;否则是在“晒网”
第一步:
首先,我们要判断用户输入的日期是否正确,在程序中规定日期的格式YYYYMMDD(年月日),并且只能为8位整数。采用INT(输入(XXX)即输入只能为整数,输入字符串时会产生异常,会提醒你输入整数。通过列表,将输入的数字转为数组,方便之后提取年月日,也方便求输入的长度;通过LEN(日期)判断输入是否为8位,如果输入的不够八位数或者超过时也会产生异常,当输入正确的日期后,首先会数组提取日期,即数组0-3为年,4-5位月份,6-7为日。首先根据年份判断该日期是否在2010年之后,若不是则会产生异常。
第二步:
获取到正确的输入日期信息以后就要来计算距离1990年1月1日的总天数了通过自定义函数来判断是否是闰年。
第三步:
接下来算用户输入日期这一年已经过了多少天,如果是闰年2会有29天,其他情况1、3、5、7、8、10、12月有31天,4、6、9、11有30天。所以首先要判断每个月有多少天然后将这些月份的总天数相加,最后加上用户输入的“天”。
第四步:
最后将这两部分相加就是用户输入的日期距离1990年1月1日的总天数,然后将其对5取余,根据余数判断为“打鱼”还是“晒网”。
代码
try: Date = int(input('请输入日期(请以yyyymmdd输入):')) date = list(str(Date)) try: if len(date) != 8: print("输入日期有误!") global year year = date[0] + date[1] + date[2] + date[3] year = int(year) month = date[4] + date[5] month = int(month) day = date[6] + date[7] day = int(day) if year < 1990: print("请输入正确的日期!") # 判断是不是闰年 def runYear(year): if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: return True else: return False # 判断每月有几天 def getDays(year, month): days = 0 if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12: days = 31 elif month == 4 or month == 6 or month == 9 or month == 11: days = 30 elif month == 2: if runYear(year): days = 29 else: days = 28 return days # 计算该日期本年总天数 def thisYearDays(year, month, day): sum = 0 i = 1 while i < month: monthDay = getDays(year, month) sum += monthDay i += 1 return sum + day # 计算距离输入日期的总天数 def allDays(year, month, day): sum = 0 i = 1990 while i < year: if runYear(i): sum += 366 else: sum += 365 i += 1 s = thisYearDays(year, month, day) sum += s return sum # 判断是捕鱼还是晒网 def judge(days): x =days % 5 if x >= 1 and x <= 3: # 当余数为1/2/3时为打鱼,余数为0/4时候为晒网 print("今天打鱼") else: print("今天晒网") sum = allDays(year, month, day) judge(sum) except IndexError: print("请输入八位整数") except ValueError: print("请输入整数!")
结果:
请输入日期(请以yyyymmdd输入):19900203 今天打鱼
- 点赞 2
- 收藏
- 分享
- 文章举报
相关文章推荐
- 链表常用操作(笔试面试经常遇到)
- 我的python面试遇到的笔试题和惨痛经历。。。
- 关于java中是引用传递还是值传递的问题!!!经常在笔试中遇到,今天终于弄明白了!
- Python2到Python3经常遇到的问题汇总
- Java 笔试中经常遇到的笔试题
- python lambda函数详细解析(面试经常遇到)
- python新手经常遇到的17个错误分析
- python学习过程中经常遇到的错误或失误
- 嵌入式经典笔试题,经常遇到
- 一些前端笔试经常会遇到的考程序输出的题(持续更新)
- python3环境下 tensorflow环境中经常遇到'*' has type str, but expected one of: bytes问题的解决
- 笔试时遇到 Python 中继承优先判断咋办?
- 互联网公式笔试中经常遇到的问题
- 一些新手经常遇到的python编码错误
- 笔试 嵌入式Linux软件工程师 经常遇到的题目
- python新手经常遇到的17个错误分析
- python3环境下 tensorflow环境中经常遇到'*' has type str, but expected one of: bytes问题的解决
- Java 笔试中经常遇到的笔试题
- 笔试经常遇到的选择排序、冒泡排序和二分法查找
- WINDOWS安装python3.X遇到的错误解决方法