Loops and Conditional Statements

Summary: IIterate and apply conditional criteria.

The html version of this notebook is hosted at https://hydro-informatics.github.io/hypy_pyloop.html.

Python provides two basic types of loops to iterate through objects or functions: the for and the while loop statements. Both loop types have additional options and can be combined with conditional statements. Conditional statements evaluate boolean arguments (True/False) using the keywords if: ... else: .... This section introduces the two loop types and conditional statements as integral parts of loops.

Conditional statements (if - else)

Conditional statements open with an if keyword, followed by a test condition (e.g., variable >= 2) and action to accomplish when the test condition is True (boolean test result). The conditional statement can be followed by the elif (else if) and/or else keywords, which represent alternative tests in the case that the if test-condition was False. However, when the if statement was True, none of the following statements will be evaluated.

variable_2_test = "ice cream"
if "cream" in variable_2_test:
    print("It's creamy, for sure.")
elif "ice" in variable_2_test:
    print("It's cold, ice-cold cream.")
else:
    print("Anything but ice cream.")
It's creamy, for sure.

Any operator can be used in the test condition (see operators) and conditions can be nested, too. > Note: The code blocks in the if - else statement is indented and Python uses the indentation to group statements. The same applies to loops, function and classes. An IDE automatically indents code, but basic text editors may not do the job. So be aware that wrong indentation can be an error source.

number_of_scoops = 3
if number_of_scoops <= 0:
    print("Why? How can you?")
elif number_of_scoops < 4:
    if number_of_scoops == 1: # this is a nested if-statement
        print("One is better than nothing.")
    else:
        print("That is reasonable.")
else:
    print("A lot. Still reasonable. Maybe.")
That is reasonable.

for loop

for loops serve for the sequential iteration through objects such as lists or arrays. for loops can also be complemented with else statements at the end (why ever you want to do this…).

for e in range(0,8,2):
    print("e is %d now." % e)

flavors = ["chocolate", "bread", "cherry"]
for index in range(len(flavors)):
    print(flavors[index])
else:
    print(" --- end of first loop.")

# produces the same
for e in flavors:
    print(e)
e is 0 now.
e is 2 now.
e is 4 now.
e is 6 now.
chocolate
bread
cherry
 --- end of first loop.
chocolate
bread
cherry

In many cases it is useful to use not only either the iteration step (e.g., as an incrementing integer value) or the elements of a list (e.g., a string value), but both simultaneously. Both iteration step and list elements can be accessed with the enumeration method:

for iteration_step, list_element in enumerate(flavors):
    print("The list element {0} is at position number {1}.".format(list_element, str(iteration_step)))
The list element chocolate is at position number 0.
The list element bread is at position number 1.
The list element cherry is at position number 2.

while loop

while loops run until a certain test condition (expression) is met. Similar to the if statement, the test condition can be composed by just one variable or an expression including operators (e.g., while a > b). In order to modify a variable within a while loop, use += (add ammount), -= (substract amount), *= (multiply with), or /= (divide by). Also whileloops can be complemented with else statements. > Warning: Make sure that every while loop has some break statement - otherwise, the script may be caught in an endless loop.

count = 10
while (count > 7):
    count -= 1
    print("Count down %d " % count)
else:
    print("Mission aborted.")

count = 0
while True:
    print("Count up: %d " % count)
    count += 1 # Replaces count = count + 1 - also works with -=, *= and /=
    if count > 3:
            break
Count down 9
Count down 8
Count down 7
Mission aborted.
Count up: 0
Count up: 1
Count up: 2
Count up: 3

Example

Use this code block to practice with data types, for loops and conditional if statements by modifying the variables scoops and favorite_flavor. Note the implementation of try and except key words, which ensure that whatever number of scoops or favorite_flavor you define will not crash the script.

scoops = 2 # re-define the number of sccops
favorite_flavor = "vanilla" # choose your favorite flavor

size_scoops = {1: "small", 2: "medium", 3: "this is too much ice cream"}
price_scoops = {1: "3 dollars", 2: "5 dollars", 3: "your health"}
print("Hi,\nI want %d scoop-s in a waffle, please." % scoops)

try:
    size = " " + str(size_scoops[scoops])
    price = str(price_scoops[scoops])
except ValueError:
    size = "n unavailable number of scoops"
    price = "not defined"


print("My pleasure to serve you. You have chosen a" + size + " ice cream. The price is " + price + ".")
print("Let me guess your favorite flavor. Say stop when I \'m correct.")
for f in flavors:
    print("I guess your favorite flavor is %s." % f)
    if f == favorite_flavor:
        print("Stop, that\'s it!")
        if f == "bread":
            print("Sorry, this is not a bakery.")
        break
 Hi,
 I want 2 scoop-s in a waffle, please.
 My pleasure to serve you. You have chosen a medium ice cream. The price is 5 dollars.
 Let me guess your favorite flavor. Say stop when I 'm correct.
 I guess your favorite flavor is chocolate.
 I guess your favorite flavor is bread.
 I guess your favorite flavor is cherry.


Exercise: Practice the application of loops with the Hydraulics
(1D) exercise.