0

I am trying to get a code to return true if the start date is before or the same as the end date. However, I am unable to get the correct output for some testing cases.

def difference(start_day, start_mon, start_year, end_day, end_mon, end_year):    
    start_date = (start_day, start_mon, start_year)
    end_date = (end_day, end_mon, end_year)
    if start_date <= end_date:
        return True
    else:
        return False

***My output:***
difference(19, 3, 2014, 19, 3, 2014)    #True       
difference(18, 3, 2014, 19, 3, 2014)    #True   
difference(20, 3, 2014, 19, 3, 2014)    #False      
difference(19, 3, 2015, 19, 3, 2014)    #False      
difference(19, 6, 2014, 19, 3, 2014)    #False      
difference(18, 12, 2014, 19, 11, 2014)  #True   <- This is the wrong output
difference(18, 12, 2014, 19, 11, 2015)  #True

***Expected output:***
difference(19, 3, 2014, 19, 3, 2014)    #True       
difference(18, 3, 2014, 19, 3, 2014)    #True   
difference(20, 3, 2014, 19, 3, 2014)    #False      
difference(19, 3, 2015, 19, 3, 2014)    #False      
difference(19, 6, 2014, 19, 3, 2014)    #False      
difference(18, 12, 2014, 19, 11, 2014)  #False      
difference(18, 12, 2014, 19, 11, 2015)  #True

I tried different ways of writing the code but I am still unable to obtain the expected output for all the test cases.

  • refer [here](https://docs.python.org/3/library/datetime.html#date-objects) to find more about python date objects , you can also refer [here](https://stackoverflow.com/questions/28154066/how-to-convert-datetime-to-integer-in-python) if you dont want to use any library – Shijith Oct 28 '20 at 09:52

2 Answers2

1

As answered here

Tuples are compared position by position: the first item of the first tuple is compared to the first item of the second tuple; if they are not equal (i.e. the first is greater or smaller than the second) then that's the result of the comparison, else the second item is considered, then the third and so on.

That's how all sequences are compared. Python Docs

Sequence objects typically may be compared to other objects with the same sequence type. The comparison uses lexicographical ordering: first the first two items are compared, and if they differ this determines the outcome of the comparison; if they are equal, the next two items are compared, and so on, until either sequence is exhausted.

What you want to do instead is compare date objects.

from datetime import date


def difference(start_day, start_mon, start_year, end_day, end_mon, end_year):
    start_date = date(day=start_day, month=start_mon, year=start_year)
    end_date = date(day=end_day, month=end_mon, year=end_year)
    return start_date <= end_date

Tom Wojcik
  • 5,471
  • 4
  • 32
  • 44
0

If you definitely want to use tuples you could change the position of year and day in the tuples:

def difference(start_day, start_mon, start_year, end_day, end_mon, end_year):    
    start_date = (start_year, start_mon, start_day)
    end_date = (end_year, end_mon, end_day)
    return start_date <= end_date
rftr
  • 1,185
  • 2
  • 10
  • 19