博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python练习题 004:判断某日期是该年的第几天
阅读量:5326 次
发布时间:2019-06-14

本文共 2286 字,大约阅读时间需要 7 分钟。

【Python练习题 004】输入某年某月某日,判断这一天是这一年的第几天?

----------------------------------------------

这题竟然写了 28 行代码!而且还不包含输入数据的验证(只能假设输入的日期是严格按照格式来的)。但我坚信,一定有更简洁的方法,比如 Python 对日期的处理。

不过反正还没学到这些知识,现在只能用傻大粗的办法解决。等学到高级的办法再来更新吧~~~

思路:先判断是否为闰年,这关系到 2 月份的天数。之后再根据月份值把前几个月的天数累积加起来,最后再加上个“日”,就可以了。

1 dat = input('请输入某年某月某日,格式为 yyyy-mm-dd :') 2 y = int(dat[0:4])  #获取年份 3 m = int(dat[5:7])  #获取月份 4 d = int(dat[8:])  #获取日 5  6 ly = False 7  8 if y%100 == 0:  #若年份能被100整除 9     if y%400 == 0:  #且能被400整除10         ly = True  #则是闰年11     else:12         ly = False13 elif y%4 == 0:  #其它情况下,若能被4整除14     ly = True  #则为闰年15 else:16     ly = False17 18 if ly == True:  #若为闰年,则2月份有29天19     ms = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]20 else:21     ms = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]22 23 days = 024 for i in range(1, 13):  #从1到12逐一判断,以确定月份25     if i == m:26         for j in range(i-1):  #确定月份i之后,则将ms列表中的前i-1项相加27             days += ms[j]28         print('%s是该年份的第%s天。' % (dat, (days + d))) #最后再加上“日”,即是答案

请大神帮忙简化下这渣代码。跪谢!

 

【2016-10-13 更新】-------------------------------------------------------------

查了下文档,发现有个 datetime 的库,似乎可以用来解这题。代码如下:

import datetimey = int(input('请输入4位数字的年份:'))  #获取年份m = int(input('请输入月份:'))  #获取月份d = int(input('请输入是哪一天:'))  #获取“日”targetDay = datetime.date(y, m, d)  #将输入的日期格式化成标准的日期print(targetDay - datetime.date(targetDay.year-1, 12, 31))  #减去上一年最后一天,可得解

思路也很简单:获取目标日期,然后减去上一年度的最后一天,就可以得出该日期是当年的第几天。输出结果如下:

请输入4位数字的年份:2016

请输入月份:12
请输入是哪一天:31
366 days, 0:00:00

但就是不知道怎样把这个结果 “366 days, 0:00:00” 处理一下、让只剩下 “366” 这个数值…… datetime库还得多研究研究才行。

 

【2016-10-13 更新】-------------------------------------------------------------

又好好查了查 ,发现上述代码输出的结果是 datetime.timedelta(),可以用 datetime.timedelta.days 轻松提取天数。更新代码如下:

import datetimey = int(input('请输入4位数字的年份:'))  #获取年份m = int(input('请输入月份:'))  #获取月份d = int(input('请输入是哪一天:'))  #获取“日”targetDay = datetime.date(y, m, d)  #将输入的日期格式化成标准的日期dayCount = targetDay - datetime.date(targetDay.year - 1, 12, 31)  #减去上一年最后一天print('%s是%s年的第%s天。'% (targetDay, y, dayCount.days))

输出结果如下:

请输入4位数字的年份:2016

请输入月份:5
请输入是哪一天:1
2016-05-01是2016年的第122天。

当然,正式用的时候,肯定还得验证输入字符的合理性,比如月份只能是 range(1,13),再比如如果是闰年且月份为2,则“天”只能是 range(1,29)等等,这里就不多写了~~~

 

++++++++++++++++++++++++++++++++++++++++++++++

题目出处:

转载于:https://www.cnblogs.com/iderek/p/5954804.html

你可能感兴趣的文章
【题解】luogu p2340 奶牛会展
查看>>
2019牛客暑期多校训练营(第五场)
查看>>
wnmp安装配置的坑
查看>>
【Django】执行manage.py test报数据库错误
查看>>
神奇的Scala Macro之旅(二)- 一个实例
查看>>
sicily 1128. DICE
查看>>
e.Row.Attributes.Add
查看>>
SCOPE_IDENTITY()和 SELECT @@IDENTITY 的用法
查看>>
PLoP(Pattern Languages of Programs,程序设计的模式语言)
查看>>
jquery fileupload
查看>>
第34节:Java当中的异常
查看>>
平均时间复杂度为O(nlogn)的排序算法
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
最大乘积问题
查看>>
codevs1002 搭桥
查看>>
Map源码学习之HashMap
查看>>
高品质免费字体集锦:25款英文艺术字体下载
查看>>
linux服务器上使用find查杀webshell木马方法
查看>>
Unix/Linux环境C编程入门教程(17) Gentoo LinuxCCPP开发环境搭建
查看>>
基于TP5使用Websocket框架之GatewayWorker开发电商平台买家与卖家实时通讯
查看>>