Chapter 8: if-conditions

Generic badge Open this in Colab

Default and boolean operators in Python

In the introductory chapters, you have already learned some of Python’s default operators. Here is a list of useful mathematical operators:

Operator Description
+, -, *, / addition, subtraction, multiplication, division
// integer division
% modulo (“rest“ of a division)
-x, +x sign
** exponentiation

Another class of operators are boolean (logical) operators:

Operator Description
<, >, <=, >= comparison operators is smaller/equal? bigger/equal?
== comparison operator is equal?
!= comparison operator is not equal?
or, and, not boolean comparison operators
in is element of?

Examples:

print(f"2 < 5? {2 < 5}")
print(f"3 > 7? {3 > 7}")

x = 11
print(f"x > 10? {x > 10}")
print(f"2 * x < x? {2 * x < x}")

print(f"type of 'True': {type(True)}")

2 < 5? True
3 > 7? False
x > 10? True
2 * x < x? False
type of 'True': <class 'bool'>

The boolean expressions True and False can be used as any other common value in Python:

my_variable = True
print(f"type of my_variable: {type(my_variable)}")

type of my_variable: <class 'bool'>

if-conditions

We can further extend the usage of boolean comparison operators when it comes to decision making in your code, e.g., when you want to execute a certain code line (or lines) only if a certain condition is satisfied. For such decision making, the concept of if-statements is provided:

if condition1:
    action 1
elif condition2:
    action 2
else:
    action 3

We can use the previously introduced logical comparison operators to test a condition:

Equals:                     a == b, a in b
Not Equals:                 a != b, a not b
Less than:                  a < b
Less than or equal to:      a <= b
Greater than:               a > b
Greater than or equal to:   a >= b

For example:

""" Change the value of a and b randomly and run this and the
    subsequent cell:
"""
a=7
b=3
if a==b:
    print('check: a and b are equal')
else:
    print('failed: a and b are not equal')

failed: a and b are not equal

if a>b:
    print('check: a is greater than b')
else:
    print('failed: a is not greater than b')

check: a is greater than b

You can also combine several conditions:

if a>b:
    print('a is greater than b')
elif a<b:
    print('a is lower than b')
elif a==b:
    print('a and b are equal')

a is greater than b

Also, you can concatenate several conditions by combining two conditions with the comparison operators and or or:

if (condition1) and/or (condition 2):
    action 1
elif (condition3) and/or (condition 4):
    action 2

For example:

# Change the value of c randomly and run this cell:
c=11
if (a>b) and (a<c):
    print('a is in the interval between b and c')
else:
    if a>b:
        print('a is in not between b and c, ')
        print('  but greater than b')
    elif a<c:
        print('a is in not between b and c, ')
        print('  but lower than c')
    else:
        print('a is in not between b and c, ')

a is in the interval between b and c

Note: As for for-loops, Python relies on indentation (whitespace at the beginning of a line) to define the scope of a code block in your code

Exercise 1

Write a script, that uses the following code line in order to set the value number_of_moves:

number_of_moves = int(input("How many times have you moved in your life?? "))

Write an if-statement, that checks the input number_of_moves and gives out the following responses:

  • You’re quite a globetrotter.”, if number_of_moves is greater than 9.
  • You have come around a lot.”, if number_of_moves is greater than 7 and less than or equal 9.
  • Your moving rate corresponds to the national average.”, if number_of_moves is greater than 3 and less than or equal 7.
  • You are a settled person.”, if the number_of_moves is less than or equal 3.

Execute your code several time and change your input number.

# Your solution here:

How many times have you moved in your life?? 5
Your moving rate corresponds to the national average!

Toggle solution
# Solution:
number_of_moves = int(input("How many times have you moved in your life?? "))
if number_of_moves>9:
    print("You're quite a globetrotter!")
elif (number_of_moves>7) and (number_of_moves<=9):
    print("You have come around a lot!")
elif (number_of_moves>3) and (number_of_moves<=7):
    print("Your moving rate corresponds to the national average!")
elif (number_of_moves<=3):
    print("You are a settled person!")

The boolean operator in

There are also boolean operators that are applied to types others than numbers. A useful Boolean operator is in, checking membership in a sequence:

# with a number list:
number_list = [3, 4, 0, 5, 2, 99, 4]
check_number=1
if check_number in number_list:
    print(f"{check_number} is in number_list")
else:
    print(f"{check_number} is not in number_list")

1 is not in number_list

# with a word list:
word_list = ['Toto', 'Harry', 'Mickey']
check_word= "Harry"
if check_word in word_list:
    print(f"{check_word} is member of word_list")
else:
    print(f"{check_word} is not member of word_list")

Harry is member of word_list

I.e., with the in-operator you can easily check, e.g., whether a certain string is part another string-sequence.

Combine if-statement with a for-loop

Of course we can combine if-statements with a for-loop (and vice versa):

Exercise 2

Given the list agents=["James Bond (007)", "Austin Powers (007)", "Hubert Bonisseur, (117)"], write a for-loop, that iterates over each of its elements and checks, if the current agent has a 007-license.

# Your solution here:

match! James Bond (007) has a 007 license.
match! Austin Powers (007) has a 007 license.
warning! Hubert Bonisseur, (117) has no 007 license!

Toggle solution
# Solution:
agents=["James Bond (007)", "Austin Powers (007)", "Hubert Bonisseur, (117)"]
string_to_check = "007"
for agent in agents:
    if string_to_check in agent:
        print(f"match! {agent} has a {string_to_check} license.")
    else:
        print(f"warning! {agent} has no {string_to_check} license!")

Exercise 3

  1. Create a new_number_list ranging from 0 to 22 (use the list() and range() commands).
  2. Write a for-loop, that iterates over each element of new_number_list.
  3. Within the for-loop, set up an if-condition, that prints out the current new_umber_list-element, if its value is higher than 10, otherwise print out “value below threshold”.
  4. Change the threshold to any other number between 0 and 22 and re-run your script.
# Your solution here:

0 is below the threshold 10!
1 is below the threshold 10!
2 is below the threshold 10!
3 is below the threshold 10!
4 is below the threshold 10!
5 is below the threshold 10!
6 is below the threshold 10!
7 is below the threshold 10!
8 is below the threshold 10!
9 is below the threshold 10!
10 is below the threshold 10!
match! 11 is greater than 10.
match! 12 is greater than 10.
match! 13 is greater than 10.
match! 14 is greater than 10.
match! 15 is greater than 10.
match! 16 is greater than 10.
match! 17 is greater than 10.
match! 18 is greater than 10.
match! 19 is greater than 10.
match! 20 is greater than 10.
match! 21 is greater than 10.

Toggle solution
# Solution:
new_number_list = list(range(0,22,1))
threshold = 10
for number in new_number_list:
    if number>threshold:
        print(f"match! {number} is greater than {threshold}.")
    else:
        print(f"{number} is below the threshold {threshold}!")

Combine if-statement with a list comprehension

Please read in the for-loop chapter about list comprehension.

Before we combine an if-statement with a for-loop within a list comprehension, let’s approach this goal stepwise:

my_list=[4, 8, 12, 16, 20, 32, 28, 24, -1, 32, 32]
number_to_check = 12

# list comprehension with for-loop (pre-step, just to understand,
#   what's going on):
#print([i for i, val in enumerate(my_list)] )
#print([val for i, val in enumerate(my_list)] )
print([(i, val) for i, val in enumerate(my_list)] )

[(0, 4), (1, 8), (2, 12), (3, 16), (4, 20), (5, 32), (6, 28), (7, 24), (8, -1), (9, 32), (10, 32)]

# list comprehension with for-loop and if-statement:
print([(i, val) for i, val in enumerate(my_list) #artificial line break
       if val==number_to_check])

[(2, 12)]

# vs. conventional for-loop and if-statements:
for i, val in enumerate(my_list):
    if val == number_to_check:
        print(i, val)

2 12

Note: We have introduced the linebreak within a command definition via “" + enter into the new line. Most Python IDE will then auto-indent the new line to some extend. For the code itself, it is not necessary to add a linebreak - it just makes the code userfriendly readable (if necessary).

updated: