概述
案例描述:
- 输入某年某月某日,判断这一天是第几天?
- 分析:
- 每个月份的天数不同
- 闰年与平年的二月份天数不同
- 闰年判断:
(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—判断第几天案例描述:必备知识点:代码:最后:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复