1

这是我的hackerRank挑战代码写一个函数

def is_leap(year):
    x=str(year)
    y=int(x[-2:])

    return y%4==0 or y%400==0 and y%100!=0


year = int(input())
print(is_leap(year))

所有 5 个测试用例都有效,除了一个,当 year=2100 时,我想知道为什么?我的代码有什么问题?编辑:运行代码后,我得到以下信息:

编译器消息:错误答案

输入(标准输入):2100

预期输出:假

4

4 回答 4

1

问题是你只测试最后两位数字,如 所见y=int(x[-2:]),这真的没有理由。程序约束已经告诉你输入将是一个 1900-10000 的整数,所以你可以只使用年份。此外,您的 return 语句将评估or之前的and(请参阅此处),因此它检查的最后一件事将是!=100,从而打破它的400情况。

于 2019-03-17T23:28:36.457 回答
0

我喜欢你在一行代码中评估和返回结果的简洁代码!但是,您的代码有两个问题:1)您正在查看最后两位数字而不是测试整数 2)逻辑评估顺序不正确。试试这个简单的代码

def is_leap(year):
    y=int(year)
    return  y%400==0 or (y%100 != 0 and y%4==0)
year = input()
print(is_leap(year))
于 2019-03-18T05:30:46.107 回答
0
def is_leap(year):
    leap = False

    # Write your logic here
    if year % 400 == 0:
        leap = True
    elif year % 4 == 0 and year % 100 != 0:
        leap = True
    return leap
于 2020-11-24T13:54:49.480 回答
0

我不确定为什么您的代码不起作用,但我有解决方案:

def is_leap(year):
    if year%4 == 0:
        if year%100 == 0:
            if year%400 == 0:
                return True #divisible by 4, divisible by 100, and divisible by 400
            else:
                return False #divisible by 4 and divisible by 100
        else:
            return True #divisible by 4 and not divisible by 100
    else:
        return False #not divisible by 4

并对其进行测试:

for i in range(1000, 2501, 4):
    if not is_leap(i):
        print(str(i)) # this will print all the "irregular" leap years between 1000 and 2500

另外,我不确定您在哪里运行该代码,但问题确实要求输入布尔值(True 或 False),而您正在返回年份,所以这可能就是您收到错误的原因。

于 2019-03-17T23:14:58.787 回答