python案例:追溯时间

第一个版本:简单引入

加油,码农!

'''
    作者: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()
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值