The question is this:
We add a Leap Day on February 29, almost every four years. The leap day is an extra, or intercalary day and we add it to the shortest month of the year, February. In the Gregorian calendar three criteria must be taken into account 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.
This is what I've coded in python 3
def is_leap(year):
leap = False
# Write your logic here
if((year%4==0) |(year%100==0 & year%400==0)):
leap= True
else:
leap= False
return leap
year = int(input())
print(is_leap(year))
This code fails for input 2100. I'm not able to point out the mistake. Help please.
First of all, you are using bitwise operators | and & (you can read about it here - https://www.educative.io/edpresso/what-are-bitwise-operators-in-python), but you need to use logical operators, such as or and and.
Also, your code can be simplified:
def is_leap(year):
return (year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0))