您的位置:首页 > 编程语言 > Python开发

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_mjj 发布了6 篇原创文章 · 获赞 8 · 访问量 363 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: