我是靠谱客的博主 懵懂白昼,最近开发中收集的这篇文章主要介绍小象学院—Python学习联盟06—判断第几天案例描述:必备知识点:代码:最后:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

案例描述:

 

  • 输入某年某月某日,判断这一天是第几天?
  • 分析:
  1. 每个月份的天数不同
  2. 闰年与平年的二月份天数不同
  3. 闰年判断:       

            (1)四年一闰,百年不闰。    y%4 == 0  &  y%100 != 0

            (2)四百年再闰。    y%400 == 0

 

必备知识点:

 

  • datetime库
  • 元组

            

 

代码:

  • 1.0代码(自己写的):

 

'''
判断第几天(自己编写)

'''

import datetime


def main():
    #创建元组
    day_one_month = (31,28,31,30,31,30,31,31,30,31,30,31)

    date_str = input('请输入日期(yyyy/mm/dd):')      #日期的字符串形式
    date_value = datetime.datetime.strptime(date_str,'%Y/%m/%d')    #解析字符串

    year = date_value.year
    month = date_value.month
    day = date_value.day

    
    day_one_month_new = sum(day_one_month[:month - 1])
    if month > 2:
        # 2月份的特殊情况(有可能是闰年)
        if year % 400 == 0 or year % 4 ==0 & year % 100 != 0:
        #或者 if(year % 400 == 0)or((year % 4 == 0)and(year % 100 != 0))
            more_one_day = 1
        else:
            more_one_day = 0
    else:
        more_one_day = 0
    day_number_of_year = day + day_one_month_new + more_one_day
    print(day_number_of_year)


if __name__ == '__main__':
    main()

 

 

  • 代码1.0,老师编写:
'''
版本1.0
老师编写
'''

import datetime


def main():
    #创建元组
    day_one_month = (31,28,31,30,31,30,31,31,30,31,30,31)

    date_str = input('请输入日期(yyyy/mm/dd):')      #日期的字符串形式
    date_value = datetime.datetime.strptime(date_str,'%Y/%m/%d')    #解析字符串

    year = date_value.year
    month = date_value.month
    day = date_value.day

    days = sum(day_one_month[:month - 1]) + day

    if month > 2:
        # 2月份的特殊情况(有可能是闰年)
        if year % 400 == 0 or year % 4 ==0 & year % 100 != 0:
        #或者 if(year % 400 == 0)or((year % 4 == 0)and(year % 100 != 0))
            days += 1

    print(days)


if __name__ == '__main__':
    main()

 

 

  • 版本2.0:将元组改为数组,且模块化处理
 
import datetime
def is_leap_year(year):
    '''
    判断是否为闰年
    若是返回 True。若否返回False
    '''
    is_leap = False             #避免出现两个return。且省略了一个else语句
    if year % 400 == 0 or year % 4 == 0 & year % 100 != 0:
        # 或者 if(year % 400 == 0)or((year % 4 == 0)and(year % 100 != 0))
         is_leap = True
    return is_leap


def main():
    #创建列表(可更改列表中的元素值)
    day_one_month_list = [31,28,31,30,31,30,31,31,30,31,30,31]

    date_str = input('请输入日期(yyyy/mm/dd):')      #日期的字符串形式
    date_value = datetime.datetime.strptime(date_str,'%Y/%m/%d')    #解析字符串

    year = date_value.year
    month = date_value.month
    day = date_value.day

    if is_leap_year(year) and month > 2:
        day_one_month_list[1] = 29
    days = sum(day_one_month_list[:month - 1]) + day
    print(days)


if __name__ == '__main__':
    main()

 

 

  • 版本3.0:能否按不同天数将月份划分成不同的集合,然后再操作。
'''
版本3.0
自己编写
'''

import datetime

def is_leap_year(year):
    '''
    判断是否为闰年
    若是返回 True。若否返回False
    '''
    is_leap = False             #避免出现两个return。且省略了一个else语句
    if year % 400 == 0 or year % 4 == 0 & year % 100 != 0:
        # 或者 if(year % 400 == 0)or((year % 4 == 0)and(year % 100 != 0))
         is_leap = True
    return is_leap


def main():

    date_str = input('请输入日期(yyyy/mm/dd):')  # 日期的字符串形式
    date_value = datetime.datetime.strptime(date_str, '%Y/%m/%d')  # 解析字符串

    year = date_value.year
    month = date_value.month
    day = date_value.day

    #创建月份集合
    _30_days_month_set = {4,6,9,11}
    _31_days_month_set = {1,3,5,7,8,10,12}

    month_day = 0
    #遍历之前所有月份,将之前月份天数相加
    for i in range(1,month):    #list(range(1,5)) 起始值从1开始,即【1,2,3,4】

        if i in _30_days_month_set:
            month_day += 30
        elif i in _31_days_month_set:
            month_day += 31
        elif i == 2:
            month_day += 28
    if is_leap_year(year) and month > 2 :
        month_day += 1
    days = month_day + day
    print(days)


if __name__ == '__main__':
    main()
  • 4.0版本:将月份及其对应天数通过字典表示:

 

'''
版本4.0
自己编写
'''

import datetime

def is_leap_year(year):
    '''
    判断是否为闰年
    若是返回 True。若否返回False
    '''
    is_leap = False             #避免出现两个return。且省略了一个else语句
    if year % 400 == 0 or year % 4 == 0 & year % 100 != 0:
        # 或者 if(year % 400 == 0)or((year % 4 == 0)and(year % 100 != 0))
         is_leap = True
    return is_leap


def main():
    date_str = input('请输入日期(yyyy/mm/dd):')  # 日期的字符串形式
    date_value = datetime.datetime.strptime(date_str, '%Y/%m/%d')  # 解析字符串

    year = date_value.year
    month = date_value.month
    day = date_value.day

    #创建月份集合
    _30_days_month_set = {4,6,9,11}
    _31_days_month_set = {1,3,5,7,8,10,12}

    #月份-天数 字典
    month_day_dict = dict()
    month_day = 0
    #遍历之前所有月份,将之前月份天数相加。或者可以自己手动添加到字典中。
    for i in range(1,month):    #list(range(1,5)) 起始值从1开始,即【1,2,3,4】
        if i in _30_days_month_set:
            month_day_dict[i] = 30
        elif i in _31_days_month_set:
            month_day_dict[i] = 31
        elif i == 2:
            month_day_dict[i] = 28
        month_day += month_day_dict[i]
    if is_leap_year(year) and month > 2:
        month_day += 1
    days = month_day + day
    print(days)


if __name__ == '__main__':
    main()

 

最后:

 

  • python提供了一个可以直接获取‘第几天’的方法,一行代码就能完成
  • 自己通过查阅官方文档找到实现方法
  • 提示:

        strftime()中提供了许多格式化日期字符串的操作

        https://docs.python.org/3/library/time.html#time.strftime

最后

以上就是懵懂白昼为你收集整理的小象学院—Python学习联盟06—判断第几天案例描述:必备知识点:代码:最后:的全部内容,希望文章能够帮你解决小象学院—Python学习联盟06—判断第几天案例描述:必备知识点:代码:最后:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部