【Python训练营】Python每日一练----第12天:日期问题
📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜
🏅🏅🏅CSDN 2021年度博客之星TOP100,2021年度博客之星领域TOP5,Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨
前言:
【Python训练营】是针对Python语言学习所打造的一场刷题狂欢party! 对基础知识把握不牢固的话,欢迎参考此套课程:Python公开课 搭配使用最佳嗷~喜欢的话就抓紧订阅起来吧!🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信或者在文末添加我的VX,我会拉你进学习交流群,我们一起交流学习,报团打卡
题目描述
题目描述
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。
更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。
比如 02/03/04,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。
给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
输入描述
一个日期,格式是 “AA/BB/CC” (0 0≤A,B,C≤9)。
输出描述
输出若干个不相同的日期,每个日期一行,格式是 “yyyy-MM-dd”。多个日期按从早到晚排列。
输入输出样例
示例
输入
02/03/04
copy
输出
2002-03-04
2004-02-03
2004-03-02
运行限制
最大运行时间:1s
最大运行内存: 256M
解题思路
- 日期问题,首先需要考虑是否为闰年,可以先写出一个函数来判断是否是函数,判断标准:
(year%4 == 0 and year%100 != 0) or year % 400 == 0:
这样是闰年; - 刚开始输入时,我们就让输入的三个值就是字符串,这样有利于我们最后进行字符串拼接,并且不需要考虑是否需要在不满两位数的数据前面进行添加0处理;
- 然后创建一个列表存储是否符合题目要求的日期,得到之后在最后不要忘记去重处理,例如日期02/02/02,需要将列表先变为集合,集合元素不能重合,会自动去重,之后再转化为列表形式:
list1=list(set(list1))
,又因为题目中所说需要期按从早到晚排列,所以需要用到sort()函数,默认reverse = False 进行升序处理; - 判断月份和日子的时候,一定要记住月份和日子下限一定要大于0,因为年份可以是00,即2000年,而月份日子不可能为0:
0<b<=12 and 0< c <= month[b-1]:
,一定要记住,笔者在此处就出过bug,而且找了很久都没发现; - 转化三个输入的数据类型,使其变为整数时,我们一定要在函数内部进行转换,使三个变量还是字符串的形式,这样会有利于最后的拼接;
- 最后题目中要求 “这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。”,因为我们创建的函数变量的顺序是:年-月-日,所以说在原始日期 123 顺序上,我们需要测试
年月日:123
和日月年:321
以及月日年:312
。
源码分享
# 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!
# @Time : 2022/2/6 11:13
# @Author : 是Dream呀!
# @File : 日期问题.py
import os
import sys
# 请在此输入您的代码
a1, b1, c1 =input().split('/')
def runnian(year):
if (year%4 == 0 and year%100 != 0) or year % 400 == 0:
return True
list1= []
def fin(a1,b1,c1):
a = int(a1)
b = int(b1)
c = int(c1)
if a >= 60:
a = a+1900
if runnian(a):
month = [31,29,31,30,31,30,31,31,30,31,30,31,]
if 0<b<=12 and 0< c <= month[b-1]:
list1.append('19'+a1+'-'+b1+'-'+c1)
else:
month = [31,28,31,30,31,30,31,31,30,31,30,31,]
if 0<b<=12 and 0< c <= month[b-1]:
list1.append('19'+a1+'-'+b1+'-'+c1)
else:
a = a+2000
if runnian(a):
month = [31,29,31,30,31,30,31,31,30,31,30,31,]
if 0<b<=12 and 0< c <= month[b-1]:
list1.append('20'+a1+'-'+b1+'-'+c1)
else:
month = [31,28,31,30,31,30,31,31,30,31,30,31,]
if 0<b<=12 and 0< c <= month[b-1]:
list1.append('20'+a1+'-'+b1+'-'+c1)
fin(a1,b1,c1)
fin(c1,b1,a1)
fin(c1,a1,b1)
list1=list(set(list1))
list1.sort() # 默认reverse=False升序
for i in list1:
print(i)
学习总结
1.判断闰年方法:if (year%4 == 0 and year%100 != 0) or year % 400 == 0:
,熟记于心;
2.sort()函数默认reverse = False升序,可以将reverse=True,可以进行降序处理。
3.多个元素输入方法,split()其中的东西表示将输入的数据以什么方式进行分割,分成不同的数据:a1, b1, c1 =input().split('/')
🏅今天是我在Python训练营的第 12 天,希望每天都能见到最棒的你🏅
🏆往期文章----好文推荐🏆
🥇 [Python公开课]零基础玩转Python基础篇----第一节:Python的自我介绍
🥈 [Python公开课]零基础玩转Python进阶篇----第一节:Python中的文件操作
🥉 快来一场一场刷题狂欢的party吧!----【Python训练营】
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
文章来源: xuyipeng.blog.csdn.net,作者:是Dream呀,版权归原作者所有,如需转载,请联系作者。
原文链接:xuyipeng.blog.csdn.net/article/details/122766174
- 点赞
- 收藏
- 关注作者
评论(0)