Vous êtes sur la page 1sur 98

Python

La Programmation Autrement
Chapitre 1
Prise en Main et Bases en Python

A. GUEYE agueye@isepdiamniadio.edu.sn 775099564


Instructeur
Python
Apprentissage d’un nouveau langage
Phase de découverte :
Recherche d’information avec notes de mots clé pour appliquer la loi de pareto.

Variable id
Map Mind : Carte Heuristique

.methode

OBJET
Base de Donnée

Def fonction

Loi des 80/20 : Socket

En programmant on effectue 80% du travail de tous les


jours avec 20% ou max 40% des fonctionnalités du langage.

0
Question : Oû s se trouve les 30% de l’information pour les 80% du travail
Python
Penser pour faciliter la Programmation
Un langage puissant, à la fois facile à apprendre et riche en possibilités. Une
syntaxe est simple, concise et efficace. “ On code ce qu’on pense ”

Résumer Python en quatre points forts


ü Productivité Produire rapidement du code compréhensible
ü Qualité Code évolutif et maintenable, Programmation Orientée Objet
ü Portabilité Disponibilité de l’interpréteur Python multiplates-formes
ü Intégration Intégrer des composants écrits dans un autre langage.

Domaines d’application
Apprentissage de la POO Scriptss d'administration système
Réalisation Application GUI Calcul scientifique - l'imagerie Vidéo Analytique
Datascience Systèmes embarqués IoT Accès aux BD Développement WEB

1
Python
Ecriture et lisibilité

Les programmes sont écrits pour être lus par des humains, il est nécessaire alors de
rendre les programmes faciles à lire et évidents.

Indentation obligatoire
Recommande d'utiliser 4 <espace> par niveau d'indentation et pas la
tabulation <tab>.
Zen de Python
Préfère :
Syntaxe simple à écrire et à lire. la beauté à la laideur,
l’explicite à l’implicite,
le simple au complexe,
Pas de séparateur et le complexe au compliqué,
Pas de points-virgules ni d’accolades. le déroulé à l’imbriqué,
l’aéré au compact
Prend en compte la lisibilité
2
Python
Variables
En python tout est objet.
Le moyen pour Python de manipuler ces objets est par l’intermédiaire de variables
car les variables référencent les objets.
Valeur
Variable comme une boite
- Forme = Type
- Etiquette = Nom
- Contenu = Valeur Nom
Un nom de variable en python débute par une lettre majuscule A–Z ou minuscule a-
z, un underscore _, suivie de lettres ou chiffres.
Pour créer (ou déclarer) une variable, il suffit de lui affecter une valeur.

>>> age = 20 # Nom : age Valeur : 20 Type : ???


IMPORTANT - Quelques erreurs à éviter
Il est important de ne pas créer de noms de variables qui pourraient rentrer en conflit avec des instructions
de Python.
Il est donc fortement déconseillé (même si c'est possible et que Python ne vous empêchera pas de le faire) de
créer une variable print = 5 par exemple.
3
Python
Variables

Mots-clés réservés ne peuvent donc pas être utilisés pour définir vos
propres identifiants (variables, noms de fonction, classes...)

>>> Def = 1 # Sensible à la casse

>>> def = 1 # Génération d’erreur

>>> a = 5 # Affectation Simple

>>> b = 9 # Affectation Simple

Idéal pour Switch


>>> a, b = 5, 9 # Affectation Double
Commentaire Terminer par la valeur à affecter
# Commentaire sur une ligne >>> a = b = c = 7 # Affectation Multiple

Sur la ligne tout ce qui vient après le # n’est pas pris en compte
Commentaires multi-lignes
Définis à la façon des chaînes de caractères multi-lignes : précédé et suivi de 3 4
apostrophes ''' ou 3 guillemets """
Python
Typage des données

Python est un langage à typage fort et dynamique.


Un langage est typé dynamiquement si la déclaration des variables se fait sans
spécifier le type.
>>> age = 20

le typage est lié à l’objet par conséquent l’objet va garder le même type durant
toute l’exécution du programme; on parle de typage fort.

Un langage est fortement typé si


§ La compilation ou l'exécution peuvent détecter des erreurs de type
>>> 20 + ‘Bonjour’
§ Les conversions implicites de types sont formellement interdites.

>>> age + ‘année’

Par contre, en cours d’exécution du programme, la variable peut changer de type


selon le type de l'objet référencé; on parle de typage dynamique.

5
Python
Typage des données

>>> type(4) # On entend par int les entiers signés


<class 'int'>
>>> type(1.40438757) # Les nombres à virgule flottante sont le type float.
<class 'float'>
>>> type(True) # Booléen : une variable à deux états (True ou False) de type bool.
<class 'bool'>
>>> type(4+2j) # Le suffixe j désigne les variable de type complex.
<class 'complex'>
Parlons un peu des fonctions en Python

- Intégré type print input


3 Types de fonctions – Modulaire sqrt
- Définie 6
Python
Conversion de Type

Convertir explicitement d’un entier en flottant


>>> float(5)
5.0
Convertir explicitement un flottant en entier (troncature) :

>>> int(3.7) >>> int(-3.7)


3 -3
Convertir explicitement un flottant en entier (arrondi) :

>>> round(3.7)
4

Si un opérateur arithmétique est utilisé avec des opérandes de types différents, Python va
automatiquement convertir l’opérande dont le type est plus “étroit” vers le type le plus
“large”.

7
Python
Opérateurs de base

Les opérateurs mathématiques de base sont :


Opérateurs classiques : + - * /
Division entière tronquée : // >>> 7//5

Puissance : ** >>> carré_de_3 = 3**2

Numérateur-------n d --------Dénominateur
Reste n%d-------- r q -------Quotient n//d
Modulo : %
>>> 7%5
(reste de la division entière)

Les opérateurs de pré/post incrémentation/décrémentation ++ et -- n'existant


pas sous Python,
>>> a += 1 # Pour incréménter
on utilisera += 1 et -= 1
NB Si on a des objet de même type leur addition est appelé concaténation 8
Python
Opérateurs de comparaison
Opérateurs de comparaison
C’est des opérateurs qui retournent les valeurs True ou False de type
booléen. Python offre notamment les opérateurs suivants :
>>> True == 1 # Compare les valeurs
est égal à : ==
>>> 3**2 != 3*2
est différent de : !=
>>> a = 5
est inférieur à : <
>>> b = 7
est supérieure à : >
>>> a <= b ; a < b
est inférieur ou égal à : <=
>>> a >= b ; a > b
est supérieure ou égale à : >=
>>> x , y = 1000 ; 1000 # objet différent
Attention à id (De -5 à 256)
>>> id(x) != id(y)
Compare les addresse mémoire des objets 9
Python
Opérateurs logiques
Python permet de réaliser certaines opérations logiques citées ci-après selon
leur ordre de priorité.

“non” logique (la négation) : not >>> not True == 1

si la condition est vrai alors elle devient fausse et vis versa


“et” logique (la conjonction) : and >>> 10 < age and age < 20
si les deux opérandes sont vrais,
la condition est vraie Peut remplacer des if

“ou” logique (la disjonction) : or >>> 7 < 5 or 3**2 != 3*2


si l'un des opérandes est vrai,
Evaluer en premier
la condition est vraie
NB and est plus for que or >>> 10 < age and age < 20 or age == 0
Python permet de chaîner les comparaisons.
10 < age < 20 qui est équivalente
>>> 10 < age and age < 20
en Python à age > 10 and age < 20. 10
>>> 10 < age < 20
Python
Opérateurs logiques
2. Vous pouvez utiliser des opérateurs au niveau du bit pour manipuler des
bits de données uniques. Les exemples de données suivants :
x = 15, lequel est 0000 1111 en binaire,
y = 16, lequel est 0001 0000 en binaire.
>>> not True == 1
sera utilisé pour illustrer la signification des opérateurs au niveau du bit
en Python. Analysez les exemples ci-dessous :
•&fait un bit à bit et , par exemple, x & y = 0, lequel est 0000 0000 en
binaire,
•|fait un bit ou , par exemple, x | y = 31, lequel est 0001 1111 en binaire,
•˜ ne fait pas au niveau du bit , par exemple, ˜ x = 240*, lequel est 1111
0000 en binaire,
•^fait un bitwise xor , par exemple, x ^ y = 31, lequel est 0001 1111 en
binaire,
•>>fait un décalage au niveau du bit à droite , par exemple, y >> 1 = 8,
lequel est 0000 1000en binaire,
•<<effectue un décalage binaire à gauche , par exemple, y << 3 = , lequel est
1000 0000en binaire
10
1. Python prend en charge les opérateurs logiques suivants :
•and→ si les deux opérandes sont vrais, la condition est vraie, par exemple, (True and True)est True,
•or→ si l'un des opérandes est vrai, la condition est vraie, par exemple, (True or False)est True,
•not→ renvoie faux si le résultat est vrai, et renvoie vrai si le résultat est faux, par exemple, not Truees
2. Vous pouvez utiliser des opérateurs au niveau du bit pour manipuler des bits de données uniques.
•x = 15, lequel est 0000 1111en binaire,
•y = 16, lequel est 0001 0000en binaire.
sera utilisé pour illustrer la signification des opérateurs au niveau du bit en Python. Analysez les exem
•&fait un bit à bit et , par exemple, x & y = 0, lequel est 0000 0000en binaire,
•|fait un bit ou , par exemple, x | y = 31, lequel est 0001 1111en binaire,
•˜ ne fait pas au niveau du bit , par exemple, ˜ x = 240*, lequel est 1111 0000en binaire,
•^fait un bitwise xor , par exemple, x ^ y = 31, lequel est 0001 1111en binaire,
•>>fait un décalage au niveau du bit à droite , par exemple, y >> 1 = 8, lequel est 0000 1000en binaire,
•<<effectue un décalage binaire à gauche , par exemple, y << 3 = , lequel est 1000 0000en binaire
Python
Chaines de caractères
Pour écrire une chaîne de caractères, il faut l’écrire entre deux apostrophe
' ou entre deux guillemets ". >>> type("Abou") <class 'str'>
🚨 Séquence immuable

Attention >>> Nom = "GUEYE"

Pas d’apostrophe dans une chaine


contenant des apostrophes. >>> Phrase = ‘Ici c’est Python le Roi.’
Pour ne pas interprété l’apostrophe
>>> Phrase # Génére une erreur
on ajoute \ devant.
>>> Phrase = ‘Ici c\’est Python le Roi.’

Chaîne sur plusieurs ligne >>> Phrase = ’’’ Bonjour


La chaîne est entre 3 apostrophes Les Pythoniers ’’’
Ou 3 guillemets >>> Phrase # Pas très joli

>>> print(Phrase) 11
Python
Chaines de caractères
Concaténation
La concaténation consiste à regrouper
>>> ‘Hello’ + ‘ ’ + ‘world’ + ‘ !’
plusieurs chaînes en une seule.

En mettant la seconde à la suite de la


>>> mot1 = "Hello"
première et ainsi de suite. >>> mot2 = "world"
>>> mot1 + " " + mot2 + " !"
Hello world !
Chaîne de Caractères Brûte Raw String
\a appel(BEL)
>>> print( " mot1 \n mot2 ")
\b retour en arriére
\n retour à la ligne >>> print("\u2764")
\t tabulation horizontale
>>> print(‘C:\nouveaudossier\test.py’)
\v tabulation verticale
\u2764 cœur >>> print(r‘C:\nouveaudossier\test.py’)
Pour éviter l’interprétation on rajoute r 12
Python
Fonctions et méthodes de chaînes

Quelques fonctions :
len(chaine) retourne le nombre de caractères de chaîne
str(nombre) convertit un nombre en chaîne

Quelques méthodes : .split() .join()

.find(sch,debut,fin) retourne l'indice du début de la sous-chaîne sch.


Si sch n'est pas trouvée, .find retourne -1

.count(chaine,debut,fin) retourne le nombre d'occurences de la sous-chaîne sch

.replace(s1,s2,nb) remplace toutes (ou seulement nb) occurrences de s1 par s2

.upper() et.lower() convertit tous les caractères respectivement en majuscules,


minuscules, ou inverse la casse 13
Python
Formatage
Le formatage permet de composer des chaînes de caractères incorporant des
données de types entier, flottant et chaîne.

La méthode format
La méthode .format définis dans la chaîne entre accolades { } , les
indicateurs de format permettent d’afficher les variables(même non définie).
>>> nom = "Abou" ; age = 35
>>> "Je m’appelle {1} et j’ai {0} ans".format(age ,nom)
Je m’appelle Abou et j’ai 35 ans

La méthode f string (Depuis Python 3.6)


La lettre f est placé devant la chaine de caractère, puis on met entre
accolades { } les variables que l’on souhaite substituer.
>>> nom = "Abou" ; age = 35
>>> f"Je m’appelle {nom} et j’ai {age} ans"
Je m’appelle Abou et j’ai 35 ans 14
Python
Instructions d’entrées/sorties

Les instructions d’entrées/sorties permettent à un programme Python


d’interagir avec l’utilisateur.

Ecrire sur la sortie standard


La fonction print() permet d'afficher la valeur d'une ou plusieurs variables.
Cette fonction print est dédiée à l'affichage uniquement.
>>> print("Hello world !")
Hello world !
Fonction type Built-in
Paramétré sep = ‘ ’ pour le séparateur par défaut
Paramétré end pour le caractère de fin de ligne.

help() ---- help(fonction)


Tout savoir sur une fonction
15
Python
Instructions d’entrées/sorties

Les instructions d’entrées/sorties permettent à un programme Python


d’interagir avec l’utilisateur.

Lire au clavier
La fonction input() affiche une invite et récupère les caractères saisis par
l’utilisateur.
Cette fonction renvoie la chaîne de caractères contenant la saisie de
l’utilisateur.
>>>input()
>>> x = input()
>>> nom = input("Entrez votre nom: ")
>>> age = int(input("Entrez votre age: "))

16
Python
Anticipons un peu !!!

Instruction de Contrôle
Tester une condition en fonction du résultat du test faire une action.
Conditionnelle Simple Si condition 1 alors
Conditionnelle Double Instruction 1
Sinon Si condition 2 alors
Conditionnelle Multiple Instruction 3
...
Sinon
Instruction 2

Les Fonctions
def nom_fonction( paramétre 1 , ...) :
Définition Instruction1
Appel ...
return
nom_fonction( paramétre 1 , ...) 17
Python
Instructions d’entrées/sorties

Merci

Vos attentes pour ce cours ?

Instruction de Contrôle – Types Structurés


Next Step
Fonction et Cryptographie

Vos Questions sur Whatsapp !

18
Python
TD
Exercice 1
Sur IDLE
Demander à l’utilisateur d’entrée la valeur de deux variables nommé x et y
ensuite échanger puis afficher leur valeur.

Notre premier fichier.py


Faire le même travail dans un fichier nommé switcheur.py

Enfin les fonctions


Faire le même travail avec une fonction nommée switch qui prends en paramétre
les deux variables à échanger.

19
Python
TD
Exercice 2
Ce projet de la calculatrice reviendra dans la suite du cours sous
différentes formes, à chaque fois avec une petite difficulté supplémentaire.

Dans la première version de ce projet, vous allez devoir créer une


calculatrice en ligne de commande qui demande à l'utilisateur de saisir deux
nombres et qui affiche ensuite le résultat de l'addition de ces deux nombres.

Dans la deuxième version de ce projet, vous allez devoir créer la


calculatrice toujours en ligne de commande qui demande à l'utilisateur de
saisir deux nombres et un opérateur mathématique pour afficher le résultat de
l’opération de ces deux nombres.

19
Python
Note

Erreur
Syntaxique
Manière d’écrire

Exécution

Respecter les règles sur les types

Coin recherche Module vs Fonction


C’est quoi un module ? Que fait le module random ?
A quoi servent les fonctions randint, uniform, randrange ?
19
Python
TD
IMPORTANT - Quelques erreurs à éviter
Il est important de ne pas créer de noms de variables qui pourraient rentrer en conflit
avec des instructions de Python.
Il est donc fortement déconseillé (même si c'est possible et que Python ne vous
empêchera pas de le faire) de créer une variable print = 5 par exemple.
La même règle s'applique aux modules !
Dans les prochaines parties, je vous présente plusieurs modules, comme le
module random.
Plusieurs étudiants ont donc créés un fichier random.py pour tester ce module.
🚨 Ce faisant, vous allez écraser le module random de Python !
Quand vous allez faire import random, Python importera votre fichier au lieu du fichier
random.py qui est contenu dans les sources de Python.
Vous aurez donc logiquement une erreur qui vous indique que les fonctions que vous
souhaitez utiliser n'existent pas

19
Python
La Programmation Autrement
Chapitre 2
Type Structurées et Instruction de Contrôle

A. GUEYE agueye@isepdiamniadio.edu.sn 775099564


Instructeur
Python
Structure de données
Les types prédéfinis sont insuffisants pour traiter des données plus
complexes.
Ainsi Python offre d’autres types de bases appelés les conteneurs.
Ces derniers sont des objets destinés à contenir d’autres types d’objets. On
peut en citer les plus importantes :

ü Les listes
ü Les tuples
ü Les dictionnaires
ü Les ensembles

0
Python
Listes
Une liste permet de stocker (les référence des objets) une séquence
dynamiquement modifiable d'éléments hétérogènes.
Les listes sont des types mutables.
Les éléments sont indicés par des entiers commençant à partir de 0.
Li

Création d’une liste


On utilise les crochets [elem0,elem1,…] pour définir le contenu d'une liste.
On peut créer une liste vide avec des crochets vides [ ] ou avec la fonction
list(). >>> maListe = [7, 3.4,"b","hello"]
🚨 list ne doit être nom de variable
!",True]
>>> ] »
listeVide1 = []
Adressage
Pour accéder au contenu d'une liste, on indique l’indice de l’élément entre
crochets [].
>>> maListe[1]
Pour modifier un élément de la liste, on indique l’indice de l’élément
entre crochets [] suivi de la nouvelle affectation.
>>> maListe[0] = 7 0
Python
Listes
Insertion
Pour insérer un élément à la fin de la liste, on emploie la méthode .append().
>>> Liste.append(5)
Par contre si l’on veut spécifier la position exacte de l’insertion on
utilise la méthode .insert().
>>> Liste.insert(2, "Mbisto")
Pour insérer plusieurs éléments on utilise
- la méthode .extend() >>> Liste.extend(["Cody", 23, 5])
- ou la concaténation. >>> Liste += ["Seck", "Thiane"]
Opération couteux pour l’insertion
Suppression
Pour supprimer un élément d’une liste avec la fonction del()
>>> del(Liste[5])
On peut préciser à la méthode .remove() la valeur de l’élément à supprimer,
>>> Liste.remove("Seck")
soit préciser à la méthode .pop() l’indice de l’élément à supprimer.
.pop() retourne l’élément supprimé. >>> Liste.pop(1) 0
Python
Listes
Méthodes et fonctions sur les listes
On peut appliquer plusieurs méthodes et fonctions aux éléments d’une liste
parmi lesquelles :
>>> len(Liste)
len() renvoie la taille d’une liste. >>> max(Liste)
min(),max() renvoient respectivement la valeur minimale, maximale de la liste.
.index(elem) renvoie l’indice de la première occurrence d’un élément.
.sort() ordonne dans l’ordre croissant >>> Liste.index(5)
.reverse() renverse une liste >>> Liste.reverse()
.clear() pour vider la liste

Slicing
Forme avancée de l'indexation pour d'accéder aux éléments par intervalles et
tranches.
>>> Liste[1:3:1]
Sa syntaxe générale est :
>>> Liste[:3:2]
nomListe[debut:fin:pas].
>>> Liste[1::1] 0
Python
Listes
Listes multidimensionnelles

Pour créer des listes à deux dimensions, on peut appliquer l’imbrication de


listes. Et pour accéder aux éléments de listes on précise dans l’ordre les
indices de l’élément.
>>> liste2D = [[1,2,3], [4,5,6], [7,8,9]]
>>> liste2D[1][2]
6
>>> liste2D[1]
[4, 5, 6]
Nous verrons plus loin comment utilise-t-on les listes simples et
multidimensionnelles pour représenter des vecteurs et des matrices.
Cela permet notamment d’implémenter des algorithmes d’opération d’algèbre
linéaire.
ShalowCopy vs DeepCopy
0
Python
Listes
Exerçons nous un peu

0
Python
Listes
Exerçons nous un peu

Code

Remplir

0
Python
Tuples
Le tuple Python est l'implémentation en lecture seule de la liste, c'est-à-
dire une collection immuable (non modifiable) d'éléments hétérogènes.
Les tuples possèdent les mêmes méthodes que la liste, à l'exception de
celles permettant une modification.
>>> unTuple = 1, 3.14 , "Seck"
Les tuples s’utilisent de la même manière que les listes, mais leur parcours
est plus rapide.
Ils consomment moins de mémoire.
Les tuples sont utiles pour définir des constantes.

On peut transformer une liste en Tuple et vice versa avec respectivement les
fonctions list() et tuple().

0
Python
Dictionnaires
Un dictionnaire est une structure de données dite associative, car elle
permet de stocker une valeur en lui associant une clé.

Création d’un dictionnaire


Syntaxiquement, on utilise les accolades {} pour définir les éléments du
dictionnaire, c'est-à-dire les paires clé : valeur.
>>> monDict = {'nom': "Abou", 'age': 35, 'famille' : ["Gueye", "Paye"]}
On peut également créer un dictionnaire par élément après élément.
>>> monDict = {}
🚨 les clés sont uniques >>> monDict['nom'] = "Saly"
>>> monDict['age'] = 63
>>> monDict['famille'] = ["Gueye", "Diagne"]

Ou encore en utilisant le constructeur dict() :


>>> monDict = dict(nom = "Saly", age = 63, famille = ["Gueye", "Diagne"])
0
Python
Dictionnaires
Adressage
L'accès à une valeur du dictionnaire s'effectue en lui passant entre crochets
[ ] la clé correspondante.
>>> monDict['nom']
'Saly'
🚨 .get() permet d’afficher un message si la clé n’existe
>>> monDict.get(‘Taille’) # Retourne None
>>> monDict.get(‘Taille’, " La clé Taille n’existe pas ")
Pour modifier la valeur d’un dictionnaire, on associe à la clef
correspondante la nouvelle valeur.
>>> monDict['age'] = 5
Fusionner deux dictionnaires
Pour fusionner deux dictionnaires, on utilise la méthode .update().
>>> monDict.update({'proprietaire': "Moussa", 'couleur': "Bleu"})
0
Python
Dictionnaires
Suppression
Pour supprimer une paire (clé, valeur) on emploie
la fonction del() >>> del(monDict["age"])
ou la méthode .pop(). >>> monDict.pop("age")

🚨 Dupliquer les données d’une liste, d’un dictionnaire


Pour dupliquer les données d'une liste List1
>>> List2 = List1 n'effectue pas de copie des données
# les 2 variables List1 et List2 référenceront en effet la même liste.
Pour recopier les données d'une liste ou d’un dictionnaire, on peut
appliquer les méthodes suivantes :

List2 = list(List1)
Dict2 = dict(Dict1)
0
Python
Dictionnaires
Méthodes .keys(), .values() .items()
Méthode .keys() retourne un objet contenant l’ensemble des clefs des éléments
d'un dictionnaire. Méthode très utilisée dans les boucles for.
>>> monDict = dict(nom="Coumba", age=30, famille=["Diop","Wade"])
>>> clefs = monDict.keys() #dict_keys(['nom', 'age’, 'famille'])

Méthode .values() retourne un objet contenant l’ensemble des valeurs des


éléments d'un dictionnaire. Méthode très utilisée dans les boucles for.

valeurs = monDict.values()
#dict_values(['Coumba', 30, [' Diop’, ‘ Wade ']])

Méthode .items() retourne un objet contenant l’ensemble des paires


(clefs,valeurs) des éléments d'un dictionnaire.
Cette méthode est très utilisée dans les boucles for.

paires = monDict.items()
#dict_items([('nom','Coumba'), ('age',30), ('famille',['Diop’,’Wade'])]) 0
Python
Dictionnaires
Exerçons nous un peu

0
Python
Structure de contrôle
Les structures de contrôle décrivent l’enchaînement des instructions. Elles
permettent des traitements séquentiels, conditionnels ou répétitifs
(itératifs).

Dans les langages impératifs tels que le Python, les instructions d’un même
bloc sont exécutées séquentiellement, c’est-à-dire, les unes après les
autres, donc dans l’ordre où elles sont écrites.

Les blocs d’instructions sont matérialisés par leur indentation (décalage


depuis la marge de gauche). C’est par exemple ce que nous avons fait pour
définir le corps de fonctions.

Nous avons déjà travailler avec des programmes écrits dans des fichiers
source.

0
Python
Structure de contrôle
Exécution conditionnelle if - elif – else
L'exemple ci-dessous illustre la forme complète de cette structure. Les parties
elif et else sont facultatives.
Si condition 1 alors if condition 1 :
Instruction 1 Instruction 1
Sinon Si condition 2 alors elif condition 2 :
Instruction 3 Instruction 3
... ...
Sinon else:
Instruction 2 Instruction 2

Pour des tests multiples, on peut bien entendu cascader plusieurs parties elif.
Notez bien la présence du caractère : (double point) précédant le début de
chaque bloc.
L’indentation permet de définir les blocs d’instructions pour un code lisible.
🚨 Pas forcer de finir avec un else .
else est rattaché au dernier if de même niveau d’indentation 0
Python
Structure de contrôle
Opérateur Ternaire
Permet l’écriture de la structure conditionnelle en une ligne.

if age > 18 :
Majeur = True
Majeur = True if age > 18 else False
else:
Majeur = False

🚨 Attention ne fonctionne qu’avec des opérateur de type if … else.

0
Python
Structure de contrôle
Exerçons nous un peu
Code

0
Python
Structure de contrôle
Instruction match
• Pour écrire des instructions de commutation
avec la fonction de correspondance des motifs
structurels, vous pouvez utiliser la syntaxe ci-contre :

• Exemple d'instruction de commutateur écrite


avec la syntaxe du cas de correspondance est indiqué
ci-dessous. C'est un programme qui imprime ce que
vous pouvez devenir lorsque vous apprenez différents
langages de programmation :
0
Python
Structure de contrôle
Exerçons nous un peu
Code

0
Python
Boucle
La fonction range(début, fin, pas) crée une séquence de nombres entiers notamment
utilisable par boucle for:
début ≤ nombre ≤ fin-1 si le pas est positif,
début ≥ nombre ≥ fin+1 si le pas est négatif.
Par défaut, les paramètres début et pas prennent respectivement les valeurs 0 et 1.
>>> range(10) # retourne [0,1,2,3,4,5,6,7,8,9]
>>> range(2,10) # retourne [2,3,4,5,6,7,8,9]
>>> range(1,10,2) # retourne [1,3,5,7,9]
La fonction enumerate(sequence) retourne l'indice et la valeur des éléments d'une
séquence (liste, tuple…). Cette fonction est également très utilisée dans les
boucles for.
Seq1.star sans parenthèse !
Seq1.step seq = [1, 3, 12, 10, 2]
Seq1.stop enum = enumerate(seq) # (0, 1), (1, 3), (2, 12), (3, 10), (4, 2)
🚨 Pas forcer de finir avec un else aussi else est rattaché au dernier if de même
niveau d’indentation 0
Python
Boucle
Boucle for Boucle while
La boucle for permet d’exécuter une La boucle while permet d'exécuter un
séquence d’instructions un nombre connu bloc d'instruction aussi longtemps que
de fois. Il est ainsi possible de la condition (expression logique) qui
parcourir élément par élément une lui est appliquée est vraie.
structure de données itératives. Pour
itérer sur une suite de nombres entiers, i = 0 # initialiser pour entrer dans la boucle
on utilise souvent la fonction range(). while i < 5 :
for i in range(5): print(i)
print(i) i += 1# incrémenter: évite une boucle infinie
Continue permet d’aller à l’itération 🚨 Si la condition est toujours vraie
suivante cela engendre une boucle infinie.
for i in “Python3.10 is the best.” :
while True :
if i.isdigit() :
n = int(input(“ Entrer un chiffre”))
continue
if n in range(10) :
print(i, end = ’’)
break
Break arrête la boucle ! 0
Python
Boucle
Les boucles peuvent être terminer La boucle while aussi.
avec une clause else i = 0
Avec la boucle for while i <= 10 :
for i in [1,91,5,11,24,7,85]: if sqrt(i).isdigit() :
if i%2 == 0 : print(“On a carré!”)
print(“ On a un nombre paire.”) break
break i += 1
else: else:
print(“Pas de nombre paire !”) print(“Pas carré dans la liste !”)
Liste en compréhension -------------- Code équivalant
L = [1,91,5,11,24,7,85] L = [1,91,5,11,24,7,85]
[i for i in L if i%3 != 0 ] Liste = []
Avec if … else for i in L :
if i%3 != 0 :
L = [1,91,5,11,24,7,85] liste.append(i)
[i if i%3 != 0 else 0 for i in L ] print(liste) 0
Python
Boucle
Any et All
any retourne True si la liste contient all retourne True si tout booléen de la
au moins un booléen True liste est à True
any([False , True , False , False]) all([False , True , False , False])

age = [1,91,5,71,24,7,85] note = [12,10,18,11,15,17,14]


B = any([for i in age if 70>= i >80]) B = all([for i in note if i > 10])
if B : if B :
print(“On a un septuagénaire !”) print(“Pas de sous Moyenne !”)

0
Python
TD
Exerçons nous
Pour vous aider un peu

19
Python
TD
Exerçons nous
Pour vous aider un peu
Demander à un utilisateur d’entrer une adresse et un masque :
Analyser l’adresse puis donner :
- si l’adresse est valide
- La classe de l’adresse
- Le type d’adresse (IPv4 – IPv6)
- La partie hôte
- La partie réseau
- La première adresse de ce sous réseau
- La dernier adresse de ce sous réseau
- L’adresse de diffusion

19
Python
TD
Projet 1
Reprendre le TP sur le VLSM avec une implémentation !

19
Python
TD

Exercice 1 : Calcul du discriminant

Un élève de seconde S veux résoudre une équation du second degré dans IR:
1. Ecrire un code qui récupère les coefficients de l’équation.
2. Afficher l’équation ainsi obtenue.
3. Calculer le discriminant puis afficher le.
4. Utiliser une expression pour voir si Delta est positif ou non.
5. Afficher les solutions.

19
Python
TD
Exercice 2 : Interaction utilisateur, nombres entiers et chaînes de caractères

1. Écrire un programme qui demande à l'utilisateur son année de naissance et qui


affiche son âge. L'année courante sera mise dans une variable.
2. Ecrire un programme qui pourra trouver puis afficher tous les nombres compris
entre 200 et 320 qui sont divisibles par 7 mais ne sont pas multiples de 5.
3. Ecrire un programme qui demande à l'utilisateur d'introduire une valeur et qui
affiche la décomposition en unité, dizaine, centaine et millier de cette valeur.
4. Ecrire un programme qui demande à l'utilisateur de saisir un nombre compris
entre 1 et 10. La demande se fera tant que l'utilisateur saisie des valeurs
incorrectes ?
5. Ecrire un programme Python qui demande à l'utilisateur de saisir un nombre
entier N. Tant le nombre saisi n’est pas un entier, refaire la demande, sinon
donner la somme des entiers de [1, 𝑁[ qui sont divisibles par 3 ou 5.

6. Ecrire un programme qui demande à l’utilisateur de saisir une phrase et qui


affiche le nombre de lettres et de chiffres contenus dans la phrase.
19
Python
TD
Exercice 3 : Manipulation des listes
Définir la liste : 𝐿 = [17, 38, 10, 25, 72, 32, 1, 64, 8], puis effectuez les
actions suivantes :
− Afficher le premier élément, les deux premiers éléments, le dernier élément, les
deux derniers éléments.
− Insérer l’élément 12 entre les éléments 10 et 25;
− Affichez l’indice de l’élément 17, du plus grand et du plus petit nombre ;
− Enlevez l’élément 38 et affichez la liste ;
− Affichez la sous-liste du 2e au 3e élément ;
− Affichez la sous-liste du début au 2e élément ;
− Affichez la sous-liste du 3e élément à la fin de la liste ;
− Ajouter la valeur 11 à la fin de la liste ;
− Ajouter les valeurs 12 et 13 à la fin de la liste ;
− Ajouter la valeur 1 à chacun de ses éléments ;
− Trier la liste dans l’ordre croissant, puis décroissant ;
− Construire la liste "pairs« des nombres pairs de L et la celle "impaire"
19
Python
TD
Exercice 4 : Saisie mot de passe fort

Un site web exige que les utilisateurs saisissent un nom d’utilisateur et un


mot de passe pour s’inscrire.
Ecrire un programme qui vérifie la validité du mot de passe saisi suivant les
critères suivants :
− Une taille minimale de 8 caractères
− Une taille maximale de 12 caractères
− Au moins une lettre minuscule
− Au moins une lettre majuscule
− Au moins un chiffre
− Au moins l’un des caractères spéciaux $@#

Tant que la saisie du mot de passe est invalide, inviter l’utilisateur à


19
saisir à nouveau un mot de passe, sinon afficher un message de succès.
Python
TD
Exercice 5 : Filtrage de liste
Soit une liste : 𝑣𝑎𝑙𝑠 = [ 1, 5, −3, 8, 9, −4, −2, 7 ]
Écrire une boucle qui remplace, directement dans la liste vals, toutes les
valeurs négatives par leur carré. Après l’exécution de la boucle, la liste
devrait donc contenir : [1, 5, 9, 8, 9, 16, 4, 7]

Exercice 6 : Manipulation des dictionnaires


Soit le dictionnaire D = {'nom': 'Diop', 'prenom': 'Jacque', 'age': 30}
− Corriger l'erreur dans le prénom, la bonne valeur est 'Jacques'.
− Afficher la liste des clés du dictionnaire.
− Afficher la liste des valeurs du dictionnaire.
− Afficher la liste des paires clé/valeur du dictionnaire.
− Ecrire la phrase "Jacques Diop a 30 ans". 19
Python
TD
Exercice 7 : Générateur de dictionnaire
Soit un nombre entier 𝑛 donné, écrire un programme qui génère un dictionnaire contenant
les paires (𝑐𝑙𝑒𝑓 , 𝑣𝑎𝑙𝑒𝑢𝑟) = (𝑖 , 𝑖 2) où 𝑖 est un nombre compris entre 1 et 𝑛 .
Exemple : pour n = 8, on aura {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}.

Exercice 8 :
Soit la phrase : P = « Bienvenu au cours ‘ the True python’. »
Afficher les méthodes qui s’appliquent aux chaines de caractères.
1. Effacer les espaces avant et après la phrase.
2. Donner le nombre de caractère de P puis l’écrire en majuscule, puis sous format
titre.
3. Dans P remplacer les espaces par des virgules puis les stocker dans P1 .
4. Créer une liste L des mots de P1.
5. Quelle est la positon du deuxième T dans P ? Expliquer le résultat.
6. Dans la liste L ajouter le booléen True. Vérifier si 1 est dans la liste L ?
7. Remplacer les ‘e’ par ‘i’. 19
Python
TD
Exercice 8 :
Soit la phrase : P = « Bienvenu au cours the true python. »
Afficher les méthodes qui s’appliquent aux chaines de caractères.
1. Effacer les espaces avant et après la phrase.
2. Donner le nombre de caractère de P puis l’écrire en majuscule, puis sous
format titre.
3. Dans P remplacer les espaces par des virgules puis les stocker dans P1 .
4. Créer une liste L des mots de P1.
5. Quelle est la positon du deuxième T dans P ? Expliquer le résultat.
6. Dans la liste L ajouter le booléen True. Vérifier si 1 est dans la liste L
?
7. Remplacer les ‘e’ par ‘i’.

19
Python
TD
Exercice 9 : authentification via dictionnaire
On donne un extrait des logins d’accès au réseau du lycée :

Identifiant Mot de passe


ablaye P@sser123
alassane $m@m@n2
isabelle mignone#02

− Créer un dictionnaire contenant les couples identifiant/mot de passe ci-dessus.


Un identifiant correspondra à une clef du dictionnaire et un mot de passe à une
valeur du dictionnaire.
− Inviter un utilisateur à saisir son identifiant et son mot de passe. Tant que
l’utilisateur saisit un couple identifiant/mot de passe erroné, inviter le à
refaire une autre tentative, sinon afficher un message de succès.

Amélioration du programme
− Pour chaque tentative erronée, indiquer à l’utilisateur le nombre de tentatives
restantes.
On supposera que le nombre de tentatives maximal est de 3.
− Si le nombre de tentatives s’épuise, ne plus proposer une nouvelle saisie.
19
Python
Projet

Mini Projet 2
Dans ce projet, tu vas devoir créer un programme en ligne de commande qui permet
de manipuler une liste de courses.
Demander à l'utilisateur de choisir parmi une de ces action en entrant un nombre
de 1 à 5. Le programme doit permettre de réaliser 5 actions :
1. Ajouter un élément à la liste de courses
2. Retirer un élément de la liste de courses
3. Afficher les éléments de la liste de courses
4. Vider la liste de courses
5. Quitter le programme
Gérer le cas de figure où l'utilisateur ne rentre pas un nombre compris entre 1 et
5 ou s'il rentre par exemple des lettres ou un autre symbole invalide.
Dans ce cas, afficher de nouveau le menu avec les options disponibles, jusqu'à ce
que l'utilisateur choisisse une option valide.
Dans ce projet sauvegarder la liste dans un fichier ou une base de donnée.
Le but ici est juste d'interagir avec l'utilisateur et de manipuler une liste en
fonction de son choix.
19
Python
Projet
Mini Projet 3
Le but de ce projet est de créer un jeu de rôle textuel dans le terminal.
Le jeu comporte deux joueurs : vous et un ennemi.
Vous commencez tous les deux avec 50 points de vie.
Votre personnage dispose de 3 potions qui vous permettent de récupérer des
points de vie.
L'ennemi ne dispose d'aucune potion.
Chaque potion vous permet de récupérer un nombre aléatoire de points de vie,
compris entre 15 et 50.
Votre attaque inflige à l'ennemi des dégâts aléatoires compris entre 5 et 10
points de vie.
L'attaque de l'ennemi vous inflige des dégâts aléatoires compris entre 5 et
15 points de vie.
Lorsque vous utilisez une potion, vous passez le prochain tour.
19
Python
Projet
Mini Projet 3
Déroulé de la partie 1/1
Lorsque vous lancez le script, vous devez demander à l'utilisateur s'il souhaite
attaquer ou utiliser une potion :
"Souhaitez-vous attaquer (1) ou utiliser une potion (2) ? "
Cette phrase sera demandée à l'utilisateur au début de chaque tour.
? Si l'utilisateur choisi la première option (1), vous infligez des points de dégât à
l'ennemi.
Ces points seront compris entre 5 et 10 et déterminés aléatoirement par le programme.
? Si l'utilisateur choisi la deuxième option (2), vous prenez une potion.
Les points de vie que la potion vous donne doivent être compris entre 15 et 50 et
générés aléatoirement par le programme Python.
Vous devez vérifier que l'utilisateur dispose de suffisamment de potion et décrémenter
le nombre de potions qu'il a dans son inventaire lorsqu'il en boit une. Si
l'utilisateur n'a plus de potions, vous devez lui indiquer et lui proposer de nouveau
de faire un choix (attaquer ou prendre une potion).
19
Python
Projet
Mini Projet 3
Déroulé de la partie 1/2
Quand le joueur prend une potion, il passe le prochain tour.
Une fois l'action du joueur exécutée, et si l'ennemi est encore vivant, il vous
attaque. Si l'ennemi est mort, vous pouvez terminer le jeu et indiqué à
l'utilisateur qu'il a gagné ?
L'attaque de l'ennemi inflige des dégâts au joueur compris entre 5 et 15, là
encore déterminés aléatoirement par le script.
Si vous n'avez plus de points de vie, le jeu se termine et vous avez perdu la
partie.
À la fin du tour, vous devez afficher le nombre de points de vie restants du
joueur et de l'ennemi.
Toutes ces opérations se répètent tant que le joueur et l'ennemi sont en vie.
À chaque tour, vous attaquez en premier. Il ne peut donc pas y avoir de match nul.
Si lorsque vous attaquez, votre attaque fait descendre les points de vie de
l'ennemi en dessous (ou égal à) 0, vous gagnez la partie sans que l'ennemi n'ait
le temps de vous attaquer en retour.
19
Python
La Programmation Autrement
Chapitre 3
Fonctions, Modules et Données Persistantes

A. GUEYE agueye@isepdiamniadio.edu.sn 775099564


Instructeur
Python
La programmation modulaire
Pour écrire un programme, on a généralement besoin d’éléments qui ont déjà
été définis et rangés dans des modules pour qu’ils puissent être réutilisés.
Un programme est généralement composé de sous-programmes qui permettent au
programmeur de structurer son programme.

Fonctions : sous programme auquel on fait appel pour exécuter des


instructions bien spécifiques éventuellement en s’aidant de paramètres
d’entrées et en retournant à la fin de son exécution des données de sorties.

- Intégré
3 Type de Fonction – Modulaire
- Définie

Modules : Ensemble de fonctions ou de classes offrant des fonctionnalités


relatives à un domaine spécifique. Leur utilisation permet au programmeur de
gagner en productivité en lui ménageant l’effort d’implémenter par lui-même
certaines fonctionnalités dont il aura besoin. 0
Python
Les fonctions

De façon générale, on implémente une fonction lorsqu'un ensemble


d'instructions est susceptible d'être utilisé plusieurs fois dans un
programme. Cette décomposition en petites unités conduit à du code plus
compact, plus lisible et plus efficace.

def sommeProduit(n1, n2):


""" Fonction calculant somme et produit de n1 et n2 Résultat
retourné dans un tuple (somme, produit) """
somme = n1+n2
produit = n1*n2
return (somme, produit)
def sommeProduit(n1, n2): définit le nom de la fonction, suivi entre
parenthèses de ses éventuels arguments séparés par des virgules, cette ligne
doit se terminer par ":"
Les instructions de la fonction constituent ensuite un bloc qui doit être
indenté à droite.
Return (somme, produit) permet de sortir de la fonction en renvoyant des
données de retour sous forme de tuple. 0
Python
Les fonctions
Appel de fonctions
Lors de l’appel de la fonction on doit, en plus de préciser le nom de la
fonction, renseigner l’ensemble des arguments de la fonction.
>>> resultat = sommeProduit(2, 5)
>>> print(resultat)
7

Pour voir plus de détails sur le fonctionnement de la fonction, appelé


docstring, grâce à la commande help(nom_fonction).

0
Python
Les fonctions
Portée des variables
La portée est le périmètre dans lequel un nom (de variable, fonction...) est connu
(visible) et utilisable. Sous Python, cela est lié au concept d'espaces de noms :
namespaces. C'est ainsi que :

Les variables locales, définies dans le corps d'une fonction ne sont pas
accessibles en dehors du corps de la fonction.
Ces variables sont supprimées de la mémoires à la fin de
l’exécution de la fonction.

Les variables globales, définies en dehors du corps d'une fonction, sont visibles
dans les fonctions appelées, mais ne sont par défaut modifiables. En outres, si
l’on définit dans le corps de la fonction une variable de même nom, alors la
variable globale est ignorée.

Les fonctions peuvent cependant modifier des variables globales en utilisant


l'instruction
global nomVariable. 0
Python
Les fonctions
Les modules
Un module Python est un fichier rassemblant des fonctions et classes relatives
à un certain domaine. L’accès aux fonctions d'un module peut se faire de
différentes manières.
On obtient l'accès direct à l'ensemble des fonctions du module indiqué sans
devoir les préfixer par le nom du module. from nomModule import *
On ne souhaite l'accès seulement qu’aux fonctions func1, func2 du module
from nomModule import func1, func2
On a accès à toutes les fonctions du module, mais seulement en les préfixant
du nom du module. import nomModule
Toutes les fonctions du module sont accessible en les préfixant du nomLocal
que l'on s'est défini.
import nomModule as nomLocal

0
Python
Les fonctions
Modules
Il est conseillé d’utiliser les deux dernières méthodes. La première méthode
ne devrait en principe pas être utilisée, car elle présente le risque
d'écrasement d'objets si les différents modules chargés et/ou votre programme
implémentent des objets de noms identiques.
import math from math import sqrt
math.sqrt(9) sqrt(9)
On peut aussi utiliser la méthode d’alias qui permet d’utiliser un nom local
du module, mais en plus court. import sqlite3 as sql
bd = sql.connect('...')
Il est possible d’afficher l’ensemble des méthodes d’un module en utilisant la
fonction dir qui retourne la liste de toutes les méthodes d’un module.
import math
dir(math)
help(module.nomFonction) permet d’afficher le texte d’aide relative à la
méthode ou fonction passée en paramètre. help(math.sqrt) 0
Python
Les fonctions
Gérer le temps avec le module time
Le module time est constitué uniquement de méthodes et d’attributs relatifs au
temps et aux dates. Ce module propose entre autres les méthodes suivantes :
.time() : renvoie le nombre de secondes écoulées depuis le 01/01/1970 à 00:00:00
time.time()

.sleep(t) : met en pause le programme python pour une durée t secondes.


time.sleep(15)

.localtime() : renvoie un objet contenant entre autres sous forme numérique


l’année (tm_year), le mois (tm_mon), le jour (tm_mday), l’heure (tm_hour), la
minute (tm_min), la seconde (tm_sec)…
>>> time.localtime()
time.struct_time(tm_year=2022, tm_mon=1, tm_mday=31, tm_hour=13,
tm_min=12, tm_sec=11, tm_wday=0, tm_yday=31, tm_isdst=0)
0
Python
Les fonctions
Les exceptions
Les exceptions représentent le mécanisme standard de notification des erreurs
d'exécution dans un programme. Python utilise un ensemble d’instructions qui
permettent d’intercepter une erreur et d’exécuter une portion de script
spécifique de cette erreur. >>> 1/0
ZeroDivisionError: division by zero
Python va lever une exception pour les cas suivants :
>>> l = ['alpha', 'beta', 'gamma'];l[4]
IndexError: list index out of range

>>> import mathematiques


ModuleNotFoundError: No module named 'mathematiques'

>>> int("chaine de caractere")


ValueError: invalid literal for int() with base 10: 'chaine de caractere' 0
Python
Les fonctions
Attraper une exception avec try ... except
Le bloc d’instructions qui suit directement une instruction try est exécuté
par Python sous réserve. Si une erreur survient pendant l’exécution de l’une
de ces instructions, le programme ne se plante pas, à la place le code inclus
dans le bloc qui suit l’instruction except est exécuté.

entree = input("Entrez votre age: ")


Entrez votre age: 45
try:
Vous etes age de 45 ans.
age = int(entree)
print("Vous êtes agés de ", age, "ans.")
except:
print("Entree invalide ! Veuillez entrer un nombre")
Entrez votre age: douze ans
Entree invalide ! Veuillez entrer un nombre

0
Python
Les fonctions
Amélioration de la forme try…except
C’est généralement pas conseillé d’utiliser la forme try…except pour gérer une
exception, cette forme capture tout un tas d’erreurs auxquels on a pas pensé,
ce qui peut masquer certains bugs sur le programme. On ne pourra jamais
découvrir la cause exacte du problème.

On préfèrera donc indiquer de manière explicite le type d’exception que l’on


souhaite capturer.

Ci-dessous, on ne va s’intéresser qu’aux erreurs liées à la conversion d’une


chaine en entier. Le type d’exception à attraper sera alors ValueError.
entree = input("Entrez votre age: ")
Try:
age = int(entree)
print("Vous etes age de ", age, "ans.")
except ValueError:
0
print("Entree invalide ! Veuillez entrer un nombre")
Python
Les fonctions
Afficher l’exception de Python La forme try…except…else
On peut afficher le message d’erreur Dans un bloc try…exept…else,
de Python lorsqu’on attrape une l’instruction else va permettre
exception. Cela se fera avec le mot d'exécuter une action si aucune erreur
clef Exception. ne survient dans le bloc.
entree = input("Entrez votre age: ") entree = input("Entrez votre age: ")
try: try:
age = int(entree) age = int(entree)
print("Vous etes age de ", age, "ans.") except:
print("Entree invalide ! Veuillez entrer un nombre") else:
except Exception as e: print(e)
print("Vous etes age de ", age, "ans.")
Entrez votre age: douze ans Entrez votre age: 45
invalid literal for int() with base 10: 'douze ans' Vous etes age de 45 ans.
Entrez votre age: douze ans
Entree invalide ! Veuillez entrer un nombre
0
Python
Les fonctions
Le mot clé pass Lever ses propres types exceptions
Il peut arriver, dans certains cas, que Il est possible de créer nos propres
l'on souhaite tester un bloc types d’exception. Dans ce cas pour
d'instructions… mais ne rien faire en lever l’exception, on utilise le mot-clé
cas d'erreur. On peut utiliser le mot raise suivi du type de l'exception.
clé pass dans ce cas.

entree = input("Entrez votre age: ") entree = input("Entrez votre age: ")
try: age = int(entree)
age = int(entree) if age > 0:
print("Vous etes age de ", age, "ans.") print("Vous etes age de ", age, "ans.")
except:
else :
pass
raise ValueError("l'age saisie est négative ou nulle")
Entrez votre age: 45
Vous etes age de 45 ans.
Entrez votre age: 45
Entrez votre age: douze ans Vous etes age de 45 ans.
Entrez votre age: -15
ValueError: l'age saisie est négative ou nulle 0
Python
Données Persistantes
Persistance de données avec Python
Pour stocker les résultats d’un programme, pour restaurer des données ou pour
sauvegarder des paramètres de fonctionnement d’une application de manière
persistante, il est indispensable de savoir manipuler les systèmes de stockage
de données.
Une donnée persistante est donc conservée lorsque le programme est fermé ou
l’ordinateur éteint.
Python propose plusieurs outils pour faciliter la gestion des données au
niveau des systèmes de fichiers.

0
Python
Données Persistantes
Fichiers vs Base de données
Un système de fichier (FS, Files System) est considéré comme un moyen de
stockage de données non structurées, arbitraires et non relationnelles.

Au contraire, une base de données (DB, Database) est en générale utilisée pour
stocker des données structurées, relationnelles avec un format bien définis.

Les systèmes de fichiers sont plutôt optimisés pour le traitement basique,


tels que la lecture et l’écriture, sur de petites quantités de données. Dans
ce cas de figure les FS sont plus efficaces que les bases de données.

En somme, on remarque qu’il n’y a pas un meilleur système de stockage de


données, tout dépendra donc des besoins ou exigences de l’application.
0
Python
Données Persistantes
Encodage des fichiers
Un ordinateur manipule des flux bits.
Comment passer du flux de bit à la notion de lettre?
Décodage : découper le flux de bits en un certains nombre de blocs de taille
prédéfinie (Ex : en ASCII en la taille des blocs est de 7 bits) puis en déduire le
code.
Jeux de caractères : permet de faire la correspondance entre un code et une lettre
(caractère de façon de globale). Ex : en ASCII le code 99 correspond à la lettre c.
Codage : c’est l’opération inverse du décodage, c’est-à-dire transformer un
caractère en un bloc contenant un nombre de bits prédéfini.
Unicode : jeux de caractères qui a pour objectif de coder l’intégralité des
caractères du monde. Unicode utilise différent type de codage :
ü UTF8 : totalement compatible avec ASCII
ü Python est compatible avec UTF8

Dans la suite, nous utiliseront le jeux de caractère UTF8. 0


Python
Données Persistantes
Manipulation de fichiers

Les opérations de manipulation de fichier en Python se résume essentiellement par :

L’écriture (création) : consiste à écrire sur un support physique de stockage en


l’occurrence le disque dur de l’ordinateur.

Lecture (ouverture) : consiste à le charger dans la mémoire RAM de l’ordinateur.

Ces opérations peuvent se faire sur deux type de fichiers : les fichiers textes (basés
un encodage) et les fichiers binaires (basés sur une suite d’octet de 0x00 à 0xFF).
L’encodage ASCII permet de coder 256 caractères (8 bits) et par conséquent ne contient
pas tous les jeux de caractères. Par contre, le jeux de caractère Unicode permet
d’encoder tous les jeux de caractères connus.

0
Python
Données Persistantes
Ouverture : open()

Pour manipuler un fichier, il faut d'abord l'ouvrir, ce qui se fait avec le


constructeur open : fd = open(fichier, mode, encoding = encodage)
fd : (descripteur de fichier) retourné est un objet-fichier

fichier : est une chaîne définissant le nom du fichier, incluant son chemin d'accès

mode : est une chaîne définissant le mode d'accès

Les modes d'accès sont les suivants :

'r': accès en lecture seule ; erreur si le fichier n'existe pas.

'w': accès en écriture son contenu est écrasé; si le fichier n'existe pas, il est créé.

'a': accès en mode ajout, càd les écritures s'effectuent à la fin du fichier. Si le
fichier n'existe pas, il est créé.

'r+': accès en lecture et écriture

encoding : pour définir le type d'encodage, l'encodage par défaut est 'utf-8‘
0
Python
Données Persistantes
Fermeture : close()

Lorsqu’un fichier est ouvert par un programme, aucun autre programme ne pourra y
accéder. Il faut donc toujours fermer le fichier à la fin pour indiquer que le fichier
est accessible pour un autre usage. Sous Python, la fermeture du fichier s'effectue
logiquement comme suit :
fd.lose()
En cas d’erreur de manipulation du fichier ou encore un plantage du programme Python,
le fichier continuera à être ouvert, donc inaccessible pour le reste des programmes.
fd = open('mydocs.txt', 'w’)
fd.write("Hello world !")
Ecriture : write() fd.close()
Pour écrire dans un fichier, on utilise la méthode write() en lui passant en paramètre
la chaîne à écrire dans le fichier.

On peut ajouter au mode de lecture la préfixe b pour ouvrir le fichier en mode binaire,
et le préfixe t pour l’ouvrir en mode texte.

0
Python
Données Persistantes
Fermeture : close()

Lorsqu’un fichier est ouvert par un programme, aucun autre programme ne pourra y
accéder. Il faut donc toujours fermer le fichier à la fin pour indiquer que le fichier
est accessible pour un autre usage. Sous Python, la fermeture du fichier s'effectue
logiquement comme suit :

En cas d’erreur de manipulation du fichier ou encore un plantage du programme Python,


le fichier continuera à être ouvert, donc inaccessible pour le reste des programmes.
fd = open('mydocs.txt', 'w’)
fd.write("Hello world !")
Ecriture : write() fd.close()
Pour écrire dans un fichier, on utilise la méthode write() en lui passant en paramètre
la chaîne à écrire dans le fichier.

On peut ajouter au mode de lecture la préfixe b pour ouvrir le fichier en mode binaire,
et le préfixe t pour l’ouvrir en mode texte.

0
Python
Données Persistantes
Fichier JSON
L’instruction with dont le rôle est de définir un contexte au sortir duquel
certaines actions sont automatiquement exécutées. Cette méthode garantit la
fermeture du fichier même lorsque des erreurs surviennent lors de la
manipulation du fichier.
with open('mydocs.txt', 'r+') as fd:
# Opérations sur le fichier
Dans la suite, c’est cette technique qui sera retenue pour la manipulation des
fichiers.

0
Python
Données Persistantes
Lecture : read()

Pour la lecture d'un fichier, on dispose de deux méthodes :

.read() : déverse le fichier sur une seule chaîne, y compris les newline (\n)

.readlines() : déverse le fichier sur une liste qui contiendra autant d'éléments que de
lignes du fichier, chaque élément étant terminé par un newline ( \n )

fd = open('mydocs.txt', 'w’)
chaine = fd.read() # chaine = fd.rept(.read()) interprete la chaine brûte
chaine1 = fd.readline() # recupére la chaîne brûte avec les \n
chaine2 = fd.read().splitlines() # recupére la chaîne sous forme de liste
print(chaine)
fd.close()

Si le fichier est très volumineux, on peut alors utiliser la méthode de lecture par
paquets de nb_caract caractères, .read(nb_caract)

0
Python
Données Persistantes
Exploitation du système de fichiers
Python offre des fonctionnalités qui permettent d’interagir avec le système de
fichier, c’est-à-dire de se déplacer dans l’arborescence du FS, créer des
dossiers et fichiers, lister ou copier des fichiers… Pour ce faire, nous
aurons besoin d’importer le module os qui nous permet entre autres de :
• Manipuler les chemins
• Lister les fichiers et les dossiers
• Manipuler les fichiers et dossiers

with open('mydocs.txt', 'r+') as fd:


# Opérations sur le fichier

0
Python
Données Persistantes
Manipuler les chemins
Le module os contient une classe path proposant plusieurs fonctions de
manipulation de chemin. Les méthodes ci-dessous donnent une idée sur ce qui
est possible de faire.
basename(path) : retourne le dernier élément du chemin path.
>>> import os >>> import os
>>> path = r"C:\ISEPYTHON\DossierTest" >>> path = "C:\\ISEPYTHON\\DossierTest"
>>> os.path.basename(path) >>> os.path.basename(path)
"DossierTest" "DossierTest"
dirname(path) : retourne le répertoire parent du chemin path
>>> os.path.dirname(path)
'C:\ISEPYTHON'
exists(path) : test si le chemin path existe ou si on a une permission d’y
accéder
>>> os.path.exists(path)
0
True
Python
Données Persistantes
Manipuler les chemins
getsize(path) :
>>> os.path.getsize(path+"\\20180821_194206.jpg")
retourne la taille du fichier 2177247
(en octets) indiqué via son chemin path
isdir(path) : test si le chemin path est un dossier
>>> os.path.isdir(path)
True
>>> os.path.isdir(path+"\20180821_194206.jpg")
False
isfile(path) : test si le chemin path est un fichier
>>> os.path.isfile(path)
False
>>> os.path.isdir(path+"\20180821_194206.jpg")
True
0
Python
Données Persistantes
Exploitation du système de fichiers
Python offre des fonctionnalités qui permettent d’interagir avec le système de
fichier, c’est-à-dire de se déplacer dans l’arborescence du FS, créer des
dossiers et fichiers, lister ou copier des fichiers… Pour ce faire, nous
aurons besoin d’importer le module os qui nous permet entre autres de :
• Manipuler les chemins
• Lister les fichiers et les dossiers
• Manipuler les fichiers et dossiers

with open('mydocs.txt', 'r+') as fd:


# Opérations sur le fichier

0
Python
Données Persistantes
Lister les fichiers et les dossiers
La méthode os.listdir(path) permet de récupérer sous forme de liste l’ensemble
des éléments (fichiers et dossiers) inclus du répertoire path indiqué en
paramètre. >>> os.listdir(path)
['20180821_194206.jpg', 'Demain, dès l’aube.txt',
'galerie', 'le_corbeau_et_le_renard.txt’]

Le module glob permet sélectionner des fichiers et des dossiers correspondant


à un motif. Les éléments sélectionnés sont retournés sous forme de liste en
indiquant leurs chemins absolues.

>>> import glob


>>> glob.glob(path+"\\*.txt")
['C:\\ISIPYTHON\\DossierTest\\Demain, dès l’aube.txt',
'C:\\ISIPYTHON\\DossierTest\\le_corbeau_et_le_renard.txt']
0
Python
Données Persistantes
Manipuler les fichiers et les dossiers à l’aide du module os

Le module os offre plusieurs fonctions permettant de manipuler les fichiers et


dossiers.
mkdir(path) : créer le répertoire path. Si un ou plusieurs dossiers du
répertoire parent n’existe pas, une erreur sera retournée.
makedirs(path) : créer le répertoire path. Si un ou plusieurs dossiers du
répertoire parent n’existe pas, ces derniers seront créer.
rename(f1, f2) : renomme le fichier f1 par le nom indiqué f2.
remove(path) : supprime le fichier ou dossier indiqué via son chemin path.

0
Python
Données Persistantes
Manipuler les fichiers et les dossiers à l’aide du module shutil

Le module shutil offre également plusieurs fonctions permettant de manipuler de :


Manipuler les fichiers
copyfile(f1,f2) : copie le fichier f1 vers f2 sans conserver les permissions et
métadonnées.
copy(f1,f2) : copie le fichier f1 vers f2 en conservant seulement les permissions.

copy(f1,dir) : copie le fichier f1 vers le dossier dir.


copy2(f1,f2) : identique à copy() à la différence que les permissions et
métadonnées sont conservées.

Manipuler des arborescences


move(dir1, dir2) : renomme le dossier dir1 en dir2.
copytree(dir1, dir2) : recopie le contenu du dossier dir1 vers le dossier dir2.

rmtree(dir) : supprime le dossier et tout son arborsscence. 0


Python
Données Persistantes
Compression de de
Compression fichiers avec le
fichiers module
avec le zipfile
module zipfile
Le module zipfile fournit un ensemble d’outils pour créer, écrire, ajouter des données à et lister un fichier
Le module
ZIP. zipfile
Parmi ces fournit
outils, les plusun ensemble
utilisés sont d’outils
: pour créer, écrire, ajouter des données à et
lister un fichier ZIP. Parmi ces outils, les plus utilisés sont :

ZipFile(fichier, mode) : est un objet permettant d’ouvrir un fichier ZIP. Le paramètre fichier indique un
ZipFile(fichier, mode)et: mode
chemin vers un fichier,
est indique
un objet permettant d’ouvrir un fichier ZIP. Le paramètre
le mode d’ouverture.
fichier indique un chemin vers un fichier, et mode indique le mode d’ouverture.
L’objet ZipFile dispose de plusieurs méthodes pour la manipulation d’un archive.
L’objet ZipFile dispose de plusieurs méthodes pour la manipulation d’un archive.

.write(nomfichier) : écrit le fichier nommé nomfichier dans l'archive. L'archive doit être ouverte avec le
.write(nomfichier)
mode " w " ou " a". : écrit le fichier nommé nomfichier dans l'archive. L'archive doit être
ouverte avec le mode " w " ou " a".

.extract(membre, path=None) : extrait un membre (nom complet) de l'archive dans le répertoire courant; path
.extract(membre, path=None)
spécifie un répertoire : extrait
différent où un membre (nom complet) de l'archive dans
l'extraire. le
répertoire courant; path spécifie un répertoire différent où l'extraire.

.extractall(path=None) : extrait tous les membres de l'archive dans le répertoire


.extractall(path=None) : extrait tous les
courant; path spécifie un dossier de destination différent.
membres de l'archive dans le répertoire
courant; path spécifie un dossier de destination différent.

.close() : ferme l'archive; à appeler avant de terminer votre programme


.close()
ou
: ferme l'archive; à appeler avant de déterminer votre programme ou des
des informations essentielles n'y seront pas enregistrées
informations essentielles n’y seront pas enregistrées 0
Python
Données Persistantes
Création d’une archive zip
from zipfile import *

with ZipFile("fichierscompresses.zip", "w") as myzip :


myzip.write("Demain, dès l’aube.txt")
myzip.write("le_corbeau_et_le_renard.txt")

Désarchiver un fichier zip

from zipfile import *

with ZipFile("fichierscompresses.zip", "r") as myzip :


myzip.extractall()

0
Python
Données Persistantes
Manipuler les fichiers et les dossiers à l’aide du module os

Le module os offre plusieurs fonctions permettant de manipuler les fichiers et


dossiers.
mkdir(path) : créer le répertoire path. Si un ou plusieurs dossiers du
répertoire parent n’existe pas, une erreur sera retournée.
makedirs(path) : créer le répertoire path. Si un ou plusieurs dossiers du
répertoire parent n’existe pas, ces derniers seront créer.
rename(f1, f2) : renomme le fichier f1 par le nom indiqué f2.
remove(path) : supprime le fichier ou dossier indiqué via son chemin path.

0
Python
Données Persistantes
Manipuler les fichiers et les dossiers à l’aide du module os

Le module os offre plusieurs fonctions permettant de manipuler les fichiers et


dossiers.
mkdir(path) : créer le répertoire path. Si un ou plusieurs dossiers du
répertoire parent n’existe pas, une erreur sera retournée.
makedirs(path) : créer le répertoire path. Si un ou plusieurs dossiers du
répertoire parent n’existe pas, ces derniers seront créer.
rename(f1, f2) : renomme le fichier f1 par le nom indiqué f2.
remove(path) : supprime le fichier ou dossier indiqué via son chemin path.

Vous aimerez peut-être aussi