Lesson 3. Conditions: if, then, else
All the programs in the first lesson were executed sequentially, line after line. No line could be skipped.
Let's consider the following problem: for the given integer X determine its absolute value. If X>0 then the program should print the value X, otherwise it should print -X. This behavior can't be reached using the sequential program. The program should conditionally select the next step. That's where the conditions help:
x = int(input()) if x > 0: print(x) else: print(-x)
This program uses a conditional statement
if. After the
we put a condition
(x > 0) following by a colon.
After that we put a block of instructions which will be executed only if the condition
is true (i.e. evaluates to
True). This block may be followed by the word
else, colon and another block of instructions which will be executed only if the condition is false
(i.e. evaluates to
False). Is the case above, the condition is false, so the 'else' block
is executed. Each block should be indented using spaces.
To sum up, the conditional statement in Python has the following syntax:
if condition: true-block several instructions that are executed if the condition evaluates to True else: false-block several instructions that are executed if the condition evaluates to False
else keyword with the 'false' block may be omitted in case nothing should be
done if the condition is false. For example, we can replace the variable
with its absolute value like this:
x = int(input()) if x < 0: x = -x print(x)
In this example the variable
x is assigned to
-x only if
x < 0.
In contrast, the instruction
print(x) is executed every time, because it's not indented,
so it doesn't belong to the 'true' block.
Indentation is a general way in Python to separate blocks of code. All instructions within the same block should be indented in the same way, i.e. they should have the same number of spaces at the beginning of the line. It's recommended to use 4 spaces for indentation.
The indentation is what makes Python different from the most of other language, in which
the curly braces
} are used to form the blocks.
By the way, there's a builtin-function for absolute value in Python:
x = int(input()) print(abs(x))
Any Python instruction may be put into 'true' blocks and 'false' block, including another conditional statement. This way we get nested conditions. The blocks of inner conditions are indented using twice more spaces (eg. 8 spaces). Let's see an example. Given the coordinates of the point on the plane, print its quadrant.
x = int(input()) y = int(input()) if x > 0: if y > 0: # x is greater than 0, y is greater than 0 print("Quadrant I") else: # x is greater than 0, y is less or equal than 0 print("Quadrant IV") else: if y > 0: # x is less or equal than 0, y is greater than 0 print("Quadrant II") else: # x is less or equal than 0, y is less or equal than 0 print("Quadrant III")
In this example we use the comments: the explanatory text that has no effect on program execution.
This text starts with the hash
# and lasts till the end of the line.
Usually the condition after
if has one or more of the following operators:
- less — the condition is true if left side is less than right side.
- greater — the condition is true if left side is greater than right side.
- less or equal.
- greater or equal.
- not equal.
For example, the condition
x * x < 1000
means “the value of the expression
x * x is less than 1000”,
and the condition
2 * x != y means “the doubled value
of the variable
x is not equal to the value of the variable
The comparison operators in Python may be grouped together like this:
a == b == c
x <= y >= 10
When we sum two integer objects using the
+ operator, like
2 + 5, we get a new object:
7. In the same way, when we compare two integers using the
< operator, like
2 < 5, we get a new object:
print(2 < 5) print(2 > 5)
Falseobjects have a special type called
bool. As every type name can be used to cast objects into that type, let's see what this cast gives for numbers:
print(bool(-10)) # True print(bool(0)) # False - zero is the only false number print(bool(10)) # True print(bool('')) # False - empty string is the only false string print(bool('abc')) # True
Sometimes you need to check several conditions at once.
For example, you can check if a number
n is divisible by 2 using the condition
n % 2 == 0
n gives a remainder
0 when dividing by
If you need to check that two numbers
m are both divisble by 2,
you should check both
n % 2 == 0
m % 2 == 0.
To do that, you join them using an operator
n % 2 == 0 and m % 2 == 0.
Python has logical AND, logical OR and negation.
and is a binary operator which evaluates to
if and only if both its left-hand side and right-hand side are
or is a binary operator which evaluates to
if at least one of its sides is
not is a unary negation, it's followed by some value.
It's evaluated to
True if that value is
False and vice versa.
Let's check that at least one of the two numbers ends with 0:
a = int(input()) b = int(input()) if a % 10 == 0 or b % 10 == 0: print('YES') else: print('NO')
Let's check that the number
a is positive and
b is non-negative:
if a > 0 and not (b < 0):
not (b < 0) we can write
(b >= 0).
5. 'elif' word
If you have more than two options to tell apart using the conditional operator, you can use
if... elif... else statement.
Let's show how it works by rewriting the example with point (x,y) on the plane and quadrants from above:
x = int(input()) y = int(input()) if x > 0 and y > 0: print("Quadrant I") elif x > 0 and y < 0: print("Quadrant IV") elif y > 0: print("Quadrant II") else: print("Quadrant III")
In this case the conditions in
elif are checked one after another until
the first true condition is found. Then only the true-block for that condition is being executed. If all the
conditions are false, the 'else' block is being executed, if it's present.