There are two different structures for iterations in Python, while statements and for statements.
Using a while statement, you repeat code as long as some condition is true.
while <condition>:
#indented code that is repeated
In the repeated code, the value of the condition must change at some point in time, otherwise you get an infinite loop.
The code prints all multiples of 15 that are less than 100.
a = 0
while a < 100:
print(a)
a = a + 15
Try to make a comment of the last row so you get an infinite loop. Run the program and click on stop to stop the execution.
Change the code so all multiples of 3 that are less than 50 are printed.
If you know how many times you want to repeat some code, you can use a for statement and the built-in function
range()
. The function range()
creates an integer sequence that can be specified in various ways. If start
, stop
and step
are integers, the function range()
can be used in following ways:
range(stop)
, the sequence is all integers ≥ 0 and < stop
range(start, stop)
, the sequence is all integers ≥ start
and < stopp
range(start, stop, step)
, the sequence starts with the number start
and is increased by step
as long as the number is < stop
To write a for statement you use some variable and following structure
for <variable> in <set_of_values>:
#indented code that is repeated
where the set of values can be created by the function range()
.
Try the code:
for i in range(10):
print(i)
Change the sequence to the one created by range(4, 10)
.
Change the sequence to the one created by range(4, 10, 2)
.
Since Python is often used for text-based programming, you can format text to display tables. We will show an example of integers and their squares.
Using the code
print("number square")
print("---------------")
for number in range(-2, 3):
print(f"{number} {number**2}")
following table is printed
number square --------------- -2 4 -1 1 0 0 1 1 2 4
As you can see, the numbers in the second column are not beneath one another. If we had used range(-10, 11)
, the table would have been even uglier.
We can format strings so variable values are right aligned at some position. The position is written after colon, after the variable name inside the curly brackets.
The code
print("number square")
print("---------------")
for number in range(-2, 3):
print(f"{number:5} {number**2:8}")
prints following table
number square --------------- -2 4 -1 1 0 0 1 1 2 4
Now all numbers are right aligned.
If we want to right align variable values, and show two decimals, we can write .2f
after the position.
Using the code
print("number square")
print("---------------")
for number in range(-2, 3):
print(f"{number:5.2f} {number**2:8.2f}")
the table looks like this
number square --------------- -2.00 4.00 -1.00 1.00 0.00 0.00 1.00 1.00 2.00 4.00
Tables like this, that can be created by Python in school, can also easily be created using spreadsheets, or by both using Python and spreadsheets.
If you want to find the sum of the numbers \(0, 1, 2, 3, 4, 5\), you can start by making a variable the_sum
that has the value \(0\). Then you can add one number at the time in an iteration.
Using a while statement, following code works:
the_sum = 0;
number = 0;
while number < 6:
the_sum = the_sum + number;
number = number + 1;
print(the_sum)
Using a for statement, following code works:
the_sum = 0;
for number in range(6):
the_sum = the_sum + number;
print(the_sum)
Since it's very common to increase a variable value by some number, there is a special assignment operator for doing so. There are assignment operators for all the arithmetic operators.
operator | example code | the same as |
---|---|---|
+= |
a += 1 |
a = a + 1 |
-= |
a -= 1 |
a = a - 1 |
*= |
a *= 2 |
a = a * 2 |
/= |
a /= 2 |
a = a / 2 |
%= |
a %= 2 |
a = a % 2 |
//= |
a //= 2 |
a = a // 1 |
If we want to add a number to the_sum
, we can do it like this:
the_sum += number
Some for statements
Make a for statement that prints one number per row of following numbers:
Some while statements
Make a for statement that prints one number per row of following numbers:
Right-angled triangle of asterisks
The command print("*"*5)
prints five asterisks.
Make a program that lets the user choose a number of asterisks. Then print a right-angled triangle of asterisks.
Running the program may look like this:
Number of asterisks: 4 * ** *** ****
Isosceles triangle of asterisks
Make a program that lets the user choose an odd number of asterisks. Then print an isosceles triangle of asterisks. Each row should have an odd number of asterisks.
Running the program may look like this:
Number of asterisks: 7 * *** ***** *******
Make an integer variable for the number of blanks starting each row. What value should this variable have for each row?
Print decimal digits
Make a program that lets the user enter a positive integer. The program should then print the digits of the integer, one digit per row, in reverse order.
Running the program may look like this:
Write a positive integer: 567 7 6 5
Binary digits
There is a built-in function bin(<number>)
that converts a number to a binary number and returns a string representing the binary number. The string has the prefix 0b
.
Running the program may look like this:
Write a positive integer: 28 The binary representation of the number is: 0b11100 0 0 1 1 1
Arithmetic progression
In an arithmetic progression, the difference of any two successive numbers is constant.
Make a program that prints the first \(n\) numbers of the arithmetic progression
\[5, 8, 11, 14, \ldots\]You can print one number per row.
Let the user enter the value of \(n\), then print the numbers. Try out the code for small positive values of \(n\).
Add code that calculates the sum of the arithmetic progression. First print the numbers, then the sum.
Geometric progression
In a geometric progression, the quotient when a number is divided by its preceding number is constant, for all numbers after the first number.
Write a program that prints the \(n\) first numbers (as floating point numbers) in the geometric progression
\[1, \frac{1}{2}, \frac{1}{4}, \frac{1}{8}, \ldots\]Let the user enter the value of \(n\), then print the numbers. Try out the code for small positive values of \(n\).
Change the code so the sum of the geometric progression is calculated. Print the sum instead of the numbers. Which is the smallest value of \(n\) that results in the sum 2.0
?
Table of squares
Make a program that lets the user enter a positive integer \(n\). Print a table of all non-negative numbers less than or equal to \(n\), a table that also displays the square of each number in a second column.
Running the program may look like this:
The largest integer: 4 ---------------- number square ---------------- 0 0 1 1 2 4 3 9 4 16
Find the mean value
Make a program that calculates the mean value of \(n\) numbers that are given as input from the user. Start by asking for the total number of numbers.
Running the program may look like this:
How many numbers? 5 Write number 1: 0 Write number 2: 3 Write number 3: 4.5 Write number 4: 4.5 Write number 5: 7 The mean value is 3.8.
Loan with interest
Make a program that lets the user enter the amount of the loan, and the annual interest rate. Then show how the loan increases during a period of ten years, using a table. Show the loan using two decimals.
Running the program may look like this:
The amount of the loan: 5000 Annual interest rate (per cent): 5 ---------------- year loan ---------------- 0 5000.00 1 5250.00 2 5512.50 3 5788.12 4 6077.53 5 6381.41 6 6700.48 7 7035.50 8 7387.28 9 7756.64
Annuity loan
Make a program that lets the user enter following data:
When finding the loan per year, you can use the built-in function max()
that takes any number of arguments and returns the maximum argument. By taking the maximum of the loan and the number zero, you can see to it that the loan never gets negative.
Running the program may look like this:
The amount of the loan: 5000 Annual interest rate (per cent): 5 Annual mortgage: 900 ---------------- year loan ---------------- 0 5000.00 1 4350.00 2 3667.50 3 2950.88 4 2198.42 5 1408.34 6 578.76 7 0.00 8 0.00 9 0.00
Prime number?
Make a program that lets the user enter the value of a positive integer \(n\). Find out if \(n\) is a prime number or not, then print the result.
One easy way to do it is to check if \(n\) is divisible by any of the integers smaller than \(n\) but larger than one, if not, \(n\) is a prime number. It suffices to check all integers larger than one but less than or equal to \(\sqrt n\). If the number \(37\) isn't divisible by any of the integers less than \(\sqrt{37} \), it cannot be divisible by a number larger than \(\sqrt{37}\).
You can use a Boolean variable is_prime
that is assigned the value True
when the program starts. If you find a divisor you assign is_prime
the value False
.
Project Euler
At the web site Project Euler you can solve problems that require mathematical reasoning as well as computational thinking.
You can make an account and solve the problems one by one. For each problem you must make a program to find the correct answer. After providing the correct answer to a problem, you can participate in (or just read) an online discussion about the problem and its solution.
You can also start solving problems without making an account.
Solve Project Euler: Problem 1.