Search code examples
pythonreturnbooleaninequality

Simple boolean inequality operators mistake


Using inequality operators, I have to define a procedure weekend which takes a string as its input and returns the boolean True if it's 'Saturday' or 'Sunday' and False otherwise.

Here is my code

def weekend(day):
    if day != 'Saturday' or day != 'Sunday':
        return False
    else:
        return True

This seemingly returns False to every day, I don't know why, logically it would work... Can anyone please explain?


Solution

  • Fixed version:

    if day != 'Saturday' and day != 'Sunday'
    

    Better version:

    return day in ['Saturday', 'Sunday']
    

    Why or doesn't work:

    When you use or, your condition would read something like "if today is not Saturday or today is not Sunday". Now replace "today" by "Saturday":

    If Saturday is not Saturday or Saturday is not Sunday

    The statement "Saturday is not Saturday" is obviously false and "Saturday is not Sunday" is obviously true, so the entire statement becomes "if false or true", which is always true.

    Replace "today" by any other day and you will find that the sentence always evaluates to one of these sentences, which are always true:

    if True or False  # day = Sunday
    if False or True  # day = Saturday
    if True or True   # any other day