版权声明:不经博主同意不得以任何名义转载,谢谢合作 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()