【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训练营】
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是Dream呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值