![]() |
| Mixing Boolean and comparison operators - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Mixing Boolean and comparison operators (/thread-37697.html) |
Mixing Boolean and comparison operators - Mark17 - Jul-10-2022 I'm reading an intro to Python book and it gives these examples: >>> (4 < 5) and (5 < 6) True >>> (4 < 5) and (9 < 6) False >>> (1 == 2) or (2 == 2) TrueThen it says: > The computer will evaluate the left expression first, and then it will evaluate the > right expression. When it knows the Boolean value for each, it will then evaluate > the whole expression down to one Boolean value. This feels intuitively right to me. However, I thought a while back I asked about some weird results I was getting with this sort of thing involving and/or and the reason it didn't turn out as I expected was because once one part was deemed to be False, it did not process the remainder of the expression. I can't remember if that was dealing with and or or. Does anyone know what I might be misremembering or confused about here? Thanks! RE: Mixing Boolean and comparison operators - ndc85430 - Jul-10-2022 Both and and or will short-circuit - that is, they may not evaluate their second expression.In the case of and if the first expression evaluates to False, there's no need to evaluate the second, because the whole expression will evaluate to False either way.In the case of or, if the first expression evaluates to True, there's no need to evaluate the second. RE: Mixing Boolean and comparison operators - deanhystad - Jul-10-2022 a or b evaluates to a if a is true-ey, else it evaluates to b. The true-y/false-ey ness of b is not considered, and b is only evaluated if b is returned. a and b evaluates to a if a is false-ey, else it evaluates to b. b is only evaluated if a is true-ey. I say true-ey and false-ey because a does not have to be True or False, and the result of "or" and "and" statements might not be True or False. For example, "5 or 3" evaluates to 5, because int 5 is considered true-ey. If you evaluate bool(5) it returns True. Most objects are true-ey. Python objects that are false-ey are; False, None, 0, blank strings and empty container objects (lists, dictionaries, sets). print("or\n--\n0 or None =", 0 or None) print("1 or None =", 1 or None) print("0 or 'Hi!' =", 0 or 'Hi') print("1 or 'Hi!' =", 1 or 'Hi') print("[] or [] =", [] or []) print("[1, 2] or [] =", [1, 2] or []) print("[] or [3, 4] =", [] or [3, 4]) print("[1, 2] or [3, 4] =", [1, 2] or [3, 4]) print("\nand\n---\n0 and None =", 0 and None) print("1 and None =", 1 and None) print("0 and 'Hi!' =", 0 and 'Hi') print("1 and 'Hi!' =", 1 and 'Hi') print("[] and [] =", [] and []) print("[1, 2] and [] =", [1, 2] and []) print("[] and [3, 4] =", [] and [3, 4]) print("[1, 2] and [3, 4] =", [1, 2] and [3, 4])"if" and "while" statements are fine with "or" and "and" not returning True or False, they understand true-ey and false-ey. RE: Mixing Boolean and comparison operators - perfringo - Jul-11-2022 (Jul-10-2022, 02:48 PM)Mark17 Wrote: However, I thought a while back I asked about some weird results I was getting with this sort of thing involving and/or and the reason it didn't turn out as I expected was because once one part was deemed to be False, it did not process the remainder of the expression. I can't remember if that was dealing with and or or. Your memory serves you well. The source of ultimate truth a.k.a. Python documentation: Truth Value Testing and Boolean Operations — and, or, not Quote:Operations and built-in functions that have a Boolean result always return 0 or False for false and 1 or True for true, unless otherwise stated. (Important exception: the Boolean operations or and and always return one of their operands.) Quote:[or] This is a short-circuit operator, so it only evaluates the second argument if the first one is false. I don’t know what book you are reading but maybe you should switch to some other book which is truthy about Python. |