输入某年某月某日,判断日期的正确合理性以及输出该天是该年的第几天?
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
flag = True
while flag :
Date = input('请输入正确合理的年月日(其输入格式如yyyy-mm-dd):')
# split('-')函数利用分隔符(,/;/空格/-等)将每个字符进行分隔
Date = Date.split('-')
# for循环将每个字符转换为int值
for n in range( len(Date) ) :
Date[n] = int( Date[n] )
Year = Date[0]; Month = Date[1]; Day = Date[2]
# if判断输入的年月日的正确合理性
if (0 < Month <= 12) :
flag = False
if ((Month in (1, 3, 5, 7, 8, 10, 12)) and (Day > 31 or Day < 0)) : # Python成员运算符(in / not in)
flag = True
print('输入的日期有误,%d月为大月,最多31天。请重新输入!\n' % Month )
if ((Month in (4, 6, 9, 11)) and (Day > 30 or Day < 0)) :
flag = True
print('输入的日期有误,%d月为小月,最多30天。请重新输入!\n' % Month )
if (Month == 2) :
if (((Year % 4 == 0) and (Year % 100 != 0)) or (Year % 400 == 0)) :
if (Day > 29 or Day < 0) :
flag = True
print('输入的日期有误,该年2月为闰年2月,最多29天。请重新输入!\n')
else:
if (Day > 28 or Day < 0):
flag = True
print('输入的日期有误,该年2月为平年2月,最多28天。请重新输入!\n')
else :
flag = True
print('输入的月份有误,每年只有12个月份。请重新输入!\n')
Ordi_y_day = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365] #平年月份分段天数
Leap_y_day = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366] #闰年月份分段天数
if ( ( (Year % 4 == 0) and (Year % 100 != 0) ) or (Year % 400 == 0) ) :
D_counter = Leap_y_day[ Month - 1 ] + Day
print(Year,'年是闰年,', Month,'月', Day,'日是该年的第', D_counter,'天')
else :
D_counter = Ordi_y_day[ Month - 1 ] + Day
print('%d年是平年,%d月%d日是该年的第%d天' % (Year, Month, Day, D_counter) )
运行结果如下:
请输入正确合理的年月日(其输入格式如yyyy-mm-dd):2019-15-10
输入的月份有误,每年只有12个月份。请重新输入!
请输入正确合理的年月日(其输入格式如yyyy-mm-dd):2019-02-09
2019年是平年,2月9日是该年的第40天
请输入正确合理的年月日(其输入格式如yyyy-mm-dd):2019-01-32
输入的日期有误,1月为大月,最多31天。请重新输入!
请输入正确合理的年月日(其输入格式如yyyy-mm-dd):2019-02-29
输入的日期有误,该年2月为平年2月,最多28天。请重新输入!
请输入正确合理的年月日(其输入格式如yyyy-mm-dd):2019-04-31
输入的日期有误,4月为小月,最多30天。请重新输入!
请输入正确合理的年月日(其输入格式如yyyy-mm-dd):2020-02-30
输入的日期有误,该年2月为闰年2月,最多29天。请重新输入!
请输入正确合理的年月日(其输入格式如yyyy-mm-dd):2019-02-28
2019年是平年,2月28日是该年的第59天
请输入正确合理的年月日(其输入格式如yyyy-mm-dd):2019-03-01
2019年是平年,3月1日是该年的第60天
请输入正确合理的年月日(其输入格式如yyyy-mm-dd):2020-03-01
2020 年是闰年, 3 月 1 日是该年的第 61 天