Éléments de base du langage
Variables et types de données simples
Python n’est pas un langage fortement typé, contrairement à d’autres langages, comme C++ ou Java.
Cela signifie que lors d’une allocation d’une variable, vous n’êtes pas, comme en C++, obligé de préciser le type de variable.
Par exemple, en C++, l’allocation d’un entier est faite par l’instruction suivante :
int i = 0;
En Python, c’est l’interpréteur qui choisit le type de la variable au moment de la première affectation.
Par exemple :
i = 500
Les types de base du langage sont les entiers (int), les flottants (float) et les complexes (complex), pour ce qui est des types numériques. À ces derniers s’ajoutent les chaînes de caractères (str).
Pour rappel, un nombre entier n’a pas de valeur décimale. Un flottant, au contraire, est un chiffre possédant des décimales.
Le type complex sert à représenter les nombres complexes, utiles au scientifique pour le calcul numérique ; nous ne les utiliserons pas dans cet ouvrage.
1. Entiers
Sur une architecture de type 32 bits, une variable de type int peut coder des valeurs comprises entre -231 et 231-1, soit une valeur comprise entre -2 147 483 648 et 2 147 483 647.
En Python 3, tous les entiers sont de type int. En effet, la recommandation PEP 237 a supprimé le type long, qui codait des nombres d’une taille supérieure aux entiers.
Nous avons vu que c’est lors de l’affectation que l’interpréteur Python détermine le type d’une variable. Pour les entiers, il existe plusieurs façons de réaliser l’affectation. Vous pouvez préciser la valeur représentée sous différents types de base. En Python, les représentations sont au nombre de trois :
-
Binaire : les éléments unitaires prennent leur valeur entre 0 et 1. Pour utiliser cette représentation, il faut préciser 0b dans la valeur en représentation binaire.
-
Décimale : les éléments unitaires prennent leur valeur entre 0 et 9. C’est la représentation par défaut, il n’est pas nécessaire d’ajouter un symbole quelconque pour utiliser cette représentation.
-
Hexadécimale : les éléments unitaires...
Types de données complexes
Nous entendons par données complexes, non des données complexes au sens mathématique du terme, mais au sens de la structuration informatique. C’est-à-dire des structures permettant de stocker des ensembles de données hétérogènes ou non. Ces structures ont été ajoutées à la librairie de base du langage dans le but de rendre plus simple leur manipulation et d’éviter aux débutants de devoir les réimplémenter (tâche difficile…).
En Python, ces structures de données sont au nombre de trois :
-
les list (listes)
-
les dict (dictionnaires)
-
les tuples (tuples)
Avant de présenter ces éléments, il est nécessaire d’introduire succinctement la notion d’objet (voir le chapitre Modularité), car elle est nécessaire pour définir les structures de données.
Un objet est un type de données (à l’image des entiers int) qui est composé d’un ensemble de données, qu’on appelle attributs membres, et de fonctionnalités, appelées méthodes membres. Les objets informatiques permettent de conceptualiser un problème particulier. Nous n’irons pas ici plus dans la définition, car la notion d’objet et de classe fera l’objet d’un chapitre particulier.
Maintenant cette notion d’objet introduite, les structures complexes peuvent être présentées.
1. Listes
a. Définition
Une liste (list), en référence aux listes chaînées, n’est ni plus ni moins qu’un tableau d’objets. Comme tout tableau, la liste est indicée. L’indice de début de la liste est 0.
À la différence des tableaux en C++, les listes en Python n’ont pas une taille fixe. Il est donc possible à tout moment d’ajouter ou de retirer des éléments dans la liste.
b. Création d’une liste
La création d’une liste est très simple, il suffit d’affecter à une variable les valeurs de la liste qui sont précisées entre crochets. Par exemple :
In [34]: maliste = [12, 15, 19, 0]
In [35]: print(maliste)
[12, 15, 19, 0]
Il est très souvent nécessaire dans un algorithme d’avoir...
Opérateurs
Comme tous les langages contemporains, Python possède différents types d’opérateurs suivant les données à manipuler. Un opérateur est une fonction spéciale qui réalise une opération entre des opérandes d’un type défini suivant l’opérateur pour fournir au final un résultat. Un opérateur est représenté par un symbole ou mot-clé du langage, on parle aussi d’instruction réservée du langage.
Les différents types d’opérateurs sont détaillés dans la suite de cette section. Dans un but de clarté, les opérateurs sont regroupés par types de données qu’ils permettent de manipuler.
1. Opérateur d’affectation
L’opérateur d’affectation attribue une valeur à une variable. Cet opérateur est représenté par le symbole =.
Dans le cas de Python, ce symbole permet de réaliser, lors de la première utilisation d’une variable, l’allocation de celle-ci. C’est en fonction du type de la donnée à droite de l’opérateur que le type de variable est choisi par l’interpréteur.
D’un point de vue de la syntaxe, il est possible de réaliser plusieurs affectations sur une même ligne de la manière suivante :
In [82]: i, j = 12, 500
In [83]: print(i,j)
12 500
Même si le langage offre cette possibilité, il est souvent déconseillé de l’utiliser pour le manque de lisibilité qu’elle procure.
Python permet également de réaliser une affectation multiple. La syntaxe est la suivante :
In [84]: c = t = s = r = 1000
In [85]: print(c, t, s, r)
1000 1000 1000 1000
Comme pour l’affectation de plusieurs variables sur une même ligne, cette opération est déconseillée, car elle rend le code assez illisible. Notez que ceci n’est qu’une recommandation. Un développeur peut toujours passer outre.
2. Opérateurs arithmétiques
Tous les opérateurs arithmétiques s’appliquent sur des valeurs entières ou flottantes.
a. Addition
Le symbole + est l’opérateur d’addition. Il retourne le résultat de l’addition des deux...
Structures conditionnelles
Les exemples de ce chapitre ne sont plus donnés à partir d’exécution directe dans l’environnement IPython (instruction par instruction), mais en exécutant des fichiers de script.
Les conditions sont un concept très utilisé en informatique. L’idée est de n’exécuter certaines instructions de code que lorsque certaines conditions sont remplies.
En Python, il n’existe qu’une seule structure conditionnelle : la structure if (Si).
Dans sa forme la plus simple, la syntaxe est la suivante :
if <condition évaluée> :
instruction 1
instruction 2
Si la condition évaluée est réalisée, alors les instructions 1 et 2 sont exécutées. Le plus souvent, les conditions évaluées le sont à l’aide d’opérateurs conditionnels.
Le code ci-après illustre le fonctionnement du if dans sa version la plus simple.
a = True
if(a is True):
print("a is True")
In [1]: %run if_simple.py
a is True
Une version plus évoluée est le if, ..., else. La syntaxe est la suivante :
if <condition évaluée> :
instruction 1
instruction 2
else : ...
Boucles
Les boucles sont un concept informatique qui permet de répéter un certain nombre de fois une ou des instructions.
Le nombre d’itérations de la boucle (ou nombre de répétitions) peut être soumis à une condition. Cette condition peut être un nombre de répétitions défini, par exemple : répéter huit fois ; ou ce peut être quand un état logique particulier est atteint, par exemple : tant qu’une valeur booléenne vaut True.
L’avantage est de réduire l’effort de syntaxe : on évite ainsi d’écrire n lignes de code, il suffit d’itérer la boucle n fois.
Il existe en Python deux boucles : la boucle while et la boucle for.
1. Boucle while
Cette boucle permet de répéter des instructions tant qu’une condition est vraie (True).
La syntaxe est la suivante :
while <condition> :
<instruction 1>
<instruction 2>
<instruction 3>
...
<instruction n>
Cette boucle est très simple à comprendre, puisque tant que la condition <condition> vaut True, alors les instructions <instruction 1> à <instruction n> sont exécutées.
Notez que l’indentation doit être absolument respectée pour que le comportement obtenu soit celui escompté.
Le script suivant affiche la valeur d’un compteur tant que la valeur du compteur est strictement inférieure à 10.
cpt = 0
while cpt < 10:
print("Valeur du compteur : ", cpt)
...
Exercice
Afin de reprendre toutes les notions de ce chapitre, il est proposé ici un petit exercice.
1. Énoncé
Il s’agit de calculer le total d’un panier de courses et, suivant le montant obtenu, d’afficher un message indiquant si le panier est dans le budget défini par l’utilisateur, hors budget ou en limite de budget (quand la valeur du panier atteint 95 % du budget alloué).
Les produits disponibles à la vente sont :
-
tomate
-
banane
-
pomme
Le prix au kilo est :
-
tomate 3,15 €
-
banane 2,5 €
-
pomme 2 €
La liste d’achats peut être par exemple :
pomme 5 kg
tomate 1 kg
2. Solution
Dans un premier temps, il faut stocker les prix au kilo dans un dictionnaire :
l_prix = {"pomme": 2, "banane": 2.5, "tomate": 3.15}
Il en va de même pour la liste d’achats :
l_achat = {"pomme": 5, "tomate": 1}
Définissons ensuite le budget maximum :
budget_maxi = 15
Initialisons la variable qui stocke le coût total :
prix_tot = 0
Il est maintenant possible de parcourir le dictionnaire des achats afin d’en extraire la clé elt et de récupérer la quantité achetée l_achat[elt] ainsi que le coût au kilogramme : l_prix[elt]. De cette manière, nous pouvons calculer le coût total à la volée :...