python案例:追溯时间

版权声明:不经博主同意不得以任何名义转载,谢谢合作 https://blog.csdn.net/Z_Howe01/article/details/85392529

第一个版本:简单引入

加油,码农!

'''
    作者:Z_Howe01
    功能:输入某年某月,判断这一天是这一年的第几天
    版本:1.0
    日期:2018.12.30
'''
	#闰年判断:1.四年一闰,百年不闰(y % 4 == 0 and y % 100 != 0);2.四百年再闰(y % 400 == 0)

from datetime import datetime
#(元组操作)
def main():
    '''
    主函数 
    '''
    input_date_str = input('请输入日期(yyyy/mm/dd)')
    input_date = datetime.strptime(input_date_str,'%Y/%m/%d')
    print(input_date)

    year = input_date.year
    month = input_date.month
    day = input_date.day

    #计算之前月份天数的总和以及当前月份天数
    days_in_month_cup = (31,28,31,30,31,30,31,31,30,31,30,31)
    #print(days_in_month_cup[:month - 1])
    days = sum(days_in_month_cup[: month - 1]) + day

    if (year % 4 == 0 and year % 100 != 0)or (year % 400 == 0):
        if month > 2:
            days += 1
    print('这是第{}天。'.format(days))

if __name__ == '__main__':
    main()

第二个版本:用列表(list)替换元组(tuple)

'''
    作者:Z_Howe01
    功能:用列表(list)替换元组(tuple)
    版本:2.0
    日期:2018.12.30
'''
#闰年判断:1.四年一闰,百年不闰(y % 4 == 0 and y % 100 != 0);2.四百年再闰(y % 400 == 0)
#(列表操作)
from datetime import datetime

def is_leap_year(year):
    '''
    判断year是否为闰年
    是—>返回True
    否—>返回False
    '''
    is_leap = False
    if (year % 4 == 0 and year % 100 != 0)or (year % 400 == 0):
        is_leap = True
    return is_leap

def main():
    '''
    主函数 
    '''
    input_date_str = input('请输入日期(yyyy/mm/dd)')
    input_date = datetime.strptime(input_date_str,'%Y/%m/%d')
    print(input_date)

    year = input_date.year
    month = input_date.month
    day = input_date.day

    #计算之前月份天数的总和以及当前月份天数
    days_in_month_list = [31,28,31,30,31,30,31,31,30,31,30,31]
    if is_leap_year(year):      #如果上面的函数返回值为True
        days_in_month_list[1] = 29
    days = sum(days_in_month_list[: month - 1]) + day
    print('这是第{}天。'.format(days))

if __name__ == '__main__':
    main()

第三个版本:用集合(set)替换列表(list)

'''
    作者:Z_Howe01
    功能:用集合(set)替换列表(list)
    版本:3.0
    日期:2018.12.30
'''
#   A|B = A并B , A-B = 属于A但不属于B , A&B = A交B ;
#   A^B = 返回集合A和B中的元素,但不包括同时在其中的元素
#   闰年判断:1.四年一闰,百年不闰(y % 4 == 0 and y % 100 != 0);2.四百年再闰(y % 400 == 0)
#   (集合操作)
#   >>> s = {1,2,3,4,5}
#   >>> a = {2,3,5,6,7,8}
#   >>> s|a
#   {1, 2, 3, 4, 5, 6, 7, 8}
#   >>> s&a
#   {2, 3, 5}
#   >>> s-a
#   {1, 4}
#   >>> s^a
#   {1, 4, 6, 7, 8}

from datetime import datetime

def is_leap_year(year):
    '''
    判断year是否为闰年
    是—>返回True
    否—>返回False
    '''
    is_leap = False
    if (year % 4 == 0 and year % 100 != 0)or (year % 400 == 0):
        is_leap = True
    return is_leap

def main():
    '''
    主函数 
    '''
    input_date_str = input('请输入日期(yyyy/mm/dd):')
    input_date = datetime.strptime(input_date_str,'%Y/%m/%d')
    print(input_date)

    year = input_date.year
    month = input_date.month
    day = input_date.day

    #包含30天  月份集合
    _30_days_month_set = {4,6,9,11}
    _31_days_month_set = {1,3,5,7,8,10,12}

    #初始化值
    days = 0
    days += day
    for i in range(1,month):
        if i in _30_days_month_set:
            days += 30
        elif i in _31_days_month_set:
            days += 31
        else:
            days += 28
    if is_leap_year(year) and month > 2:
        days += 1

    print('这是第{}天。'.format(days))

if __name__ == '__main__':
    main()

第四个版本:用字典(dict)替换集合(set)

'''
    作者:Z_Howe01
    功能:用字典(dict)替换集合(set),将月份及其对应天数通过字典表示
    版本:4.0
    日期:2018.12.30
'''

#   闰年判断:1.四年一闰,百年不闰(y % 4 == 0 and y % 100 != 0);2.四百年再闰(y % 400 == 0)
#   (字典操作)
#   键值组合 eg:身份证号——个人信息
#   通过映射查找数据项
#   一般形式:dict1 = {}
#   一般形式:dict1 = {'egg':12.6,'milk':5.56'}
#   遍历所有的key     for key in dict1.keys():
#                            print(key)
#   遍历所有的value  for value in dict1.values():
#                            print(value)
#   遍历所有的数据项    for item in dict1.items():
#                             print(item)
from datetime import datetime

def is_leap_year(year):
    '''
    判断year是否为闰年
    是—>返回True
    否—>返回False
    '''
    is_leap = False
    if (year % 4 == 0 and year % 100 != 0)or (year % 400 == 0):
        is_leap = True
    return is_leap

def main():
    '''
    主函数 
    '''
    input_date_str = input('请输入日期(yyyy/mm/dd):')
    input_date = datetime.strptime(input_date_str,'%Y/%m/%d')
    print(input_date)

    year = input_date.year
    month = input_date.month
    day = input_date.day
    #月份——天数  字典
    month_day_dict = {1:31,
                      2:28,
                      3:31,
                      4:30,
                      5:31,
                      6:30,
                      7:31,
                      8:31,
                      9:30,
                      10:31,
                      11:30,
                      12:31}

    #初始化值
    days = 0
    days += day
    for i in range(1,month):
       days += month_day_dict[i]
    if is_leap_year(year) and month > 2:
        days += 1

    print('这是第{}天。'.format(days))

if __name__ == '__main__':
    main()

第五个版本:改变第四个版本的映射顺序

'''
    作者:Z_Howe01
    功能:用字典(dict)替换集合(set),将4.0版本的“月份—天数”映射变为“天数—月份”映射
    版本:5.0
    日期:2018.12.30
'''

#   闰年判断:1.四年一闰,百年不闰(y % 4 == 0 and y % 100 != 0);2.四百年再闰(y % 400 == 0)
#   (字典操作)
#   键值组合 eg:身份证号——个人信息
#   通过映射查找数据项
#   一般形式:dict1 = {}
#   一般形式:dict1 = {'egg':12.6,'milk':5.56'}
#   遍历所有的key     for key in dict1.keys():
#                            print(key)
#   遍历所有的value  for value in dict1.values():
#                            print(value)
#   遍历所有的数据项    for item in dict1.items():
#                             print(item)
from datetime import datetime

def is_leap_year(year):
    '''
    判断year是否为闰年
    是—>返回True
    否—>返回False
    '''
    is_leap = False
    if (year % 4 == 0 and year % 100 != 0)or (year % 400 == 0):
        is_leap = True
    return is_leap

def main():
    '''
    主函数 
    '''
    input_date_str = input('请输入日期(yyyy/mm/dd):')
    input_date = datetime.strptime(input_date_str,'%Y/%m/%d')
    print(input_date)

    year = input_date.year
    month = input_date.month
    day = input_date.day
    
    #天数——月份  字典
    day_month_dict = {30:{4,6,9,11},
                      31:{1,3,5,7,8,10,12},
                      28:{2}}
    #初始化值
    days = 0
    days += day
    for i in day_month_dict.keys(): #遍历day_month_dict中的所有key
        for k in range(1, month):
            if k in day_month_dict[i]:
                days += i
    if is_leap_year(year) and month > 2:
        days += 1
    print('这是第{}天。'.format(days))

if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/Z_Howe01/article/details/85392529