When I try to pass " but not "if largest < num:" I get "TypeError: ‘<‘ not supported between instances of ‘NoneType’ and ‘int’". Which means I can’t compare NoneType and integers. But wouldn’t that still be the case for "if largest is None or largest < num:"?
largest = None
smallest = None
while True:
num = input("Enter a number: ")
if num == "done":
break
try:
num = int(num)
if largest is None or largest < num:
largest = num
if smallest is None or smallest > num:
smallest = num
except:
print("Invalid input")
continue
print("Maximum is", largest)
print("Minimum is", smallest)
>Solution :
To explain, here’s an example:
if True or (1 < None):
print('yep')
if 1 < None:
print('this does not print, because the above throws an exception')
Prints yep but then TypeError: '<' not supported between instances of 'int' and 'NoneType'.
The reason this happens is, as @shadowranger indicated in comments, that logical operators like or and and short-circuit.
For or, that means that when evaluating P or Q, if P evaluates to True, there’s no need to evaluate Q, since the expression will be True regardless – so Python doesn’t.
Similarly, for and, it means than when evaluating P and Q, if P evaluates to False, there’s no need to evaluate Q, since the expression will be False regardless – so Python doesn’t.
So, you can see why this won’t throw an exception, since the offending code never gets executed:
if True or (1 < None):
print('yep')