• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Leap year verification

ulfben Jan 14th, 2017 (edited) 108 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. #! python3
2. # -*- encoding: utf-8 -*-
3.
4. #Leap year verification
5. # Ulf Benjaminsson, 2017-01-14
6. import sys
7.
8. #(year, true if leap year)
9. def makeTestCase(a, b):
10.     return (a, b);
11.
12. def makeTestCases():
13.     return [
14.         makeTestCase(1800, False),
15.         makeTestCase(1900, False),
16.         makeTestCase(2100, False),
17.         makeTestCase(2200, False),
18.         makeTestCase(2300, False),
19.         makeTestCase(2500, False),
20.         makeTestCase(1600, True),
21.         makeTestCase(2000, True),
22.         makeTestCase(2400, True),
23.     ];
24.
25. #In the Gregorian calendar three criteria must be taken into account to identify leap years:
26. #The year can be evenly divided by 4;
27. #If the year can be evenly divided by 100, it is NOT a leap year, unless;
28. #The year is also evenly divisible by 400. Then it is a leap year.
29. #Constraints: 1900<n<10**5
30. def isLeapYear(year):
31.     if(year < 1900 or year > 100000):
32.         raise ValueError("Bad argument: year must be 1900 < n < 10^5, was: {!s}".format(year))
33.     return (year % 400 == 0 or year % 100 != 0) and (year % 4 == 0);
34.
35. def main():
36.     samples = makeTestCases();
37.     print('Testing for Leap Year ({:d} tests)'.format(len(samples)));
38.     for (year, correctAnswer) in samples:
39.         try:
40.             result = isLeapYear(year);
41.         except ValueError as error:
42.             print(error);
43.             continue;
44.         passed = result ==  correctAnswer;
45.         print('{!s} {} = {:d} {!s}'.format(
46.                 "Passed:" if passed else "\tFailed:", str(year), result, '.')
47.         );
48.         if(not passed):