蓝桥杯2017年——日期问题(python)

日期问题

【问题描述】
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 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

# 公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年),公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。
# 即所说的四年一闰,百年不闰,四百年再闰
days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
leapdays = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
li = []

# 判断年份是否为闰年,若是返回True
def leapyear(y):
    if (y%4==0 and y%100!=0) or y%400==0:
        return True
    else:
        return False
    
# leapyear(2020)

# 判断日期是否合法
def check(y, m, d):
    if y >= 60:
        y = 1900 + y
    else:
        y = 2000 + y
    
    if m > 12:
        return
    
    if d > 31:
        return
    else:
        if leapyear(y):
            if d > leapdays[m]:
                return
        else:
            if d > days[m]:
                return
        
    li.append([y, m, d])
    
# check(2, 3, 4)

if __name__ == '__main__':
    check(2, 3, 4)
    check(4, 2, 3)
    check(4, 3, 2)
    
    li.sort()  # 日期从早到晚排序
    for i in li:
        print(f'{i[0]}-{i[1]:02d}-{i[2]:02d}')
        

你可能感兴趣的:(蓝桥杯,蓝桥杯,职场和发展,python)