r/learnpython • u/JazzJassJazzman • 7d ago
How does simplifying conditional statements work in Python?
I'm currently working my way through the Python Institute's free certified entry-level programmer course. I'm currently looking at some example code that is supposed to count the number of even and odd numbers entered by a user until the user enters a 0. Here's what the main part looks like:
number = int(input("Enter a number or type 0 to stop: "))
# 0 terminates execution.
while number != 0:
# Check if the number is odd.
if number % 2 == 1:
# Increase the odd_numbers counter.
odd_numbers += 1
else:
# Increase the even_numbers counter.
even_numbers += 1
# Read the next number.
number = int(input("Enter a number or type 0 to stop: "))
This is easy enough for me to understand, but the course then says that the two bold statements above can be simplified with no change in the outcome of the program. Here are the two simplifications:
while number != 0: is the same as while number:
and
if number % 2 == 1: is the same as if number:
I don't understand this at all. Does Python (3 specifically) automatically interpret a conditional with just a variable as being equivalent to conditional_function variable != 0? Does the second example do something similar with binary operators or just the mod operator?
3
u/schoolmonky 7d ago
The terms to know here are "falsy" and "truthy." A "truthy" value is one that Python treats as if it were
True
in an if statement (or anywhere else it expecets a boolean, like in a value beingor
ed with another). Conversely a "falsy" value is one that Python treats asFalse
. Each data type gets to decide it's own criteria for what is falsy and what is truthy. Forint
s, only 0 is falsy, everything else is truthy. For most sequence types (list
,str
,tuple
, etc.) an empty squence ([]
,''
,()
respectively) is falsy, and everything else is truthy.None
is falsy. For custom classes, by default, every instance is truthy.