Задача HackerRank написать функцию: тестовый пример 1 не пройден - PullRequest
1 голос
/ 18 марта 2019

это мой код для вызова 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 тестовых случаев работали, кроме одного, когда год = 2100, и я хотел бы знатьЗачем?что не так с моим кодом?изменить: после запуска кода я получил следующее:

Сообщение компилятора: неправильный ответ

Ввод (стандартный ввод): 2100

Ожидаемый вывод: False

Ответы [ 3 ]

1 голос
/ 18 марта 2019

Проблема в том, что вы проверяете только последние две цифры, как видно из y=int(x[-2:]), что на самом деле нет причин. Программные ограничения уже сообщают вам, что вводом будет int от 1900 до 10000, так что вы можете просто работать с годом. Кроме того, ваш оператор возврата будет оценивать or перед and (см. здесь ), поэтому последнее, что он проверяет, будет !=100, таким образом разбивая его для случая 400.

0 голосов
/ 18 марта 2019

Мне нравится ваш краткий код оценки и возврата результата в одной строке кода! Тем не менее, две проблемы с вашим кодом: 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))
0 голосов
/ 18 марта 2019

Я не совсем уверен, почему ваш код не работает, но у меня есть решение:

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), и вы вместо этого возвращаете годы, так что это может быть причиной того, что вы получаю ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...