KY111 日期差值(Python) *多组输入且多行一组

日期差值_牛客题霸_牛客网有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。题目来自【牛客题霸】icon-default.png?t=N7T8https://www.nowcoder.com/share/jump/6796812221702701424864

table = [[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]]
reference = [365, 366]


def whether_leap(year):
    return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)


def days_count_in_year(year, month, day):  # 某个日期是本年中的多少天
    count = day
    month -= 1
    r = whether_leap(year)
    while month > 0:
        count += table[r][month]
        month -= 1
    return count


if __name__ == '__main__':
    while True:
        try:
            n1 = int(input())
            d1 = n1 % 100
            n1 = (n1 - d1) // 100
            m1 = n1 % 100
            y1 = (n1 - m1) // 100

            n2 = int(input())
            d2 = n2 % 100
            n2 = (n2 - d2) // 100
            m2 = n2 % 100
            y2 = (n2 - m2) // 100

            #三种情况
            if y1 == y2 and m1 == m2:
                if (abs(d1 - d2) == 1):
                    print("2")
                else:
                    print(abs(d1 - d2)+1)

            elif y1 == y2 and m1 != m2:
                count1 = days_count_in_year(y1, m1, d1)
                count2 = days_count_in_year(y2, m2, d2)
                print(abs(count1 - count2)+1)

            elif y1 != y2:
                # 比较出大日期和小日期
                if y1 > y2:
                    b_y = y1
                    s_y = y2
                    b_m = m1
                    s_m = m2
                    b_d = d1
                    s_d = d2
                else:
                    b_y = y2
                    s_y = y1
                    b_m = m2
                    s_m = m1
                    b_d = d2
                    s_d = d1
                count = days_count_in_year(b_y, b_m, b_d)
                b_y -= 1
                while (b_y >= s_y):
                    r = whether_leap(b_y)
                    count += reference[r]
                    b_y -= 1
                count -= days_count_in_year(s_y, s_m, s_d)
                print(count+1)

        except:
            break

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值