Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
355 views
in Technique[技术] by (71.8m points)

python - 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...