您的位置:首页 > 大数据 > 人工智能

人工智能学习联盟免费课程——案例五:判断第几天

2019-03-22 10:07 447 查看

目录

案例五 时间判断

通过不同的数据储存类型来实现同一个功能,元组、列表、集合和字典。

from datetime import datetime
def is_leap_year(year):
'''
判断是否为闰年
'''
is_leap = False
if (year % 2 == 0) | ((year % 2 ==0) & (year % 2 != 0)):
is_leap = True
return is_leap

元组

#元组存储月份天数表
def days_tupl() :
data_str = input('请输入日期(yyyymmdd):')
data_time = datetime.strptime(data_str, '%Y%m%d')
#提取年月日
year = data_time.year
month = data_time.month
day = data_time.day
#月份天数表
days_of_month = (31,28,31,30,31,30,31,31,30,31,30,31)
#计算天数
days = sum(days_of_month[:month - 1]) + day
if (month > 2) & is_leap_year(year):
days += 1
print('这是{}年的第{}天(by tupl)。'.format(year,days))

列表

#列表存储月份天数表
def days_list() :
data_str = input('请输入日期(yyyymmdd):')
data_time = datetime.strptime(data_str, '%Y%m%d')
#提取年月日
year = data_time.year
month = data_time.month
day = data_time.day
#月份天数表
days_of_month = [31,28,31,30,31,30,31,31,30,31,30,31]
#判断闰年
if is_leap_year(year):
days_of_month[1] = 29
#计算天数
days = sum(days_of_month[:month - 1]) + day
print('这是{}年的第{}天(by list)。'.format(year,days))

集合

#集合存储月份天数表
def days_set() :
data_str = input('请输入日期(yyyymmdd):')
data_time = datetime.strptime(data_str, '%Y%m%d')
#提取年月日
year = data_time.year
month = data_time.month
day = data_time.day
#月份天数表
_31_days = {1,3,5,7,8,10,12}
_30_days = {4,6,9,11}
#初始化
days = 0
days += day
#计算天数
for i in range(1,month):
if i in _31_days:
days += 31
elif i in _30_days:
days += 30
else:
days += 28
#判断闰年
if is_leap_year(year):
days  += 1
print('这是{}年的第{}天(by set)。'.format(year,days))

字典

#集合存储月份天数表
def days_dic() :
data_str = input('请输入日期(yyyymmdd):')
data_time = datetime.strptime(data_str, '%Y%m%d')
#提取年月日
year = data_time.year
month = data_time.month
day = data_time.day
#月份天数表
days_of_month = {1:31,
2:28,
3:31,
4:40,
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 += days_of_month[i]
#字典索引从1开始
#判断闰年
if is_leap_year(year):
days  += 1
print('这是{}年的第{}天(by dic)。'.format(year,days))
def main():
days_tupl()
days_list()
days_set()
days_dic()
main()
请输入日期(yyyymmdd):20000301
这是2000年的第61天(by tupl)。
请输入日期(yyyymmdd):20000301
这是2000年的第61天(by list)。
请输入日期(yyyymmdd):20000301
这是2000年的第61天(by set)。
请输入日期(yyyymmdd):20000301
这是2000年的第61天(by dic)。

课后思考

  1. 如果把字典中的键值对反过来,如何实现功能
  2. Python自带的功能,一行代码来实现
#思考1
def days_dic2() :
data_str = input('请输入日期(yyyymmdd):')
data_time = datetime.strptime(data_str, '%Y%m%d')
#提取年月日
year = data_time.year
month = data_time.month
day = data_time.day
#月份天数表
days_of_month = {31:{1,3,5,7,8,10,12},
30:{4,6,9,11}}
#初始化
days = 0
days += day
#计算天数
for i in range(1,month):
if i in days_of_month[31]:
days += 31
elif i in days_of_month[30]:
days += 30
else:
days += 28
#字典索引从1开始
#判断闰年
if is_leap_year(year):
days  += 1
print('这是{}年的第{}天(by dic)。'.format(year,days))
days_dic2()
请输入日期(yyyymmdd):20000301
这是2000年的第61天(by dic)。
#思考2
from datetime import datetime as dt
print(dt.strftime(dt.strptime(input('请输入查询日期(yyyymmdd):'),'%Y%m%d'),'%j'))
请输入查询日期(yyyymmdd):20000301
061

借助datetime库里的stftime函数来实现格式化数据。该函数的功能是将一个时间类型变量转换成你需要的格式,%j代表的是Day of the year as a zero-padded decimal number.

更多参考Python官方文档

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐