注意:以下方法都没有对输入的年月日判断是否正确的语句,所以均须输入正确的年月日,才能返回正确的天数。
方法一:
from functools import reduce
def num(year, month, day):
"""输入某年某月某日,判断这一天是这一年的第几天"""
L1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 平年对应月份的天数
L2 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 闰年对应月份的天数
if month == 1: # 对月份为1的情况进行单独处理
days =day
elif year % 4 != 0: # year为闰年的情况
days = reduce(lambda x, y: x + y,L1[:month-1]) + day
else: # year为平年的情况
days = reduce(lambda x, y: x + y,L2[:month-1]) + day
return days
while True: # 这是一个无限循环,只有用户输入q确认后才用break中断,退出循环。
print("告诉我几年几月几日,我将告诉你这一天是这一年的第几天。")
print("输入'q'退出。")
year = input("请输入年:")
if year == 'q':
break
month = input("请输入月:")
if month == 'q':
break
day = input("请输入日:")
if day == 'q':
break
try: # 将上面input输入的内容转换为int类型,并利用python中的异常处理进行判断。
year = int(year)
month = int(month)
day = int(day)
except ValueError: # try语句中有一个不满足,都会执行except语句返回下面的异常提示,并重新执行while循环要求重新输入。
print("输入的值必须为整数,请重新输入,谢谢!")
else: # 只有input输入的三个值都能转换为int类型(即try语句都满足),才会跳过except语句,并执行else语句。
print("%d年%d月%d日是这一年的第%d天。\n" % (year, month, day, num(year, month, day))) # 当然,这里的%d用%s代替也可以
方法二:
其实,以上的reduce和lambda函数在这里是大材小用,反而把问题复杂化了。用sum函数就可以实现同样的效果。
def num(year, month, day):
"""输入某年某月某日,判断这一天是这一年的第几天?"""
L1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
L2 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if month == 1:
days =day
elif year % 4 != 0:
days = sum(L1[:month-1]) + day
else:
days = sum(L2[:month-1]) + day
return days
while True:
print("告诉我几年几月几日,我将告诉你这一天是这一年的第几天。")
print("输入'q'退出。")
year = input("请输入年:")
if year == 'q':
break
month = input("请输入月:")
if month == 'q':
break
day = input("请输入日:")
if day == 'q':
break
try:
year = int(year)
month = int(month)
day = int(day)
except ValueError:
print("输入的值必须为整数,请重新输入,谢谢!")
else:
print("%s年%s月%s日是这一年的第%d天。\n" % (year, month, day, num(year, month, day)))