【蓝桥Python每日一练】————日期问题

题目

试题 历届真题 日期问题【第八届】【省赛】【B组】

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

输入格式

一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9)

输入格式

输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。

样例输入

02/03/04

样例输出

2002-03-04
2004-02-03
2004-03-02

知识点

1、按格式输入input(),strip()去空格

2、日期函数datetime有判断功能。

3、异常处理:try: except:

4、集合set()去重。

5、排列key=lambda x: 表达式。

代码

from datetime import datetime
a=list(input().strip().split("/"))#02/03/04
#判断日期是否合法
def hefa(s):
    try:
        year=int(s[:4])
        month=int(s[4:6]) if s[4]!='0' else int(s[5])
        day=int(s[6:]) if s[6]!='0' else int(s[7])
        if year<1960 or year>2059:
            return False
        datetime(year,month,day)#判断是否合法
    except:
        return False
    return True
#b:二维列表存放3种可能
b=[]
b.append([a[0],a[1],a[2]])
b.append([a[2],a[0],a[1]])
b.append([a[2],a[1],a[0]])
#[['02', '03', '04'], ['04', '02', '03'], ['04', '03', '02']]
#c:存放答案列表
c=[]
for i in b:
    for j in range(19,21):#19 20
        if hefa(str(j)+i[0]+i[1]+i[2])==1:
            c.append(str(j)+i[0]+'-'+i[1]+'-'+i[2])
#c=['2002-03-04', '2004-02-03', '2004-03-02']
c=list(set(c))#集合去重
c.sort(key=lambda x:(int(x[:4]),int(x[5:7]),int(x[8:])))#升序排序
for i in c:
    print(i)

  强烈推荐小郑大佬的解题思路:

Python蓝桥杯 复盘历届难题 备战_m0_62277756的博客-CSDN博客

你可能感兴趣的:(备战蓝桥杯,日期时间,python,蓝桥杯,职场和发展,算法)