09: Conditionals

Introduction

Loops, functions, and methods have allowed us to deal with a wide range of problems. Usually, these problems have a simple logic flow, which usually involves taking data, performing some action, then outputting the data in some manner (print, write, etc.). Although these skills are important, there are still many problems we are unable to solve.

Digital logic provides a way of thinking that allows us to break complex (often non-numerical) problems into smaller problems, all which evaluate to one of two possible values. The two values are True, and False. These are represented in Boolean data types.

Type: Boolean

A Boolean is a type in Python, just like a Float or a String is a type. “Bools” or Boolean data are named after George Boole, the logician who prototyped boolean logic.

A Boolean is a type that only has two possible states. The states are True and False. These can also be represented by the digits 1 (True) and 0 (False). For the purposes of this course, we will refer to them as True and False whenever possible.

Let’s define a boolean variable:

myBool = True yourBool = False

Remember that the True and False operators in Python must start with a capital letter!

Special Cases

- Any Number except zero evaluates to True

>>> bool(100) 
  True 
>>> bool(0) 
  False
>>>

- Any String except the empty string evaluates to True

>>> bool("Hello") 
  True 
>>> bool("") 
  False
>>>

- The NULL operator (in Python: None) evaluates to False

>>> bool(None) 
  False

Boolean Expressions

A boolean expression is a Python expression that evaluates to either True or False. Much like Python’s mathematical operations, which evaluate to mathematical data types such as Int or Float, the Python interpreter calculates them inline.

# This is a mathematical expression. x is type Float. 
x = 8*6**(9/12.0) 

# This is a string expression. y is a String. 
y = "This is" + " a string." 

#This is a boolean expression. z is a Bool. 
# Is "z" True or False?
z = 1 > 0 

Boolean statements use operators such as >, , <, and, or, and ==.

a = 0 == 1 
b = 1 == 1
w = 1 > 0 
x = 1 < 0 
y = (1 > 0) and (1 < 0) 
z = (1 > 0) or (1 < 0) 

Try these yourself in the Shell. Do you understand why the values of w, x, y, and z are True or False? When you’re done, take a look at the output:

>>> a 
  False 
>>> 
  b True
>>> w 
  True 
>>> x 
  False 
>>> y 
  False 
>>> z 
  True 

If it is unclear why these values are returned, let’s break the problem down.

Breaking it Down

We know it is fact that 1 > 0. Therefore, we expect this value to evaluate to True.
It is true that 1 is greater than 0.

We also know from the same logic that:
It is false that 1 is less than 0.

That explains the first two examples, w and x. Let’s look further into our values for y and z.

To understand all the operators, let’s use a a few examples.

!=, ==, >, <, <=, >=

These operators are used to evaluate the difference between two variables. They are used just like you would think. The only confusing operator is == which compares the equivalence of two values, and is often confused with the = operator, which sets a variable equal to some value. Another confusing operator is !=, which is True if both elements are not equal.

The and Operator
x and y     # True if both x and y are True

Let’s say your 1P03 group has three members. Member1, Member2, and Member3. You are being graded by a computer that checks if each member is in attendance by using the function memberAttended(member) where member is a group member. This function returns True if the member has attended, and False otherwise.

If all group members must attend a tutorial, you can check if you have succeeded the requirement by checking:

memberAttended(Member1) and memberAttended(Member2) and memberAttended(Member3)

If this evaluates to True (True and True and True), then you pass. Otherwise, it evaluates to False (ex. False and True and True) because Member1 did not attend, you will fail!

The or Operator
x or y      # True if either x or y are True

If only one of your group members must be present to hand in an assignment, you can check if you have succeeded the requirement by checking:

memberAttended(Member1) or memberAttended(Member2) or memberAttended(Member3)

The if statement

The if statement is the basic framework for computation based on boolean logic. It executes code based on a boolean expression.

The basic structure for an if statement is as follows:

if (expression): 
    # Do something

This runs the code in the “Do something” section IF AND ONLY IF the term expression returns True. Let’s look at a basic example:

x = 0 

if (x == 0): 
    print "zero" 

if (x == 1): 
   print "one"

What will print? Try running this in IDLE.

ANY Boolean statement can be used in the if statement. That means as long as (expression) evaluates to True, it will run. Otherwise, it will not. We can use the function bool() to check the Boolean value of something.

elif

The elif statement is a little different. It can be read as else, if. For example:

if (expression1): 
    # Do something 
elif (expression2): 
    # Do something else

This can be read as “If some statement is true, do something. Else, if some other statement is true, do something else.

ELSE

The else statement is just like elif, but accounts for ALL other cases (it takes no expression and assumes True). It can be read as “else” or “otherwise”. For example:

if (expression): 
    # Do something 
else: 
    # Do something else

This can be read as “If some statement is true, do something. Otherwise, in any other case, do something else.

This is a great way to “catch” certain interesting cases that variables may have. (Maybe catching a variable to check if it is set to zero before dividing)

if statements should be fairly easy, and your textbook has a great section on them. Attempt the practice problems below and let me know if I need to elaborate the if statement.