Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Manipulation de valeurs entières en Python

Variables et types de données Base binaire et opérations bit à bit


Accès rapide :
La vidéo
Utilisation du type int
Les opérateurs arithmétiques
Les opérateurs de comparaisons
Les opérateurs d'affectation
Utilisation du caractère de séparation de groupes de chiffres
Les bases numériques supportées pour exprimer une valeur entière
Travaux pratiques
Les énoncés
Les corrections

La vidéo

Cette vidéo vous montre comment manipuler des données de type int dans vos programmes Python. Différents opérateurs et fonctions applicables aux entiers vous seront présentés.


Manipulation de valeurs entières en Python

Utilisation du type int

Nous avons déjà utilisé le type int (la classe int, si vous préférez) : il permet d'exprimer des valeurs entières. Pour rappel, voici comment définir une variable contenant une valeur entière.

>>> value = 123
>>> print(value)
123
>>> type(value)
<class 'int'>
>>>
Exemple de définition d'une valeur entière en Python.

Contrairement à d'autres langages de programmation, en Python, un entier n'est pas limité dans sa plage de valeurs. Vous pouvez manipuler des valeurs entières nécessitant des milliers de chiffres pour être exprimé. A titre d'exemple, voici un l'entier correspondant au calcul de 2 élevé à la puissance 1000.

 1 
 2 
 3 
 4 
>>> value = 2 ** 1000
>>> print(value)
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
>>>
Un très grand entier
je suis certains que certains d'entre vous ont testé une puissance 1 000 000. Allez, si ce n'est pas le cas, testez, juste pour voir ;-)

Vous pouvez utiliser la fonction input pour demander la saisie d'une valeur à partir de la console. Mais attention, cette fonction renvoie une chaîne de caractères. Si vous souhaitez obtenir une valeur entière, il faudra donc convertir la chaîne de caractères en une instance de la classe int. Voici comment procéder.

>>> str_value = input("Veuillez saisir une valeur numérique entière : ")
Veuillez saisir une valeur numérique entière : 3
>>> value = int(str_value)        # La conversion est faite ici
>>> value
3
>>> 
Exemple de saisie d'une valeur flottante à partir de la console.

Les opérateurs arithmétiques

Vous vous en doutez, de nombreux opérateurs peuvent être utilisés pour réaliser toutes sortes de calculs. Le tableau ci-dessous vous propose quelques opérateurs arithmétiques que vous pouvez utiliser sur vos valeurs entières.

Opérateur Description Exemple
+ Réalise l'addition de deux valeurs value = 3 + 7       # 10
- Réalise la soustraction de deux valeurs value = 10 - 5       # 5
* Réalise la multiplication de deux valeurs value = 10 * 5       # 50
** Elève une valeur à une puissance donnée value = 2 ** 8       # 256
/ Réalise la division de deux valeurs value = 10 / 5       # 2
// Réalise la division entière de deux valeurs value = 5 // 3       # 1
% Calcule le reste de la division entière de deux valeurs value = 5 % 3       # 2

Les opérateurs de comparaisons

Vous pouvez comparer deux entiers entre eux. Pour ce faire, différents opérateurs vous sont proposés. Voici la liste des six opérateurs de comparaison.

Opérateur Description Exemple
== Vérifie si deux valeurs sont identiques 3 == 7       # C'est faux
!= Vérifie si deux valeurs sont différentes 3 != 7       # C'est vrai
< Vérifie si une valeur est inférieure à une autre 3 < 7       # C'est vrai
<= Vérifie si une valeur est inférieure ou égale à une autre 3 <= 7       # C'est vrai
> Vérifie si une valeur est supérieure à une autre 3 > 7       # C'est faux
>= Vérifie si une valeur est supérieure ou égale à une autre 3 >= 7       # C'est faux

Et voici un petit exemple d'utilisation.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
# A partir du module standard random.py, on importe la fonction randint.
# Cette fonction permet de calculer une valeur pseudo-aléatoire.
from random import randint

# On demande une valeur pseudo-aléatoire entre 1 et 5 compris.
searched_value = randint(1, 5)

# On demande la saisie d'une valeur (la conversion de str vers int est faite à la volée.
value = int(input("Veuillez saisir un entier : "))

# On compare les deux valeurs grâce à l'instruction if.
if value == searched_value:
    print("Trop fort, vous avez gagné :-)")
else:
    print("Désolé, ce n'est pas la bonne valeur :-(")
    print("Il fallait trouver", searched_value)
Fichier game.py : un petit jeu
on parle de valeur pseudo-aléatoire car l'aléa n'existe pas réellement dans un système déterministe. Et un ordinateur est un système déterministe. Pour néanmoins simuler l'aléa, on utilise des générateurs de valeurs basés sur des algorithmes mathématique qui produisent donc des valeurs pseudo-aléatoires.
l'instruction if / else permet de tester si une condition est vraie ou non (dans notre cas, la comparaison). Si la condition est vraie, c'est le bloc en retrait sous le if qui sera exécuté. Dans le cas contraire, c'est le bloc en retrait sous le else qui sera exécuté.

Et voici un exemple d'utilisation de ce programme.

$> python game.py
Veuillez saisir un entier : 3
Désolé, ce n'est pas la bonne valeur :-(
Il fallait trouver 4
$>

Les opérateurs d'affectation

Vous pouvez à tout moment changer la valeur de votre variable. Soit vous procédez à une nouvelle affectation, soit vous faite varier la valeur par rapport à son état actuel : deux nombreux opérateurs sont là pour cela. Voici une liste d'opérateurs permettant de changer la valeur d'un entier.

Opérateur Description Exemple Equivalent à
= Modifie le contenu d'une variable. value = 10
+= Ajoute au contenu d'une variable une autre valeur. value += 1 value = value + 1
-= Soustrait au contenu d'une variable une autre valeur. value -= 2 value = value - 2
*= Multiplie le contenu d'une variable par une valeur et stocke le résultat dans la variable. value *= 2 value = value * 2
**= Elève le contenu d'une variable à une puissance donnée et stocke le résultat dans la variable. value **= 3 value = value ** 3
/= Divise le contenu d'une variable par une valeur et stocke le résultat dans la variable. value /= 2 value = value / 2
//= Effectue la division entière du contenu d'une variable par une valeur et stocke le résultat dans la variable. value //= 2 value = value // 2
%= Calcule le reste de la division entière du contenu d'une variable par une valeur et stocke le résultat dans la variable. value %= 2 value = value % 2

Voici un exemple d'utilisation de l'un de ces opérateurs. Il permet de réitérer un bloc d'instructions, tant qu'une variable n'aura pas atteint la valeur 0.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
# On déclare la valeur d'un compteur
counter = 10

# On fait une boucle tant que le compteur est supérieur à 0.
while counter > 0:
    # On affiche la valeur du compteur
    print(counter)
    
    # On décrémente le compteur de 1
    counter -= 1
    
print("Boooouuuummmmm !")
Utilisation d'un opérateur d'affectation combiné

Et voici le résultat produit par ce programme.

10
9
8
7
6
5
4
3
2
1
Bye bye

Utilisation du caractère de séparation de groupes de chiffres

Parfois on doit manipuler des grands nombres : plus vos valeurs seront grandes et plus elles seront difficiles à déchiffrer. A titre d'exemple, quelle est la valeur stockée dans la variable counter suivante ?

 1 
counter = 10000000000
Quelle est cette valeur ?
Les plus courageux d'entre vous auront compté le nombre de zéros et oui la valeur considérée est bien dix milliards.

Depuis Python 3.6, une nouvelle syntaxe permet de définir des grands nombres avec un caractère de séparation de groupes de chiffres. Entre chaque groupe de chiffres, vous pouvez placer un caractère _ (underscore). Voici un exemple d'utilisation : vous conviendrez, cette fois-ci la valeur est plus facilement déchiffrable.

 1 
counter = 10_000_000_000
C'est plus clair, non ?
vous n'êtes pas obligé de regrouper les chiffres par blocs de trois. Vous n'êtes pas non plus obligé d'avoir des groupes de tailles identiques. Pour autant, en base décimale, je vous recommande fortement de rester sur des blocs de trois chiffres.

Les bases numériques supportées pour exprimer une valeur entière

Le langage Python permet d'exprimer des valeurs entières en utilisant diverses bases numériques. Bien entendu, la plupart du temps, vous travaillerez en base décimale (avec dix chiffres de 0 à 9).

Mais parfois, d'autres bases numériques peuvent être utiles : je pense à la base binaire (avec les deux chiffres 0 et 1), la base octale (avec les huit chiffres de 0 à 7) et la base hexadécimale (avec seize chiffre de 0 à 9 puis de a à f). Les bases numériques binaire et hexadécimale pourront notamment être utiles si vous cherchez à programmer une carte Raspberry Pi. En effet quand on communique avec du matériel (hardware), il est nécessaire de maîtriser le binaire et l'hexadécimale, car elles sont utiles pour représenter le fonctionnement de l'électronique numérique. La base numérique octale, quant à elle, peut être utile pour la gestion des droits d'accès sur un système de fichiers Linux/Unix.

si les bases numériques binaire, octale et hexadécimale sont encore un peu flous pour vous, je vous conseille la lecture des deux documents suivants : la base binaire, la base octale et la base hexadécimale.

En Python, une valeur entière exprimée en base binaire commence par le préfixe 0b. De même, une valeur entière exprimée en base octale commence par le préfixe 0o. Enfin, une valeur entière exprimée en base hexadécimale commence par le préfixe 0x. Voici quelques exemples d'utilisation des bases numériques supportées en Python.

>>> a = 255
>>> b = 0b1111_1111
>>> c = 0xff
>>> print(a, b, c)
255 255 255
>>> color = 0xff_00_FF          # Les trois parties représentent les composantes RGB 
>>> print(color)                # (Red/Green/Blue) d'une couleur.
16711935
>>> d = 0o10
>>> print(d)
8
>>>
Exemple d'utilisation des bases numériques supportées par Python.
comme vous le constatez, il est possible d'utiliser le caractère de séparation de groupes de chiffres avec ces autres bases numériques.

A titre d'information, sachez qu'il existe trois fonctions de base en Python qui permettent de calculer la chaîne de caractères de représentation binaire, octale ou hexadécimale d'une valeur entière.

Voici quelques exemples d'utilisation :

>>> value = 15
>>> bin(value)
'0b1111'
>>> hex(value)
'0xf'
>>> oct(value)
'0o17'
>>> 
>>> value = 64
>>> bin(value)
'0b1000000'
>>> hex(value)
'0x40'
>>> oct(value)
'0o100'
>>> 
>>> bin(3.5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer
>>> 
Représentations binaires et hexadécimales de valeurs entières.
comme vous le constatez, ces deux fonctions doivent impérativement être invoquées sur des valeurs entières, sans quoi une erreur vous sera retournée.

Travaux pratiques

Les énoncés

Exercice 1 : écrire un programme qui déclare deux variables a et b. Ces variables doivent être initialisées avec des entiers aléatoires compris entre 0 et 9. Affichez ensuite le contenu de ces variables. Puis, faire en sorte de permuter le contenu des deux variables. Enfin, affichez de nouveau le contenu des deux variables. Evitez de regarder directement la correction ci-dessous.

Exercice 2 : afficher les carrés des entiers compris entre 1 et 10 en utilisant une boucle while. Evitez de regarder directement la correction ci-dessous.

Les corrections

Exercice 1 : cette correction en fait un peu plus que demandé dans le sens ou je vous y propose deux manières de permuter le contenu de vos variables.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
# A partir du module standard random.py, on importe la fonction randint.
# Cette fonction permet de calculer une valeur pseudo-aléatoire.
from random import randint

# On initialise nos deux variables et on les affiche.
a = randint(0, 9)
b = randint(0, 9)
print("a =", a, "- b =", b)

# Première technique pour permuter deux variables (avec un troisième variable).
temp = a
a = b
b = temp
print("a =", a, "- b =", b)

# Seconde technique (on utilise un tuple - on comprendra mieux ça plus tard).
a, b = (b, a)
print("a =", a, "- b =", b)
Exemple de permutation de contenu de variables

Exercice 2 : cet exercice étant assez simple, je vous laisse regarder la correction.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
counter = 1

while counter <= 10:
    print(counter, " => ", counter ** 2)
    counter += 1

print("Trop facile ;-)")

Variables et types de données Base binaire et opérations bit à bit