There are scenarios is programming, where we need to make a decision and based on that decision we want the flow of execution to move to one block of code or the other. In Python this decision making is done using if...else
statements.
if
, else
, and elif
if
statementif...else
statementif...else
statementif...elif...else
pass
statementExpressions and Statements: An expression is some code that evaluates to a value. As a rule of thumb, an expression is anything that can appear on the right side of the assignment operator
=
. On the contrary a statement is an instruction that can be executed.
Python Indentation:
- Most programming languages like C, C++, Java use braces { } to define a block of code.
- Python use indentation to tell the interpreter that the group of statements belongs to a particular block of code.
- Whitespace is used for indentation in Python. All statements with the same distance to the right belong to the same block of code. If a block has to be more deeply nested, it is simply indented further to the right.
- Python uses 4 spaces as indentation by default. However, the number of spaces is up to you, but a minimum of 1 space has to be used.
- Pressing
Tab
in a Jupyter notebook cell, will indent the code by 4 spaces, and pressingShift+Tab
will reduce the indentation by 4 spaces.
a = 5
b = 6 # Giving an extra extra space without the need of a block will flag an error
File "/var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_28197/3710409203.py", line 2 b = 6 # Giving an extra extra space without the need of a block will flag an error ^ IndentationError: unexpected indent
if (2 == 2)
print('True Statement') # Not doing an indentation also flags an error
File "/var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_29767/1217326361.py", line 1 if (2 == 2) ^ SyntaxError: invalid syntax
Arif_butt1 = 45
if
, else
and elif
¶One of the most powerful features of programming languages is branching: the ability to make decisions and execute a different set of statements based on whether one or more conditions are true.
if
Statement¶In Python, branching is implemented using the if
statement, which is written as follows:
if condition:
statement1
statement2
statement(s)
condition
can be a value, variable or expression.True
, then the statements within the if
block are executed.statement1
, and statement2
, which inform Python interpreter that these statements are associated with the if
statement above.help('if')
The "if" statement ****************** The "if" statement is used for conditional execution: if_stmt ::= "if" assignment_expression ":" suite ("elif" assignment_expression ":" suite)* ["else" ":" suite] It selects exactly one of the suites by evaluating the expressions one by one until one is found to be true (see section Boolean operations for the definition of true and false); then that suite is executed (and no other part of the "if" statement is executed or evaluated). If all expressions are false, the suite of the "else" clause, if present, is executed. Related help topics: TRUTHVALUE
help('TRUTHVALUE')
Truth Value Testing ******************* Any object can be tested for truth value, for use in an "if" or "while" condition or as operand of the Boolean operations below. By default, an object is considered true unless its class defines either a "__bool__()" method that returns "False" or a "__len__()" method that returns zero, when called with the object. [1] Here are most of the built-in objects considered false: * constants defined to be false: "None" and "False". * zero of any numeric type: "0", "0.0", "0j", "Decimal(0)", "Fraction(0, 1)" * empty sequences and collections: "''", "()", "[]", "{}", "set()", "range(0)" Operations and built-in functions that have a Boolean result always return "0" or "False" for false and "1" or "True" for true, unless otherwise stated. (Important exception: the Boolean operations "or" and "and" always return one of their operands.) Related help topics: if, while, and, or, not, BASICMETHODS
In Python the following values evaluate to False
(they are often called falsy values):
False
itself0
0.0
None
""
[]
()
{}
set()
range(0)
Everything else evaluates to True
(a value that evaluates to True
is often called a truthy value).
The None type includes a single value None
, used to indicate the absence of a value. None
has the type NoneType
. It is often used to declare a variable whose value may be assigned later or as a return value of functions that do not return a value
# Example:
x = 2
if (x == 1): # you can put parenthesis around condition, but it is OK if you dont
print('This will execute, only if the condition is true')
print('This will always execute')
This will always execute
if...else
statement¶if
statement shown above tells us that if a condition is True it will execute a block of statements and if the condition is False it won’t.else
statement. We can use the else
statement with if
statement to execute a block of code when the condition is False. It is written as follows:if condition:
statement1
statement2
else:
statement3
statement4
remaining statement(s)
If condition
evaluates to True
, the statements in the if
block are executed. If it evaluates to False
, the statements in the else
block are executed.
# Example 1: Take input from user by using the input function and decide if the number is even or odd
x = input("enter a number: ")
# by default the type returned by input() is string, so don't forget to type cast it
x = int(x)
if(x%2 == 0):
print("Even")
else:
print("Odd")
print("Bye")
enter a number: 5 Odd Bye
The
input()
function allows a user to insert a value into a program. It returns a string value, which can be casted to any data type as per the requirement.
#Example 2:
a = 5
b = 10
if (a > b):
print('a is greater than b.')
print ("i'm in if Block")
else:
print('a is smaller than b.')
print ("i'm in else Block")
print ("i'm neither in the if-block, nor in the else-block")
a is smaller than b. i'm in else Block i'm neither in the if-block, nor in the else-block
if..else
structure mentioned above, because it is not a control structure that directs the flow of program execution. It rather acts more like an operator that defines an expression.rv = <expr1> if <condition> else <expr2>
# Example 1: Let us assign a specific value to variable rv (adult or child), depending on a condition
age = 19
rv = 'adult' if age>= 18 else 'child'
rv
'adult'
# Example 2: Let us assign a specific value to variable parity (even or odd), depending on a condition
a_number = 3
parity = 'even' if a_number % 2 == 0 else 'odd'
print('The number {} is {}.'.format(a_number, parity))
The number 3 is odd.
if...else
Statement¶Python allows us to nest if
statements within if
statements. i.e, we can place an if statement inside another if statement.
The
input()
function allows a user to insert a value into a program. It returns a string value, which can be casted to any data type as per the requirement.
# Example:
age = float(input("Please enter your age: "))
if (age >= 18):
rv = input("Do you have National ID card? Y/N: ")
if ((rv == 'Y') or (rv == 'y')):
print("Welcome, you can vote")
else:
print("Since you donot have CNIC, so you cannot vote.")
else:
print("You are too young to vote")
Please enter your age: 21 Do you have National ID card? Y/N: y Welcome, you can vote
Nested
if
,else
statements are often confusing to read and prone to human error. It's good to avoid nesting whenever possible, or limit the nesting to 1 or 2 levels.
if
...elif
...else
Statements¶elif
statement (short for "else if") to chain a series of conditional blocks.True
, its associated block of statements is executed.if
, elif
, elif
... chain, at most one block of statements is executed, the one corresponding to the first condition that evaluates to True
.# Example 1:
y = input("Enter your subject marks: ")
# by default the type is string, so we need to convert the type first
y = int(y)
if (y >= 85):
print("Letter Grade A")
elif((y >= 80) and (y<85)):
print("Letter Grade A-")
elif((y >= 77) and (y<80)):
print("Letter Grade B+")
elif((y >= 73) and (y<77)):
print("Letter Grade B")
else:
print("Bad Grade")
Enter your subject marks: 87 Letter Grade A
# Example 2: Remember in an if-elif ladder at most one block of statements is executed
a_number = 15
if (a_number % 2 == 0):
print('{} is divisible by 2'.format(a_number))
elif a_number % 3 == 0:
print('{} is divisible by 3'.format(a_number))
elif a_number % 5 == 0:
print('{} is divisible by 5'.format(a_number))
elif a_number % 7 == 0:
print('{} is divisible by 7'.format(a_number))
15 is divisible by 3
- Note that the message
15 is divisible by 5
is not printed because the conditiona_number % 5 == 0
isn't evaluated, since the previous conditiona_number % 3 == 0
evaluates toTrue
.- This is the key difference between using a chain of
if
,elif
,elif
... statements vs. a chain ofif
statements, where each condition is evaluated independently.- This is shown below
# Example 3:
a_number = 15
if a_number % 2 == 0:
print('{} is divisible by 2'.format(a_number))
if a_number % 3 == 0:
print('{} is divisible by 3'.format(a_number))
if a_number % 5 == 0:
print('{} is divisible by 5'.format(a_number))
if a_number % 7 == 0:
print('{} is divisible by 7'.format(a_number))
15 is divisible by 3 15 is divisible by 5
# Example 4: You can also include an `else` statement at the end of a chain of `if`, `elif`... statements.
# This code within the `else` block is evaluated, when none of the conditions hold true.
a_number = 73
if a_number % 2 == 0:
print('{} is divisible by 2'.format(a_number))
elif a_number % 3 == 0:
print('{} is divisible by 3'.format(a_number))
elif a_number % 5 == 0:
print('{} is divisible by 5'.format(a_number))
else:
print('All checks failed!')
print('{} is not divisible by 2, 3 or 5'.format(a_number))
All checks failed! 73 is not divisible by 2, 3 or 5
# Example 5: Conditions can also be combined using the logical operators `and`, `or` and `not`.
a_number = 12
if a_number % 3 == 0 and a_number % 5 == 0:
print("The number {} is divisible by 3 and 5".format(a_number))
elif not a_number % 5 == 0:
print("The number {} is not divisible by 5".format(a_number))
The number 12 is not divisible by 5
pass
statement (Do nothing)¶The pass
statement is generally used as a placeholder i.e. when the user does not know what code to write. So user simply places pass at that line. So user can simply place pass where empty code is not allowed, like in loops, function definitions, class definitions, or in if statements.
help('pass')
The "pass" statement ******************** pass_stmt ::= "pass" "pass" is a null operation — when it is executed, nothing happens. It is useful as a placeholder when a statement is required syntactically, but no code needs to be executed, for example: def f(arg): pass # a function that does nothing (yet) class C: pass # a class with no methods (yet)
# A simple example of pass:
x = 6
if x < 0:
pass
print("I will place code when the condition is true, later :)")
I will place code when the condition is true, later :)
Try answering the following questions to test your understanding of the topics covered in this notebook:
if
statement in Python?if
statement? Give an example.if
statement evaluates to True
? What happens if the condition evaluates for false
?else
statement in Python?else
statement? Give an example.else
statement be used without an if
statement?elif
statement in Python?elif
statement? Give an example.if
, elif
, and else
statements together.elif
statement be used without an if
statement?elif
statement be used without an else
statement?if
, elif
, elif
… statements and a chain of if
, if
, if
… statements? Give an example.if
statements? Give some examples.if
conditional expression?if
conditional expression? Give an example.if
expression and the regular if
statement?if
blocks?