Fonction range( )

Définition

a et b désignant deux entiers, range(a,b) est l'ensemble ordonné des entiers a, a+1, a+2, ..., b-1. C'est à dire l'ensemble des entiers k vérifiant a ≤ k < b.

On fera attention à l'apparente dissymétrie entre les deux bornes.

Remarque

range(0,4) est égal à range(4)

ExempleUtilisation minimale de range( )

CTRL+C pour copier, CTRL+V pour coller
1
for i in range(4):
2
    print(i)
for i in range(4):
    print(i)

va nous donner :

CTRL+C pour copier, CTRL+V pour coller
1
0
2
1
3
2
4
3
0
1
2
3

i prend donc successivement toutes les valeurs entières entre 0 et 3. Il y a bien 4 valeurs !

RemarqueObjet range

L'objet range(4) n'est pas « techniquement » égal à la liste [0, 1, 2, 3], car ce n'est pas un objet de type List:

CTRL+C pour copier, CTRL+V pour coller
1
>>> type(range(4))
2
<class 'range'>
>>> type(range(4))
<class 'range'>

Toutefois, si nécessaire, on peut le convertir en liste :

CTRL+C pour copier, CTRL+V pour coller
1
>>> list(range(4))
2
[0, 1, 2, 3]
>>> list(range(4))
[0, 1, 2, 3]

Il faut donc garder en tête que l'objet renvoyé par range() est un itérable assimilable à une liste de nombres.

ExempleLa table de multiplication du 8

CTRL+C pour copier, CTRL+V pour coller
1
Pour k allant de 1 à 10 :
2
   afficher k*8
Pour k allant de 1 à 10 :
   afficher k*8
CTRL+C pour copier, CTRL+V pour coller
1
for k in range(1,11) :
2
	print("8 x {} = {}".format(k, 8*k))
for k in range(1,11) :
	print("8 x {} = {}".format(k, 8*k))

Ce qui donne :

CTRL+C pour copier, CTRL+V pour coller
1
8 x 1 = 8
2
8 x 2 = 16
3
8 x 3 = 24
4
8 x 4 = 32
5
8 x 5 = 40
6
8 x 6 = 48
7
8 x 7 = 56
8
8 x 8 = 64
9
8 x 9 = 72
10
8 x 10 = 80
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
8 x 10 = 80

Boucle avec pas positif

Comment afficher les entiers pairs entre 2 et 20 ?

Le plus simple est d'utiliser range(a, b, p) qui permet de parcourir les valeurs supérieures ou égales à a et strictement inférieures à b de p en p : a, a+p, a+2p, a+3p, ...

Remarque : si p est omis, il vaut 1 par défaut.

CTRL+C pour copier, CTRL+V pour coller
1
for k in range(2,21,2) :
2
	print(k)
for k in range(2,21,2) :
	print(k)

On obtient donc :

CTRL+C pour copier, CTRL+V pour coller
1
2
2
4
3
6
4
8
5
10
6
12
7
14
8
16
9
18
10
20
2
4
6
8
10
12
14
16
18
20

Boucle avec pas négatif

Comment afficher les entiers en ordre décroissant ?

Le plus simple est d'utiliser range(a, b, p) avec une valeur négative du pas p.

CTRL+C pour copier, CTRL+V pour coller
1
for i in range(15,0,-1) :
2
	print(i)
for i in range(15,0,-1) :
	print(i)

On obtient :

CTRL+C pour copier, CTRL+V pour coller
1
15
2
14
3
13
4
12
5
11
6
10
7
9
8
8
9
7
10
6
11
5
12
4
13
3
14
2
15
1
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1

Une double boucle for

Il est très souvent utile d'imbriquer une boucle dans une autre, notamment lors du parcours de tous les pixels d'une image. Prenons pour l'instant un exemple numérique.

Le programme suivant :

CTRL+C pour copier, CTRL+V pour coller
1
for a in range(1,5):
2
	for b in range(1,4):
3
		p = a * b
4
		print("{} x {} = {}".format(a, b, p))
5
	print('--------------')
for a in range(1,5):
	for b in range(1,4):
		p = a * b
		print("{} x {} = {}".format(a, b, p))
	print('--------------')

va donner ceci :

CTRL+C pour copier, CTRL+V pour coller
1
1 x 1 = 1
2
1 x 2 = 2
3
1 x 3 = 3
4
--------------
5
2 x 1 = 2
6
2 x 2 = 4
7
2 x 3 = 6
8
--------------
9
3 x 1 = 3
10
3 x 2 = 6
11
3 x 3 = 9
12
--------------
13
4 x 1 = 4
14
4 x 2 = 8
15
4 x 3 = 12
16
--------------
17
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
--------------
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
--------------
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
--------------
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
--------------

Le séparateur -------------- permet de bien comprendre la fin de la deuxième boucle sur la variable b.