A Boolean (named after the English mathematician George Boole) is something that is either “true” or “false”. In Python, variables can be Booleans:
y = True
n = False
These words “True” and “False” are not interpreted by Python as strings, they are a different data type completely.
Note that the values “True” and “False” must be typed with capital letters at the start and the rest in lowercase
Another way to create a Boolean object is by testing equality via a
conditional statement. To do this, use two equal signs:
==
# Is 1 equal to 1?
print(1 == 1)
## True
Remember that a SINGLE equals sign is used to assign a value to a variable while a DOUBLE equals sign is used to test for equality:
# Assign a value of 1 to a
a = 1
# Assign a value of 1 to b
b = 1
# Does a equal b?
print(a == b)
## True
This means that you can test equality using ==
, generate
a Boolean, then assign this Boolean to a variable using
=
:
# The statement "1 == 1" evaluates to "True" and then we assign that result
# to the variable "bl"
bl = 1 == 1
# Is 1 equal to 1?
print(bl)
## True
In addition to equality (==
) you can test if two things
are NOT equal using !=
. In Python, the exclamation mark
means ‘not’:
# Is 1 not equal to 1?
bl = 1 != 1
print(bl)
## False
# Is 1 not equal to 2?
bl = 1 != 2
print(bl)
## True
You can use >
and <
to test if
something is greater than or less than
something else. Use >=
to test if something is
greater than or equal to something else and
<=
to test less than or equal to:
# Is 1 less than 2?
print(1 < 2)
## True
# Is attendance below or at capacity?
attendance = 95
capacity = 100
print(attendance <= capacity)
## True
You can combine conditionals using ‘and’ and ‘or’ statements.
An ‘and’ statement is created by using an ampersand
(&
) between two conditional statements. In order for an
‘and’ statement to evaluate to True
both conditionals must
be true:
# Is attendance below or at capacity AND
# has everyone bought a ticket?
attendance = 95
capacity = 100
tickets_sold = 93
print((attendance <= capacity) & (tickets_sold == attendance))
## False
Notice the use of brackets in the last line. Each conditional statement is enclosed in round brackets or otherwise Python (and possibly the person reading your code too) will get confused.
An ‘or’ statement is created by using a pipe (|
) between
two conditionals. In order for an ‘or’ statement to evaluate to
True
either conditional statement can be true:
# Is attendance over capacity OR
# has someone not bought a ticket?
attendance = 105
capacity = 100
tickets_sold = 105
print((attendance > capacity) | (tickets_sold != attendance))
## True
Notice that the same question is being asked as in the ‘and’ statement example, but this time in a different way.
Strings are handled similarly to numbers:
# Do these two people have the same name?
person1 = 'WINSTON CHURCHILL'
person2 = 'Winston Churchill'
print(person1.lower() == person2.lower())
## True
Notice the method .lower()
that was used above to
convert both strings to lowercase before making the comparison. Strings
are case sensitive, so if we hadn’t used that method the result would
have been False
.
You can also test if a string contains a certain sub-string or character using an ‘in’ statement:
st = 'Hello World'
# Is "Hello" in "Hello World"?
print('Hello' in st)
## True
An ‘if’ statement is a chunk of code that will execute if a condition is true (and which will not execute if the condition is false). In order to write an if statement you need to:
:
if 1 == 1:
print('This text will print to console because 1 is equal to 1')
## This text will print to console because 1 is equal to 1
Note that, while there is no difference between using a Boolean
variable (a variable with a value of either True
or
False
) and using a Boolean statement (a conditional
statement that will evaluate to either True
or
False
), one option might make your code more
readable. Here’s an example that tests whether a
patient is sick or not:
patient_is_sick = 'Yes'
# An if statement using a Boolean statement
if patient_is_sick == 'Yes':
print('The patient is sick')
## The patient is sick
patient_is_sick = True
# An if statement using a Boolean variable
if patient_is_sick:
print('The patient is sick')
## The patient is sick
As promised, both examples have the same output, but the second reads
in a way that makes more sense: the line
if patient_is_sick:
is slightly clearer for the reader than
if patient_is_sick == 'Yes':
.
An ‘else’ statement is a chunk of code that will execute if the ‘if’ statement does not execute:
height = 170
if height >= 180:
print('This person is tall')
else:
print('This person is not tall')
## This person is not tall
Note that you again need a colon (after the else
) and,
again, must use whitespace correctly.
An ‘else-if’ statement is like a second ‘if’ statement. It is a chunk
of code that will execute if the first ‘if’ statement does not evaluate
to true but the second one does. ‘Else-if’ is shortened to
elif
in Python:
height = 170
if height >= 180:
print('This person is tall')
elif (height < 180) & (height >= 160):
print('This person is medium height')
else:
print('This person is short')
## This person is medium height
The brackets around each conditional in the elif
statement are necessary! Any time you have multiple
conditional statements you should enclose them with brackets, otherwise
Python gets confused. For the sake of demonstration, here’s the same
example again but without the brackets:
height = 170
if height >= 180:
print('This person is tall')
elif height < 180 & height >= 160:
print('This person is medium height')
else:
print('This person is short')
## This person is short
We got the wrong output because we didn’t separate out the conditional statements!
Imagine you are running some code using a dataset that someone else
has given you and which contains some errors. For example, maybe they
entered someone’s birth year as 1890 instead of 1980 and so you
calculate their age as being 131 instead of 41. You can use if
statements together with the raise
statement to sanitise
your data and check that these types of errors don’t occur:
# Imaginary data that is given to you
current_year = 2021
birth_year = 1890
# Perform a calculation with the data
age = current_year - birth_year
# Sanity check your calculation
if age <= 110:
print('This person is not older than 110 years')
else:
raise ValueError('This person is older than 110 years. Are you sure this is correct?')
The above code will cause the script to stop and produce the
message:
ValueError: This person is older than 110 years. Are you sure this is correct?
…in other words, it will raise an error, specifically a
ValueError, and stop immediately. This is a lot better than
having it run to completion generating incorrect results in the
process.