What is the "test case failed" in python?

Viewed 3550

I am sorry to say that I start to practice for solving Python Programming in HackerRank but I faced a problem which is know as test case error.Need help for resolving my current problems.

below the problem explanation in HackerRank,

An extra day is added to the calendar almost every four years as February 29, and the day is called a leap day. It corrects the calendar for the fact that our planet takes approximately 365.25 days to orbit the sun. A leap year contains a leap day.

In the Gregorian calendar, three conditions are used to identify leap years:

The year can be evenly divided by 4, is a leap year, unless: The year can be evenly divided by 100, it is NOT a leap year, unless: The year is also evenly divisible by 400. Then it is a leap year. This means that in the Gregorian calendar, the years 2000 and 2400 are leap years, while 1800, 1900, 2100, 2200, 2300 and 2500 are NOT leap years. Source

Task Given a year, determine whether it is a leap year. If it is a leap year, return the Boolean True, otherwise return False.

Note that the code stub provided reads from STDIN and passes arguments to the is_leap function. It is only necessary to complete the is_leap function.

Input Format Read year, the year to test.

Constraints 1900<=year<=10**5

Output Format The function must return a Boolean value (True/False). Output is handled by the provided code stub.

Sample Input 0

1990

Sample Output 0

False

Explanation 0 1990 is not a multiple of 4 hence it's not a leap year.

Below The code which I submitted:

def is_leap(year):
    leap = False
    if year%4==0:
        if year%100==0:
            if year%400==0:
                return True
            else:
                return False
        else:
            return False
    else:
        return False
    
    return leap

year = int(input())

Note: after submission it show the Test case Failed

3 Answers

I think you had some trouble understanding the question. The conditions for a year to be a leap year is:

  • it should be divisible by 4 but not by 100 OR
  • it should be divisible by 400.

This means that:

  1. 400 -> leap year.
  2. 100 -> divisible by 4 but still not a leap year because it is divisible by 100.
  3. 4 -> leap year.

So basically, we have to check if a year is divisible by 4 but not by 100, OR if it is simply divisible by by 400.

The Python code for this will be:

def is_leap(year):
    if year%4==0 and year%100!=0:
        return True
    if year%400==0:
        return True
    return False            

You don't need too many return statements because if the first condition was true, it would never go to the next statement. If the code returns True at any point in this function then it would never reach False. The only way the control would go to return False is if none of the conditions held True.

Condition for leap year given in the condition

  • if the input is evenly divisible by 4 and not by 100(evenly divisible) then it is a leap year
  • if the input is evenly divisible by 100 and 400 then it is a leap year

Code

def is_leap(year):
    
        if 1900 <= year <= 10**5:
            if (year % 4 == 0 and year % 100 != 0) or (year % 100 == 0 and year % 400 == 0):
                return True
            return False
        return False
    
    year = int(input())

This will satisfy all the test cases.

I think the point here is that you see the conditions are separated from each other.you have to cover all these three conditions.

def is_leap(year):
    leap = False
    
    if year % 4 == 0 and year % 100 != 0:
         leap = True
    elif year % 100 !=0 and year % 400 == 0:
        leap = True
    elif year % 400 == 0 and year % 4 == 0:
        leap = True
    
    return leap

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