第6期-日期查询

1 问题描述

输入某年某月某日,判断这个日期是这一年的第多少天
如:输入“2020 3 5”后,可以显示“这是这一年的第65天”

2 解题思路

以3月5日为例,应该先把前两个月的日期加起来,然后再加上5天即本年的第几天
需考虑特殊情况:闰年且输入月份大于2时需多加一天

3 解题方法

方法一

第6期-日期查询
print("请输入年月日,判断这个日期是这一年的第多少天")

year = int(input("请输入年份:"))
month = int(input("请输入月份:"))
day = int(input("请输入日期:"))

months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]

if 1 <= month <= 12:
    sum = months[month - 1]
    sum += day

    leap = 0
    if year % 4 == 0 and year % 100 !=0 or year % 400 == 0:
        leap = 1

    days = [31, 28 + leap, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if day > days[month -1]:
       print("输入的日期错误")

    else:
       if month > 2 and leap == 1:
           sum += 1

       print(f"这是这一年的第 {sum} 天")

else:
      print("输入的月份错误")
View Code

第1行: 简要描述日期查询的问题
第3-5行: input函数请用户输入年、月、日,int函数将输入的字符串转化为整型
第7行: 创建列表months,列表中的元素为上个月月底是今年的第几天(二月按平年算)
第9-11行: 用if...else语句判断输入的月份是否正确,如果不正确,则转到第27行;如果正确,则通过列表的索引获取上个月之前所有的天数,再加上这个月的天数,就可得到这个日期是这一年的第多少天
第13行: 创建变量leap,赋值为0
第14行: 用if语句判断平闰年,若这一年是闰年,leap赋值为1
第17行: 创建列表days,列表中的元素为每个月的天数
第18-23行: 用if...else语句判断输入的日期是否正确,如果不正确,则打印"输入的日期错误",否则转到第21行,若为闰年且输入月份大于2,总天数多加一天
第25行: 用f-string的方法格式化字符串,print函数打印输出这是这一年的第多少天​

第3期-判断闰年 (opens new window)有讲解如何判断闰年,忘记了的而小伙伴可以查看哦~

方法二

第6期-日期查询
print("请输入年月日,判断这个日期是这一年的第多少天")

year = int(input("请输入年份:"))
month = int(input("请输入月份:"))
day = int(input("请输入日期:"))

import datetime

date1 = datetime.date(year, month, day)
date2 = datetime.date(year-1, 12, 31)
timedelta= (date1 - date2).days

print(f"这是这一年的第{timedelta}天")
View Code

第1行: 简要描述日期查询的问题
第3-5行: input函数请用户输入年、月、日,int函数将输入的字符串转化为整型
第7行: 导入datetime模块,datetime是python操作日期和时间的内置模块
第9行: 创建变量date1,使用datetime模块中名为date的类,指定参数为用户输入的年月日
第10行: 创建变量date2,指定参数为用户输入的上一年的最后一天
第11行: 将date1、 date2两个日期相减,(date1 - date2).days返回相差天数
第13行: 用print函数打印输出这是这一年的第多少天

 

上一篇:获取最近30天数据


下一篇:python自动化运维-删除创建时间大于n天的文件