if/elif/else#
The if/elif/else
statement allows make branches during program execution. The program goes into branch when a certain condition is met.
In this statement only if
is mandatory, elif
and else
are optional:
if
condition is always checked first.After
if
statement there must be some condition: if this condition is met (returns True), then actions in blockif
are executed.elif
can be used to make multiple branches, that is, to check incoming data for different conditions.elif
block is the same asif
but it checked next. Roughly speaking, it is “otherwise if …”There can be many
elif
blocks.else
block is executed if none of conditionsif
orelif
were true.
Example of if statement:
In [1]: a = 9
In [2]: if a == 10:
...: print('a equal to 10')
...: elif a < 10:
...: print('a less than 10')
...: else:
...: print('a greater than 10')
...:
a less than 10
Condition#
If
expression is based on conditions: conditions are always written after if
and elif
.
Blocks if/elif are executed only when condition returns True, so the first thing to deal with is what is true and what is false in Python.
True and False#
In Python, apart from obvious True and False values, all other objects also have false or true value:
True value:
any non-zero number
any non-empty string
any non-empty object
False value:
0
None
empty string
empty object
For example, since an empty list is a false value, it is possible to check whether list is empty:
In [12]: list_to_test = [1, 2, 3]
In [13]: if list_to_test:
....: print("The list has objects")
....:
List has objects
The same result could have been achieved somewhat differently:
In [14]: if len(list_to_test) != 0:
....: print("The list has objects")
....:
List has objects
Comparison operators#
Comparison operators can be used in conditions like:
In [3]: 5 > 6
Out[3]: False
In [4]: 5 > 2
Out[4]: True
In [5]: 5 < 2
Out[5]: False
In [6]: 5 == 2
Out[6]: False
In [7]: 5 == 5
Out[7]: True
In [8]: 5 >= 5
Out[8]: True
In [9]: 5 <= 10
Out[9]: True
In [10]: 8 != 10
Out[10]: True
Note
Note that equality is checked by double ==
.
Example of use of comparison operators:
In [1]: a = 9
In [2]: if a == 10:
...: print('a equal to 10')
...: elif a < 10:
...: print('a less than 10')
...: else:
...: print('a greater than 10')
...:
a less than 10
Operator in#
Operator in
allows checking for the presence of element in a sequence (for example, element in a list or substrings in a string):
In [8]: 'Fast' in 'FastEthernet'
Out[8]: True
In [9]: 'Gigabit' in 'FastEthernet'
Out[9]: False
In [10]: vlan = [10, 20, 30, 40]
In [11]: 10 in vlan
Out[11]: True
In [12]: 50 in vlan
Out[12]: False
When used with dictionaries, in
condition performs check by dictionary keys:
In [15]: r1 = {
....: 'IOS': '15.4',
....: 'IP': '10.255.0.1',
....: 'hostname': 'london_r1',
....: 'location': '21 New Globe Walk',
....: 'model': '4451',
....: 'vendor': 'Cisco'}
In [16]: 'IOS' in r1
Out[16]: True
In [17]: '4451' in r1
Out[17]: False
Operators and, or, not#
Conditions can also use logical operators
and
, or
, not
:
In [15]: r1 = {
....: 'IOS': '15.4',
....: 'IP': '10.255.0.1',
....: 'hostname': 'london_r1',
....: 'location': '21 New Globe Walk',
....: 'model': '4451',
....: 'vendor': 'Cisco'}
In [18]: vlan = [10, 20, 30, 40]
In [19]: 'IOS' in r1 and 10 in vlan
Out[19]: True
In [20]: '4451' in r1 and 10 in vlan
Out[20]: False
In [21]: '4451' in r1 or 10 in vlan
Out[21]: True
In [22]: not '4451' in r1
Out[22]: True
In [23]: '4451' not in r1
Out[23]: True
Operator and#
In Python and
operator returns not a boolean value but a value of one of operands.
If both operands are true, result is the last value:
In [24]: 'string1' and 'string2'
Out[24]: 'string2'
In [25]: 'string1' and 'string2' and 'string3'
Out[25]: 'string3'
If one of operators is a false, result of expression will be the first false value:
In [26]: '' and 'string1'
Out[26]: ''
In [27]: '' and [] and 'string1'
Out[27]: ''
Operator or#
Operator or
, like operator and
, returns one of operands value.
When checking operands, the first true operand is returned:
In [28]: '' or 'string1'
Out[28]: 'string1'
In [29]: '' or [] or 'string1'
Out[29]: 'string1'
In [30]: 'string1' or 'string2'
Out[30]: 'string1'
If all values are false, the last value is returned:
In [31]: '' or [] or {}
Out[31]: {}
An important feature of or
operator - operands, which are after the true operand, are not calculated:
In [33]: '' or sorted([44, 1, 67])
Out[33]: [1, 44, 67]
In [34]: '' or 'string1' or sorted([44, 1, 67])
Out[34]: 'string1'
Example of if/elif/else statement#
An example of a check_password.py script that checks length of password and whether password contains username:
# -*- coding: utf-8 -*-
username = input('Enter username: ')
password = input('Enter password: ')
if len(password) < 8:
print('Password is too short')
elif username in password:
print('Password contains username')
else:
print('Password for user {} is set'.format(username))
Script check:
$ python check_password.py
Enter username: nata
Enter password: nata1234
Password contains username
$ python check_password.py
Enter username: nata
Enter password: 123nata123
Password contains username
$ python check_password.py
Enter username: nata
Enter password: 1234
Password is too short
$ python check_password.py
Enter username: nata
Enter password: 123456789
Password for user nata is set
Ternary expression#
It is sometimes more convenient to use a ternary operator than an extended form:
s = [1, 2, 3, 4]
result = True if len(s) > 5 else False
It is best not to abuse it but in simple terms such a record can be useful.