判断第几天 1.0
四年一闰,百年不闰。year%4==0 &year%100!=0
四百年再闰。year%400==0
元组
区别于列表,元组用圆括号和逗号隔开。
元组一旦被创建就不能修改。
v_1.0代码如下:
"""
作者:xpt
功能:判断第几天
版本:1.0
日期:19/11/2018
"""
from datetime import datetime
def main():
"""
主函数
"""
input_date_str = input('请输入日期(yyyy/mm/dd):')
input_date = datetime.strptime(input_date_str, format('%Y/%m/%d'))
year = input_date.year
month = input_date.month
day = input_date.day
days_in_month_tup = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) # 平年二月28天,则闰年二月需要+1
# print(days_in_month_tup[:month - 1])
days = day + sum(days_in_month_tup[:month - 1])
# print (days)
# 判断是否闰年
if (year % 4 == 0 & year % 100 != 0)|(year % 400 == 0):
# 注意月份大于2才加1
if month > 2:
days += 1
print('这是第{}天'.format(days))
if __name__ == '__main__':
main()
v_1.0代码模块化:
"""
作者:xpt
功能:判断第几天
版本:1.0
日期:19/11/2018
"""
from datetime import datetime
def is_leap_year(year):
"""
判断是否闰年
是,返回Ture
否,返回False
"""
is_leap = False
if (year % 4 == 0 & year % 100 != 0)|(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, format('%Y/%m/%d'))
year = input_date.year
month = input_date.month
day = input_date.day
days_in_month_tup = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) # 平年二月28天,则闰年二月需要+1
# print(days_in_month_tup[:month - 1])
days = day + sum(days_in_month_tup[:month - 1])
# print (days)
# 判断是否闰年
# 注意月份大于2才加1
if month > 2 & is_leap_year(year):
days += 1
print('这是第{}天'.format(days))
if __name__ == '__main__':
main()
但是一般不写两个return,修改如下:
• 如果用列表替换元组,该如何操作?
判断第几天 2.0–增加功能:用列表替换元组
列表与元组
列表是可以被修改的!!!
v_2.0代码如下:
"""
作者:xpt
功能:判断第几天
版本:2.0
日期:19/11/2018
2.0增加功能:用列表替换元组
"""
from datetime import datetime
def is_leap_year(year):
"""
判断是否闰年
是,返回Ture
否,返回False
"""
is_leap = False
if (year % 4 == 0 & year % 100 != 0)|(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, format('%Y/%m/%d'))
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) # 平年二月28天,则闰年二月需要+1
# 列表是可以被修改的
if is_leap_year(year):
days_in_month_list[1] = 29
days = day + sum(days_in_month_list[:month - 1])
print('这是{}年第{}天'.format(year, days))
if __name__ == '__main__':
main()
• 能否按不同的天数将月份划分成不同的集合,然后再操作?
判断第几天 3.0–增加功能:将月份划分为不同的集合再操作
集合
无序!无重复!
range()用法补充:
指定从哪个数字开始
v_3.0代码如下
"""
作者:xpt
功能:判断第几天
版本:3.0
日期:20/11/2018
2.0增加功能:用列表替换元组
3.0增加功能:将月份划分为不同的集合再操作
"""
from datetime import datetime
def is_leap_year(year):
"""
判断是否闰年
是,返回Ture
否,返回False
"""
is_leap = False
if (year % 4 == 0 & year % 100 != 0)|(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, format('%Y/%m/%d'))
year = input_date.year
month = input_date.month
day = input_date.day
_30_day_month_set = {4,6,9,11} # 一个月是30天的月份
_31_day_month_set = {1,3,5,7,8,10,12} # 一个月是31天的月份
# 初始化值
days = 0
for i in range(1, month):
if i in _30_day_month_set:
days += 30
elif i in _31_day_month_set:
days += 31
else:
days += 28
# 是否闰年,是否月份大于2
if is_leap_year(year):
if month > 2:
days += 1
days = days + day
print('这是{}年第{}天'.format(year, days))
if __name__ == '__main__':
main()
• 能否将月份和天数同时表示在一种数据类型中?
判断第几天 4.0–增加功能:将月份及其对应天数通过字典表示
字典
创建字典:
增加一项:
修改某一项:
删除某一项:
是否在字典中:
字典d.get用法:
v_4.0代码如下:
月份-天数 字典
"""
作者:xpt
功能:判断第几天
版本:4.0
日期:20/11/2018
2.0增加功能:用列表替换元组
3.0增加功能:将月份划分为不同的集合再操作
4.0增加功能:将月份及其对应天数通过字典表示
"""
from datetime import datetime
def is_leap_year(year):
"""
判断是否闰年
是,返回Ture
否,返回False
"""
is_leap = False
if (year % 4 == 0 & year % 100 != 0)|(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, format('%Y/%m/%d'))
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
for i in range(1, month):
days += month_day_dict[i]
# 是否闰年,是否月份大于2
if is_leap_year(year):
if month > 2:
days += 1
days = days + day
print('这是{}年第{}天'.format(year, days))
if __name__ == '__main__':
main()
天数-月份 字典
"""
作者:xpt
功能:判断第几天
版本:4.0
日期:20/11/2018
2.0增加功能:用列表替换元组
3.0增加功能:将月份划分为不同的集合再操作
4.0增加功能:将月份及其对应天数通过字典表示
"""
from datetime import datetime
def is_leap_year(year):
"""
判断是否闰年
是,返回Ture
否,返回False
"""
is_leap = False
if (year % 4 == 0 & year % 100 != 0)|(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, format('%Y/%m/%d'))
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}}
# 初始化值
days = 0
for i in range(1, month):
if i in day_month_dict.get(30):
days += 30
elif i in day_month_dict.get(31):
days += 31
else:
days += 28
# 是否闰年,是否月份大于2
if is_leap_year(year):
if month > 2:
days += 1
days = days + day
print('这是{}年第{}天'.format(year, days))
if __name__ == '__main__':
main()
课后练习
• Python提供了一个可以直接获取“第几天”的方法,一行代码就能完成
• 自己通过查阅官方文档找到实现方法
• 提示
strftime()中提供了许多格式化日期字符串的操作
https://docs.python.org/3/library/time.html#time.strftime Next?
• 文件的基本操作
• 循环结构的跳出
• 面向对象的编程