输入某年某月某日,判断这一天是这一年的第几天

注意:以下方法都没有对输入的年月日判断是否正确的语句,所以均须输入正确的年月日,才能返回正确的天数。

方法一:

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)))

猜你喜欢

转载自blog.csdn.net/weixin_44119383/article/details/86664147