Arithmetic operations
In the previous sections you've seen examples with basic arithmetics. In the following table you can see the most common arithmetic operators in Python, with examples:
Operator | Purpose | Example | Result |
---|---|---|---|
+ | Addition | 2 + 4 | 6 |
- | Subtraction | 10 - 2.5 | 7.5 |
* | Multiplication | -2 * 123 | -246 |
/ | Division (floating point result) | 9 / 2 | 4.5 |
// | Division (integer result) | 9 // 2 | 4 |
% | Modulo | 9 % 2 | 1 |
** | Exponentiation | 2 ** 3 | 8 |
The order of operations is familiar from mathematics: first calculate the exponents, then multiplication and division, and finally addition and subtraction. The order can be changed with parentheses.
For example this bit of code
print(2 + 3 * 3)
print((2 + 3) * 3)
prints out
11 15
Operands, operators and data types
A calculation usually consists of operands and operators:
The data type of an operand usually determines the data type of the result: if two integers are added together, the result will also be an integer. If a floating point number is subtracted from another floating point number, the result is a floating point number. In fact, if a single one of the operands in an expression is a floating point number, the result will also be a floating point number, regardless of the other operands.
Division /
is an exception to this rule. Its result is a floating point number, even if the operands are integers. For example 1 / 5
will result in the floating point number 0.2
.
Example:
height = 172.5
weight = 68.55
# the Body Mass Index, or BMI, is calculated by dividing body mass with the square of height
# height is converted into metres in the formula
bmi = weight / (height / 100) ** 2
print(f"The BMI is {bmi}")
This program prints out the following:
The BMI is 23.037177063642087
Notice Python also has an integer division operator //
. If the operands are integers, it will produce an integer. The result is rounded down to the nearest integer. For example this program
x = 3
y = 2
print(f"/ operator {x/y}")
print(f"// operator {x//y}")
prints out
/ operator 1.5 // operator 1
Numbers as input
We have already used the input
command to read in strings from the user. The same function can be used to read in numbers, but the string produced by the function must then be converted to a numeric data type in the program code. In the previous section we cast integers as strings with the str
function. The same basic principle applies here, but the name of the casting function will be different.
A string can be converted into an integer with the function int
. The following program asks the user for their year of birth and stores it in the variable input_str
. The program then creates another variable year
, which contains the year converted into an integer. After this the calculation 2021-year
is possible, using the user-supplied value.
input_str = input("Which year were you born? ")
year = int(input_str)
print(f"Your age at the end of the year 2021: {2021 - year}" )
Which year were you born? 1995 Your age at the end of the year 2021: 26
Usually you do not need to create two separate variables (like input_str
and year
above) to read a number value from the user. Instead, reading the input with the input
function and converting it with the int
function can be achieved in one go:
year = int(input("Which year were you born? "))
print(f"Your age at the end of the year 2021: {2021 - year}" )
Similarly, a string can be converted into a floating point number with the function float
. This programs asks the user for their height and weight, and uses these to calculate their BMI:
height = float(input("What is your height? "))
weight = float(input("What is your weight? "))
height = height / 100
bmi = weight / height ** 2
print(f"The BMI is {bmi}")
An example printout from the program:
What is your height? 163 What is your weight? 74.45 The BMI is 28.02137829801649
Using variables
Let's have a look at a program which calculates the sum of three numbers given by the user:
number1 = int(input("First number: "))
number2 = int(input("Second number: "))
number3 = int(input("Third number: "))
sum = number1 + number2 + number3
print(f"The sum of the numbers: {sum}")
An example execution of the program:
First number: 5 Second number: 21 Third number: 7 The sum of the numbers: 33
The program uses four different variables, but two would easily suffice in this case:
sum = 0
number = int(input("First number: "))
sum = sum + number
number = int(input("Second number: "))
sum = sum + number
number = int(input("Third number: "))
sum = sum + number
print(f"The sum of the numbers: {sum}")
Now all inputs from the user are read into the one and the same variable number
. The value of the variable sum
is increased by the value of the variable number
each time the user inputs a new number.
Let's take a closer look at this command:
sum = sum + number
Here, the value of the variable sum
and the value of the variable number
are added together, and the result is stored back in the variable sum
. For example, if before the command the value of sum
is 3 and the value of number
is 2, after the command is executed, the value of sum
is 5.
Increasing the value of a variable is a very common operation. As such, there is a commonly used shorthand notation which achieves the same result as the explicit summing up above:
sum += number
This allows us to write the above program a little more concisely:
sum = 0
number = int(input("First number: "))
sum += number
number = int(input("Second number: "))
sum += number
number = int(input("Third number: "))
sum += number
print(f"The sum of the numbers: {sum}")
In fact, we don't necessarily need the variable number
at all. The inputs from the user can also be processed like this:
sum = 0
sum += int(input("First number: "))
sum += int(input("Second number: "))
sum += int(input("Third number: "))
print(f"The sum of the numbers: {sum}")
Of course, it will depend on the context how many variables are needed. If it is required to remember each value the user inputs, it will not be possible to "reuse" the same variable to read different values from the user. Consider the following:
number1 = int(input("First number: "))
number2 = int(input("Second number: "))
print(f"{number1} + {number2} = {number1+number2}")
First number: 2 Second number: 3 2 + 3 = 5
On the other hand, the above program does not have a named variable for storing the sum of the two values.
"Reusing" a variable only makes sense when there is a need to temporarily store things of a similar type and purpose, for example when summing numbers.
In the following example the variable data
is used to first store the name of the user, and then their age. This is not at all sensible.
data = input("What is your name? ")
print("Hi " + data + "!")
data = int(input("What is your age? "))
# program continues...
A better idea is to use separate variables, with descriptive names:
name = input("What is your name? ")
print("Hi " + name + "!")
age = int(input("What is your age? "))
# program continues...
You can check your current points from the blue blob in the bottom-right corner of the page.