3.5. if/else StatementsΒΆ

Similar to other high-level languages, Python provides if/else statements to support conditional branching. If the condition within the if clause evaluates to True, the if block is executed, otherwise the else block is executed (if it exists). Python recognizes the keywords True and False to correspond to true and false boolean values. An else block is not mandatory, and similar to for loops, all statements within the if/else blocks should be indented. For example:

>>> a = [i for i in range(1,6)]
>>> for i in a:
...     if i==5:
...         print 'Key found: %d'%i
...     else:
...         print 'Key not found: %d'%i
...
Key not found: 1
Key not found: 2
Key not found: 3
Key not found: 4
Key found: 5

The if and else clauses were indented inside the for loop, but the statements inside these blocks were indented again. This is necessary to let Python know the intended code structure, as there is no explicit scoping available via the use of curly braces ({}) as supported in Java or C++. The == operator above denotes a conditional test, as opposed to the = operator, which denotes assignment. (Note that != denotes the “not equals” operator in Python.) The print statements above use the % operator to pass in an integer value, while the associated string had a generic argument %d inside it to specify that the value being passed in was an integer. Such a usage of print statements is quite common in Python and can also be used to pass in multiple values of different types. We will see many more examples of this usage in later sections. Python provides the in operator to test membership within a list. In fact, the in operator can be used above to remove the for loop altogether.

>>> a = [i for i in range(1,6)]
>>> i = 5
>>> if i in a:
...     print 'Key found: %d'%i
... else:
...     print 'Key not found: %d'%i
...
Key found: 5

Similar to the in operator, Python also provides a not in operator to test non-membership within a list. For example:

>>> a = [i for i in range(1,6)]
>>> a
[1, 2, 3, 4, 5]
>>> i = 10
>>> if i not in a:
...     print 'Key %d not found'%i
... else:
...     print 'Key %d found'%i
...
Key 10 not found

The not keyword is an example of a logical operator in Python. Other logical operators are specified by the and and or keywords which can be used to check multiple conditions at the same time. The and operator returns true if all the conditions being checked are simultaneously true. The or operator, on the other hand, returns true if any one of the conditions being checked is true.

>>> i = 10
>>> i>=1 and i<=10
True
>>> i>=1 or i<=5
True
>>> i>=1 and i<=5
False

Often times one needs to check more than two possible situations, i.e., one if-else branch is not sufficient and deeper nesting is required. Python makes this possible using the if-elif-else construct, where the last else block can be skipped if desired. As soon as Python finds one condition that is satisfied, it skips the rest.

>>> i = 4
>>> if i<=1:
...     print 'Value %d is less than or equal to 1'%i
... elif i>1 and i<=5:
...     print 'Value %d is greater than 1 and less than or equal to 5'%i
... elif i>5 and i<=10:
...     print 'Value %d is greater than 5 and less than or equal to 10'%i
... else:
...     print 'Value %d is greater than 10'%i
...
Value 4 is greater than 1 and less than or equal to 5

So far, we have only worked with non-empty lists, but a list can be empty as well. Python allows the name of a list to be used in place of a condition in an if statement. In this case, the result is True if the list is not empty, otherwise the result is False.

>>> a = []
>>> if a:
...     print 'The list is non-empty'
... else:
...     print 'The list is empty!'
...
The list is empty!