0% ont trouvé ce document utile (0 vote)
62 vues156 pages

Guide Complet sur le Développement Python

Ce document présente un cours avancé sur le développement en Python, couvrant les bases du langage, les structures de données, la programmation orientée objet, ainsi que des bibliothèques et modules spécifiques. Il aborde également les différences entre interpréteurs et compilateurs, les versions de Python, et inclut des exercices pratiques pour renforcer l'apprentissage. Enfin, il traite des structures de contrôle, des listes et des fonctions associées, tout en fournissant des exemples et des exercices pour chaque concept.

Transféré par

kesraouikhadidja3
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
62 vues156 pages

Guide Complet sur le Développement Python

Ce document présente un cours avancé sur le développement en Python, couvrant les bases du langage, les structures de données, la programmation orientée objet, ainsi que des bibliothèques et modules spécifiques. Il aborde également les différences entre interpréteurs et compilateurs, les versions de Python, et inclut des exercices pratiques pour renforcer l'apprentissage. Enfin, il traite des structures de contrôle, des listes et des fonctions associées, tout en fournissant des exemples et des exercices pour chaque concept.

Transféré par

kesraouikhadidja3
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

PYTHON

Avancé

F. HAMDAD
Développer en Python

Sommai
re
1- Les bases de Python : Présentation, opérateurs, types, variables,
choix, boucles
2- Listes, tuples, chaines (encodage utf8)
3- Dictionnaires, fichiers (tuples comme clé d’un dictionnaire)
4- Fonctions, paramètres, valeurs de retour (retourner tuples)
5- Modules, bibliothèques, packages, API : os, socket, scapy
6- Listes en compréhension, Générateurs, any / all
7- Fonctions intégrées : zip(), map(), filter()
8- Programmation Orientée Objet POO : Classes, objets, propriétés
9- POO : Surcharge, décorateur
10- Bibliothèques pour la sécurité : paramiko, os, argparse, hashlib,
socket, scapy
Développer en Python

Python est un langage interprété*


Python est portable
Python est simple mais puissant
- Logique simple
- Communauté active : Trouver de l’aide facilement, bibliothèque sans cesse
enrichie
- Librairies et API riches permettant de créer des grands projets
Django Web, Système, Réseau, Automatisation,
IoT, Bio Informatique, Finance,
Jeu vidéo 2D et 3D, Robotique,
IA, Data science et Analyse de données,
Bases de données, Développement de Chat Bots, …
Développer en Python

Interpréteur vs Compilateur

Interpréteur : Exécute le code source directement, ligne par ligne. Plus flexible et
interactif, mais généralement plus lent.

Compilateur : Transforme le code source en un fichier exécutable avant d'être


exécuté. Plus rapide à l'exécution, mais le processus de compilation prend du temps
et nécessite des étapes supplémentaires.

Exemple :
Interpréteur : Python, JavaScript, Ruby
Compilateur : C, C++, Java (avec bytecode)
Développer en Python

Interpréteur ou Compilateur ?
Compilateur :
Les langages compilés pour les systèmes d'exploitation, les applications de
bas niveau, les jeux vidéo, ou des applications exigeantes en termes de
performance (comme le calcul scientifique).
Les langages comme C et C++ sont très efficaces pour ce genre d'applications
en raison de leur grande rapidité d'exécution.

Interpréteur :
Les langages interprétés pour des applications web, des scripts, des
applications légères, des prototypes ou des outils.

Python est un excellent choix pour les scripts automatiques, les calculs
scientifiques, le machine learning, et les applications web grâce à sa
syntaxe simple et ses bibliothèques étendues.
Développer en Python

Versions de Python

CPython est la version standard, largement utilisée et compatible avec toutes les
bibliothèques Python.

PyPy est conçu pour améliorer la performance des programmes Python grâce à son
compilateur JIT (Just In Time).

Jython et IronPython permettent d'exécuter Python sur des plateformes spécifiques


(Java et .NET, respectivement).

MicroPython est destiné aux systèmes embarqués et aux microcontrôleurs.

Stackless Python permet de mieux gérer des tâches parallèles avec une approche légère.
Développer en Python

Python
Versions Python 3.13

IDLE : REPL Python (Read, Evaluate, Print, Loop)

L’IDE VSCode
Développer en Python

Les Bases de Python


Développer en Python

- Types de variables implicites : Typage dynamique

- Types entier, chaine, réel : integer, string, float, type()

- Calculs et opérateurs : + - * % // / **

- Variables et affectations : nom de variable, opérations , erreurs

compatibilité

- Conversions de types avec : str(), int(), float()


Développer en Python

[Link]
1
[Link]
[Link]
1
[Link]
>>> a = 5 >>> a = "5"
>>> b = 8 >>> b = 8
>>> a + b >>> a + b
13 Erreur
>>> int(a) + b
>>> a = "5" 13
>>> b = "8" >>> a + str(b)
>>> a + b "58" >>> a = 5.4
"58" >>> b = 2
>>> a * b >>> a = 5 >>> int(a)+b
Erreur >>> b = "4" 7
>>> a*b
Opérateurs >>> a = 5 44444
>>> a = "8.5"
>>> str(a)*int(b)
et >>> b = "8"
5555
>>> b = 3
>>> a + b >>> int(float(a))+b
conversions
dans IDLE Erreur >>> str(a)*int(b)+b 11
>>> a * b 55554
"88888" >>> a*b+str(a) >>> a = "8.5"
>>> b * a 444445
>>> b = 3
"88888"
>>> int(str(int(float(a)))+str(b))
83
>>> a = 5 >>> a = "5"
>>> b = 2 >>> b = "2"
>>> a // b >>> int(a) % b
2 Erreur
>>> a % b >>> int(a)%int(b)
1 1
>>> a ** b >>> int(a)//int(b)
25 2
Développer en Python

Les sorties et les entrées


print et input
Développer en Python

Les sorties

>>> print("Hello World!") bonjour


Hello World! tout le
Monde!

>>> x=1
>>> print(x)
1

>>> y=3
>>> print(x,y)
1 3

>>> age=22
>>> print("vous avez ",age,"ans")
vous avez 22 ans
Développer en Python

f-strings : Les chaines


formatées
Les sorties
>>> age=35
>>> print(f"vous avez {age} ans")
vous avez 35 ans

>>> n1=24.55
>>> n2=32

>>> print(f"le premier nombre est {n1} et le second est {n2}")


le premier nombre est 24.55 et le second est 32

>>> print(f"le premier nombre est {n1:f} et le second est {n2:f}")


le premier nombre est 24.550000 et le second est 32.000000

>>> print(f"le premier nombre est {n1:.2f} et le second est {n2:.1f}")


le premier nombre est 24.50 et le second est 32.0
Développer en Python

>>> nbre=10
>>> print(f"{n} en binaire = {nbre:b}")
10 en binaire = 1010
Formats d’affichage :
>>> print(f"{n}en octal = {nbre:o}")
10 en octal = 12 "d" : affiche en decimal (par defaut)
"b" : Binaire
"o" : affiche en octal
>>> print(f"{n} en hexadécimal = {nbre:x}") "x" ou "X" : affiche en hexa
10 en hexadécimal = a "f" : réel

>>> print(f"{n} réel = {nbre:f}")


10 réel = 10.000000

>>> nbre=0x10
>>> print(f"0x{nbre:x} en décimal = {nbre:d}")
0x10 en décimal = 16
Les sorties
>>> nbre=0o11
>>> print(f"{nbre:d}")
9

>>> nbre=0b11110000
>>> print(f"{nbre:d}")
240
Développer en Python

Valeur de type str

>>> age = input("Quel est votre age? ")


Quel est votre age? 22

>>> print(age)
22

>>> print(age+10)
Erreur Les entrées
>>> type(age)
<class 'str’>

>>> print(int(age)+10)
32

>>> age = int(input("Quel est votre age? "))


Quel est votre age? 22
>>> print(age+10)
32
input est une fonction qui retourne une chaine de
caractères.
Développer en Python

Le paramètre end="
"
Développer en Python

Créer un module Python


Développer en Python

Bloc note /
[Link]

Dans notepad
Exécution

double-
clic
Développer en Python

Dans Python
IDE
Développer en Python

Dans l’IDE
VSCode
Développer en Python

Exemple :

Script qui affiche la somme de 2 nombres :


Développer en Python

Exercices

- Ecrire un script Python qui demande le nom et les deux notes de l'utilisateur et
affiche sa moyenne.
- Ecrire un script Python qui demande à l’utilisateur un nombre et affiche le résultat
de sa division par 2 et
le reste de cette division.
- Ecrire un script Python qui demande le nom et le prénom de l'utilisateur et les
affiche sur une ligne avec
2 instructions print.
Développer en Python

Les instructions
Conditionnelles et itératives
Condition if / else
Boucle for / while
Développer en Python

Condition if / else
Condition if / else
Une condition contient des :
if condition: - Opérateurs arithmétiques : + - / // * ** %
traitement_si_condition_vraie - Opérateurs de comparaison : > >= < <= == !=
else:
- Opérateurs logiques : and, or, not
traitement_si_condition_fausse
- Opérateur in : if c in texte :
Et retourne toujours une des valeurs logiques Python
True ou False
Exemples :

!
L’espacement à gauche des
traitements est obligatoire
Développer en Python

Les valeurs logiques True / False


Développer en Python

Conditions
if imbriquéimbriquées
? if / elif

ou plus simplement ?
Développer en Python

Syntaxe

Syntaxe
Exercices

Ecrire des scripts Python qui :


1- demande 2 nombres à l'utilisateur et les affiche dans l'ordre croissant (plus petit au
plus grand).

2- demande 1 nombre à l'utilisateur et affiche s’il est pair, impair ou nul.


3- dit si oui ou non une lettre appartient à une chaine (in).
4- fait la division et la multiplication de deux nombres. Le choix de l’opération est fait
par l’utilisateur
(gérer les erreurs d'opérateurs et de nombres).
5 - demande l'âge d’une personne et affiche sa catégorie :

Syntaxe
• "Poussin" de 6 à 9 ans
• "Minime" de 10 à 12 ans
• "Cadet" de 13 à 15 ans
Développer en Python

Syntaxe
Exercices (2)

Ecrire un programme Python qui :


1- demande une valeur en dinars et affiche combien il y a de billets de 2000da, de
1000da, de 500da et de 200da dans cette somme d'argent.
2- demande 1 nombre x puis 5 nombres et affiche combien de fois le nombre x
apparait dans la liste (sans boucle, une variable pour les 5 nombres).

3 - Demande la stratégie de sécurité à l'utilisateur :


@IP srce, port srce, @IP dst, port dst, protocole, permit ou deny
Les valeurs dans la stratégie de sécurité peuvent être absolues ou génériques : ANY
- Demande le paquet IP à tester.
- Affiche si ce paquet est autorisé à passer le par feu ou non.
Développer en Python

Boucle while
Initialisation condition
while condition:
traitement_tantque_vrai

Exemple :

!
L’espacement avant les
traitements est
obligatoire
Développer en Python

Boucle for
for élément in chaine/range:
traitement_tantque_vrai

Exemple :
break :
Forcer la sortie de la boucle.

continue :
Reprendre la boucle (au
while/for).

for peut aussi être utilisé avec les


fichiers.
Développer en Python

Script qui affiche les 10 premiers nombres entiers positifs :


Développer en Python

Syntaxes
Exercices
Ecrire un programme Python qui :
- affiche les 20 premiers nombres entiers pairs.
- affiche les multiples de 3 de 1 à 100.
- fait la somme des 10 premiers nombres entiers.
- fait le produit de 10 nombres donnés par l’utilisateur.
- affiche les nombres de 10 à 1 en ordre décroissant.
- demande n nombres et affiche le maximum et le minimum parmi ces nombres.
- demande un nombre entier à l’utilisateur et affiche sa factorielle.
Développer en Python

Exercices Exercices (2) Syntaxes

Ecrire un programme Python qui :

- afficher les adresses IP d’hôtes pour une adresse IP /24


- affiche le nombre de nombres pairs parmi une suite de nombres qui se termine par
0.
- donne le nombre d'occurrences d'un caractère dans une chaine. si 0, afficher un
message introuvable.
- dit quand une chaine dépasse 3 caractères.
- Dit si une chaine est un palindrome.
- demande un nombre plusieurs fois et affiche "OK!" à chaque fois que ce nombre est
Développer en Python

Exercices Exercices (3) Syntaxes

Ecrire un programme Python qui :

1- dit si un nombre donné est premier ou non.


2- affiche les 100 premiers nombres premiers.
3- Le programme génère un nombre aléatoire X compris entre 10 et 50 (que l'utilisateur doit
deviner). Le programme

demande à l'utilisateur un nombre : Si ce nombre est supérieur à X, le programme


affiche le message :
« Plus
from random petit
import * ! ». S’il est inférieur à X, il affiche « Plus grand ! » jusqu'à ce que
c=randint(10,50)
l'utilisateur devine le nombre.
(inspiré de [Link]
Développer en Python

Exercices Exercices (4) Syntaxes

Ecrire un programme Python qui :

1- demande une adresse IP et dit si elle est valide ou non.


2- affiche la plus longue suite croissante strictement consécutive dans une
suite d’entiers fournie
par l’utilisateur (terminée par zéro)
3- affiche les nombres de 1 à 100 avec les règles suivantes :
 Pour les nombres multiples de 3, affiche "Fizz" au lieu du nombre.
 Pour les nombres multiples de 5, affiche "Buzz" au lieu du nombre.
 Pour les nombres multiples de 3 et 5, affiche "FizzBuzz" au lieu du nombre.
 Pour tous les autres nombres, affiche simplement le nombre lui-même.
Développer en Python

Les structures de données


Listes, Chaines, Tuples
Développer en Python

Les Listes
Variable dans laquelle on peut mettre un ensemble de valeurs de
différents types.

Liste = []
Liste = [1,2,3]
Liste = ["a","b","c"]
Liste = [10,"bonjour",20.2,"5"]
Développer en Python

Fonctions
sur les listes
Développer en Python

append
Ajouter un élément à la fin de la
liste.

del
Supprimer un élément par son
index.

remove
Supprimer un élément en le
précisant.

sorted
Trier une liste (créer une autre
liste).
sort
Trier une liste en modifiant la liste.
Le paramètre reverse est utilisé
de la même manière avec sort
Et aussi les fonctions :
Développer en Python

len
Nombre d'éléments dans la liste.

reverse
Inverse les éléments.

extend
Ajoute une liste à une autre.

count
Compte le nombre d'occurrences d'un
élément dans la liste.

index
Indique la position d'un élément dans
la liste.
Développer en Python

clear
Vide la liste.

Liste[a:b:c]
a : index de l’élément début
b : index de l’élément fin
c : pas (step)

Le ":" fonctionne aussi avec les chaines de caractères.


>>> c='bonjour'
>>> c[:2] (ou c[0:2])
'bo'
>>> c[2:] (ou c[2:len(c)])
'njour'
>>> c[0:3]
'bon'
>>> c[1:4]
Testez 'onj'
Liste[1:3], Liste[::2], Liste[::-1]
Développer en Python
Développer en Python

split (fonction chaine)


Convertit une chaine en liste.

insert
Insert un élément dans une position
(index) donnée.
Développer en Python

Les fonctions chaines


len
Nombre d'éléments dans la
chaine.
L'inverse de split : join(liste)
>>> ' '.join(['Salut','toi'])
'Salut toi'
>>> ''.join(['Salut','toi'])
'Saluttoi'
>>> ':'.join(['Salut','toi'])
'Salut:toi'

Strip(chaine)
>>> Ma_Chaine="Je suis à PARIS."
>>> Ma_Chaine
'Je suis à PARIS.'
>>> Ma_Chaine.strip(".")
'Je suis à PARIS'
>>> Ma_Chaine.strip("Je")
' suis à PARIS.'
>>> c="bonjour" >>> Ma_Chaine.strip("PARIS")
>>> len(c) 'Je suis à PARIS.'
>>> Ma_Chaine.strip("PARIS.")
7
'Je suis à '
Développer en Python

Exercices
1- Ecrire un programme qui demande une liste de 10 valeurs et affiche leur somme et
moyenne. Listes
2- Ecrire un programme qui demande une liste de 10 valeurs puis affiche la valeur la
plus grande dans cette liste, sa position et le nombre de ses occurrences.
3- Ecrire un programme qui demande une liste de n valeurs et affiche le nombre
d'éléments, le nombre de "5" et la position du "1" s'il existe dans cette liste.
4- Ecrire un programme qui demande une liste de valeurs (-1 indique la fin de la liste)
puis construit 2 listes, une avec les valeurs positives et l’autre avec les valeurs
négatives.

5- Ecrire un programme qui dit si oui ou non un élément fait partie d'une liste de 10
valeurs données. Quand l'utilisateur répond "non" à la question : "Une autre
recherche?",
Dans terminer
tous les exercices, lesle programme.
listes doivent être d’abord construites avant de faire les
6- traitements.
Demander une liste à l’utilisateur. Cette liste contient des doublons. Construire une
Développer en Python

Exercices
7- Un routeur contient une table deListes
routage simplifiée donnée par l'utilisateur,
représentée par une liste de sous-listes. Chaque sous-liste contient 3 entiers :
[Réseau, Masque, Interface]

Exemple :
table_routage = [
[10, 24, 0], # Réseau [Link]/24 via interface 0
[192, 16, 1], # Réseau [Link]/16 via interface 1
[172, 12, 2] ] # Réseau [Link]/12 via interface 2

- Afficher toutes les routes passant par l’interface 1.


- Supprimer de la table toutes les routes dont le masque est inférieur à 16.
- Compter le nombre total de routes restantes.
- Créer un menu pour ces 3 traitements.
La liste doit être d’abord construite avant de faire les traitements.
Développer en Python

Exercices
Chaines
1- Ecrire un programme qui mets côte à côte (séparé par une virgule) les 5 mots
d'une liste.

2- Ecrire un programme qui demande une adresse email et affiche le username puis
le nom de domaine (sans le tld).

3- Ecrire un programme qui demande le nom et le prénom d’une personne et affiche


« Bonjour NOM Prénom » : nom en majuscule et le prénom avec la 1ère lettre en
majuscule.

4- Construire une liste d’adresses IP et afficher uniquement celles qui commencent


par "192.168." ou "10."

5- Ecrire un programme qui demande une liste de noms à l’utilisateur où les noms
sonttous
Dans précédés par « Mr
les exercices » ou
avec « Mme
listes, ». Le
les listes programme
doivent doit construire
être d’abord construites deux
avant listes : les
de faire
une liste avec les noms des dames et une autre avec le noms des messieurs.
traitements.
Développer en Python

Exercices

6- Ecrire un programme qui demande une adresse IP /24 et affiche l'adresse réseau.
7- Ecrire un programme qui demande une adresse IP et le masque par classe et
affiche l'adresse réseau.
8- Affiche la liste suivante : ["vlan10","vlan20","vlan30","vlan40"] comme suit
[10,20,30,40].
Développer en Python

Exercices
9- Un routeur contient une table de routage simplifiée donnée par l'utilisateur,
représentée par une liste de sous-listes. Chaque sous-liste contient 3 éléments :
[Network, Classless_mask, Interface]

Exemple :
table_routage = [
["[Link]", 24, 0], # Réseau [Link]/24 via interface 0
["[Link]", 16, 1], # Réseau [Link]/16 via interface 1
["[Link]", 16, 2] ] # Réseau [Link]/12 via interface 2

- Afficher toutes les routes 192.168.


- Supprimer de la table toutes les routes dont l’adresse commence par 10.
- Demander une adresse à l’utilisateur et dites s’il y a une correspondance dans la
table de routage.
- Créer undoit
La liste menuêtrepour cesconstruite
d’abord 3 traitements.
avant de faire les traitements.
Développer en Python

QUIZZ,
Le jeu des capitales
Ecrire un programme jeu quizz. Une liste avec
pays/capitales est construite (6 pays). L'utilisateur
est ensuite testé :
Le programme donne un pays (au hasard) et
l'utilisateur propose sa capitale. Le programme
évalue si la réponse est correcte ou non, puis
redonne un autre pays.
Quand l'utilisateur tape une chaine particulière
("bye" par exemple), le quizz doit se terminer et un
pourcentage des bonnes réponses s'afficher.

- Les réponses de l'utilisateur peuvent être en minuscules ou en


majuscule.
- Les capitales peuvent contenir des caractères accentués.
- Si les réponses de l'utilisateur sont fausses, le programme doit
Développer en Python

Au hasard?
# Générer 10 nombres aléatoires dans une liste
from random import choice
i=0
while i<10:
Liste = [1,2,3]
Choix = choice(Liste) # choice retourne une chaine

print(Choix)
i+=1

# Générer un nombre aléatoire


from random import *
c=randint(10,50) # entier
d=random() # réel
Développer en Python

Les caractères
accentués
Développer en Python

Les Tuples
Collection ordonnée d’éléments.

contrairement aux listes, les tuples ne peuvent pas être modifiés (pas d’ajout, suppression,
modification d’éléments).

t = () # tuple vide
t = (1, 2, 3)
print(len(t)) # 3
t = (10, "Python", 3.14)
t = (5,) # tuple d’un élément
t = (5) # ce n’est pas un tuple, c’est un int
Développer en Python

Utiliser les Tuples

t = (10, 20, 30)


print(t[0]) # 10
print(t[-1]) # 30
print(t[1:3]) # (20, 30)
t1 = (1, 2)
t2 = (3, 4)
print(t1 + t2) # (1, 2, 3, 4)
t = (1, 2)
print(t * 3) # (1, 2, 1, 2, 1, 2)
Développer en Python

Boucle avec les Tuples

t = (10, 20, 30)


for element in t:
print(element)

Assignation multiple :
déballage
t = (1, 2, 3)
a, b, c = t
print(a, b, c) # 1 2 3
Développer en Python

Utilisation pratique des


Tuples
x = 5
y = 8
x,y = y,x
print(x,y) # 8 5

Fonction qui retourne plusieurs valeurs (plus


tard)
Développer en Python

Conversion entre listes et


tuples
t = (1,2,3)
l = list(t)
Print(l) # [1,2,3]
t = tuple(l)
Développer en Python

Fonctions count() , index(), min(), max(), sum(),


sorted() :
animaux = ("chat", "chien", "chat", "oiseau")
# Compter combien de fois "chat" apparaît
print([Link]("chat")) # 2
# Trouver l'index de la première apparition de "chien"
print([Link]("chien")) # 1

notes = (12, 15, 14, 10)


print(min(notes)) # 10
print(max(notes)) # 15
print(sum(notes)) # 51
print(sorted(notes)) # [10, 12, 14, 15] retourne une liste
Développer en Python

Fonctions sorted() :

nombres = [5, 2, 9, 1]
print(sorted(nombres, reverse=True)) # [9, 5, 2, 1]
print(sorted(nombres, reverse=False)) # [1, 2, 5, 9]

mots = ["chat", "éléphant", "rat", "souris"]


print(sorted(mots, key=len)) # ['rat', 'chat', 'souris', 'éléphant’]

personnes = [("Charlie", 25), ("Bob", 19), (" Alice", 30)]


print(sorted(personnes)) # [('Alice', 25), ('Bob', 19), ('Charlie', 30)]
print(sorted(personnes, key=lambda e: e[1])) # [('Bob', 19), ('Alice', 25), ('Charlie', 30)]

Le paramètre key est une fonction


Développer en Python

Exercices Tuples
1- Un tuple machine contient des informations sur une machine : ("PC01", "Windows", "[Link]",
"8 Go")
Afficher le nom de la machine, son adresse IP et son système d’exploitation.

2- Un tuple comptes contient : ("admin", "root", "user1", "guest")


- Afficher les 2 premiers utilisateurs.
- Afficher tous les comptes sauf le compte root.
- Vérifier si invité est dans la liste des comptes.

3- Un tuple connexion contient une adresse IP et un port donnés par l’utilisateur.


- Déballer ce tuple dans deux variables : ip et port.
- Afficher : « Connexion en cours sur [Link]:22 »

4- Un tuple partitions contient la liste des lettres de partitions montées données par l’utilisateur.
Par exemple : ("C:", "D:", "E:")
- Afficher la dernière partition système.
- Vérifier si une partition "F:" existe.
- Ajouter manuellement une partition "F:".
Développer en Python

Exercices Tuples

Imaginons un scénario où il faut simuler une file d'attente d'utilisateurs qui attendent
pour accéder à un système. Chaque utilisateur est représenté par un tuple contenant
son nom et le temps qu'il a attendu dans la file (en minutes).

L’objectif est de :

[Link] un nouvel utilisateur à la file avec le temps d'attente.


[Link] les utilisateurs qui ont attendu plus de 30 minutes.
[Link] le temps moyen d'attente de tous les utilisateurs.
[Link] le premier utilisateur de la file (le plus ancien).
[Link] les utilisateurs par leur temps d'attente, du plus faible au plus élevé.
Développer en Python

Solution
# Tuple de la file d'attente : chaque utilisateur est un tuple (nom, temps_d_attente)
file = (
("Alice", 25),("Bob", 40),("Charlie", 10),("David", 35),("Eve", 20)
)

# 1. Ajouter un nouvel utilisateur à la file


nouvel_utilisateur = ("Frank", 30)
file = file + (nouvel_utilisateur,)
print(f"\nNouvel utilisateur ajouté: {nouvel_utilisateur[0]} avec {nouvel_utilisateur[1]} minutes d'attente.")

# 2. Afficher les utilisateurs qui ont attendu plus de 30 minutes


print("\nUtilisateurs ayant attendu plus de 30 minutes:")
for utilisateur in file:
if utilisateur[1] > 30:
print(f"- {utilisateur[0]} ({utilisateur[1]} minutes)")

# 3. Calculer le temps moyen d'attente


temps_total = 0
for utilisateur in file:
temps_total += utilisateur[1]
nombre_utilisateurs = len(file)
temps_moyen = temps_total / nombre_utilisateurs
print(f"\nLe temps moyen d'attente est de {temps_moyen:.2f} minutes.")

# 4. Supprimer le premier utilisateur de la file (le plus ancien)


file = file[1:]
print("\nPremier utilisateur supprimé (le plus ancien).")

# 5. Trier la file par temps d'attente (du plus faible au plus élevé)
file_tries = sorted(file, key=lambda x: x[1])
print("\nFile triée par temps d'attente (du plus faible au plus élevé) :")
for utilisateur in file_tries:
print(f"- {utilisateur[0]} ({utilisateur[1]} minutes)")
Développer en Python

Les structures de données


Dictionnaires, fichiers
Développer en Python

Les Dictionnaires
Un dictionnaire est une collection non ordonnée de paires clé-valeur (key-value).
Chaque clé est unique, et permet d'accéder à sa valeur associée.
Utilité : Accès rapide aux valeurs via les clés, idéal pour représenter des données structurées (ex : annuaire,
données JSON).

exemple = {"nom": "Leila", "âge": 25, "ville": "Oran"}

Cl Valeur
é
- Les valeurs peuvent être de n'importe quel type pas les clés (diapo suivante).
- Le dictionnaire est modifiable.
- L’ordre d’insertion conservé.
Développer en Python

Les Dictionnaires

- Les clés sont uniques et non modifiables.


- Les clés sont de type : string, int, tuple mais pas list et
dictionnaire non.

mon_dico = {
"nom": "Amine",
"âge": 22,
"nom": "Sara"
}
print(mon_dico) # {'nom': 'Sara', 'âge': 22}
Développer en Python

Les Dictionnaires

Accès aux valeurs :

etudiant = {"nom": "Leila", "âge": 25, "ville": "Oran"}

print(etudiant["nom"]) # Leila
print([Link]("nom")) # Leila

print([Link]("adresse")) # None
print([Link]("adresse", "Adresse inconnue")) # Adresse inconnue
Développer en Python

Les Dictionnaires

Modification des valeurs :

etudiant = {"nom": "Leila", "âge": 25, "ville": "Oran"}

etudiant["âge"] = 26 # Modification
etudiant["adresse"] = "Gambetta" # Ajout

print(etudiant) # {'nom': 'Leila', 'âge': 26, 'ville': 'Oran', 'adresse': 'Gambetta'}


Développer en Python

Les Dictionnaires

Suppression des valeurs :

etudiant = {"nom": "Leila", "âge": 25, "ville": "Oran"}

del etudiant["ville"] # Supprime la clé 'ville' et sa valeur


print(etudiant) # {'nom': 'Leila', 'âge': 25}

---

etudiant = {"nom": "Leila", "âge": 25, "ville": "Oran"}


ville = [Link]("ville") # Supprime aussi "ville":"Oran" mais récupère la valeur associée à "ville"
print(etudiant) # {'nom': 'Leila', 'âge': 25}
print("ville supprimée : ", ville) # Ville supprimée : Oran
Développer en Python

Les Dictionnaires

Parcourir un dictionnaire :
d = {"nom": "Leila", "âge": 25, "ville": "Oran"}
for value in [Link](): Leila
25
print(value) Oran

for key in [Link]() : ou for key in d : nom


âge
print(key) ville

for key, value in [Link](): key=nom, value=Leila


key=âge, value=25
print(f"key = {key}, value = {value}")
key=ville, value=Oran
Développer en Python

Les Dictionnaires

Accéder au 1er élément d’un dictionnaire (ou le dernier) :

d = {"a": 1, "b": 2, "c": 3}


Lkeys = list([Link]()) # Construit une liste avec les clés du dictionnaire
# il y a aussi [Link]() pour les valeurs
print(f'1ère clé : {Lkeys[0]}')
print(f'1er élément : {d[Lkeys[0]]}')
Développer en Python

Les Dictionnaires

Exemple 1 :
Créer et gérer un annuaire téléphonique saisi par l’utilisateur :

- Demander à l’utilisateur combien de contacts il veut saisir.


- Pour chaque contact, demander le nom et le numéro, puis les ajouter dans un
dictionnaire annuaire.
- Afficher ensuite tous les contacts saisis (nom et numéro).
- Demander à l’utilisateur un nom à rechercher et afficher son numéro ou un message
s’il n’existe pas.
Développer en Python

Solution :
annuaire = {} # Initialisation du dictionnaire vide
n = int(input("Combien de contacts voulez-vous saisir ? "))
# Saisie des contacts
for i in range(n):
nom = input(f"Nom du contact {i+1} : ")
numero = input(f"Numéro de {nom} : ")
annuaire[nom] = numero

# Affichage de tous les contacts


print("\nAnnuaire complet :")
for nom, numero in [Link]():
print(nom, ":", numero)

# Recherche d’un contact


nomR = input("\nEntrez un nom à rechercher : ")
if nomR in annuaire:
print(f"Numéro de {nomR} : {annuaire[nomR]}")
else:
print("Contact non trouvé.")
Développer en Python

Les Dictionnaires

Exemple 2 :
Trouver la fréquence de chaque mot dans un texte.
Développer en Python

Les Dictionnaires

Exemple 2 :
Trouver la fréquence de chaque mot dans un texte. Stocker les résultats dans un
dictionnaire.

d={}
mot="Python est facile, Python est rapide, Python est riche«

l=[Link]()
for i in range(len(l)):
l[i]=l[i].strip(',')

for e in l :
d[e]=[Link](e)

print(d) # --> {'Python': 3, 'est': 3, 'simple,': 1, 'puissant,': 1, 'riche': 1}


Développer en Python

Les Dictionnaires

Exemple 2 : Solution 2
Trouver la fréquence de chaque mot dans un texte. Stocker les résultats dans un
dictionnaire.
text="Python est simple, Python est puissant, Python est riche"

d={}
l=[Link]()
for i in range(len(l)):
l[i]=l[i].strip(',')

for e in l :
if e in d :
d[e]+=1
else:
d[e]=1
print(d) # --> {'Python': 3, 'est': 3, 'simple,': 1, 'puissant,': 1, 'riche': 1}
Développer en Python

Exercices Dictionnaires
Développer en Python

Exercice 1 :

Créer un dictionnaire où les clés sont des numéros (1, 2, 3, etc.) et les
valeurs sont les noms des mois. Ensuite, écrire un programme qui prend
un numéro de mois et retourne le nom correspondant.

Par exemple, si l'utilisateur entre "3", la fonction doit retourner "Mars".


Si l'utilisateur entre un numéro invalide, la fonction doit indiquer
"Numéro invalide".
Développer en Python

Exercice 2 :

Écrire un programme qui demande à l’utilisateur des valeurs et construit un


dictionnaire avec des noms comme clés et des notes (entiers) comme valeurs.

Le programme doit trouver et afficher le nom avec la plus grande note et celui avec la
plus petite note.

Par exemple, pour un dictionnaire {'Alice': 75, 'Bob': 82, 'Charlie': 91}, le programme devrait
afficher Charlie comme ayant la meilleure note et Alice comme ayant la plus faible.
Développer en Python

Exercice 3 :

Soit une liste de configurations donnée par l’utilisateur sous forme de chaînes
"clé=valeur", par exemple :
ip=[Link], mask=[Link], gateway=[Link]

- Construire un dictionnaire contenant ces informations.


- Ajoute la configuration "dns=[Link]".
- Modifie la valeur de "gateway" en "[Link]".
- Supprime la clé "mask" du dictionnaire.
- Recherche si la clé "ip" est présente dans le dictionnaire.
Développer en Python

Exercice 4 :
Dans une entreprise, chaque développeur possède plusieurs compétences en fonction des projets
sur lesquels il travaille. Voici les données des compétences des développeurs :

competences = {
"Alice": ["Développement Web", "Base de données", "Sécurité","C++"],
"Bob": ["Développement Web", "Base de données", "UI/UX"],
"Charlie": ["Développement Web", "Analyse de données", "Sécurité"],
"David": ["Sécurité", "Réseaux", "Développement Web"]
}
- Quel développeur a le plus grand nombre de compétences.
- Afficher la liste des compétences (sans doublons).
- Afficher les compétences partagées par plusieurs développeurs.
- Ajouter un développeur avec 5 compétences données par l’utilisateur (boucle pour les
compétences).
- Créer un dictionnaire inversé où chaque compétence est associée à une liste des développeurs
qui possèdent cette compétence.
- Ajouter une compétence à Alice.
- Supprimer le développeur ayant le moins de compétences. max_comp=float('inf')
- Créer un menu pour toutes ces fonctionnalités.
Développer en Python

Exercice 5 :

On suit les connexions du pc4 vers des destinations spécifiques :

Connexions_pc4 = {
"Serveur A": (1 , 2 , 3),
"Serveur B": (1 , 2),
"Serveur C": (3 , ),
"Serveur D": (3 , 4)
}

Pour aller au "Serveur A", le trafic passe par le "switch 1 ", " port 1 " puis le " switch 2 " "
port 3 ".

- Trouver les switchs d'une destination donnée.


- Ajouter une nouvelle connexion pour une destination.
- Supprimer une connexion pour une destination.
- Afficher toutes les connexions pour un switch donné.
Développer en Python

Exercice 6 :

Soit un dictionnaire représentant la configuration d’un routeur avec plusieurs


interfaces donnée par l’utilisateur.

Par exemple :
{
"eth0": {"ip": "[Link]", "status": "up"},
"eth1": {"ip": "[Link]", "status": "down"}
}

- Parcourir ce dictionnaire et afficher uniquement les interfaces dont le statut est "up".
- Ajouter une nouvelle interface "eth2" avec "ip": "[Link]" et "status": "up".
- Changer le statut de "eth1" en "up".
- Supprimer l’interface "eth0".
- Vérifier si l’interface "eth3" existe dans le dictionnaire.
- Créer un menu pour ces traitements.
Développer en Python

Exercice 7 :

Soit un dictionnaire qui contient pour chaque serveur son état et son temps de
fonctionnement (uptime) en heures, par exemple :
{
"srv1": {"etat": "actif", "uptime": 240},
"srv2": {"etat": "inactif", "uptime": 0},
"srv3": {"etat": "actif", "uptime": 120}
}

- Remplir ce dictionnaire par des valeurs données par l’utilisateur.


- Afficher la liste des serveurs actifs dont le temps de fonctionnement dépasse 100
heures.
- Ajouter un serveur "srv4" avec état "actif" et uptime 50.
- Modifier l’état de "srv2" en "actif".
- Supprimer le serveur "srv3".
- Rechercher si "srv3" est toujours présent.
Développer en Python

Exercice 8 :

Soit un dictionnaire avec des noms d’équipements comme clés et des dictionnaires de
paramètres comme valeurs, par exemple :
{
"switch1": {"ports": 24, "vlan": 10},
"switch2": {"ports": 48, "vlan": 20}
}

- Remplir ce dictionnaire par des valeurs données par l’utilisateur.


- Calcule et affiche le nombre total de ports de tous les équipements.
- Ajoute un nouvel équipement "switch3" avec 16 ports et vlan 30.
- Modifie le nombre de ports de "switch1" à 32.
- Supprime l’équipement "switch2".
- Recherche si "switch2" est toujours présent.
- Créer un menu pour ces traitements.
Développer en Python

es Fichiers Textes
Moyen de stocker des données de façon permanente.

f = open("nom_fichier", "mode")
mode :
r : Ouverture en lecture d'un fichier txt. Permet de lire le contenu du fichier mais pas d'écrire dedans.
Le fichier doit exister.
a : Ouverture en écriture ajout d'un fichier txt. Permet d'ajouter des lignes en fin de fichier. Si le
fichier n'existe pas, il est créé.
w : Ouverture en écriture nouvelle d'un fichier txt. Permet de réinitialiser le fichier. Si le fichier
n'existe pas, il est créé.

r + : Ouverture en écriture et lecture d'un fichier txt. L'écriture est possible à n'importe quelle position. Le
fichier doit exister.
a+ : Ouverture en écriture ajout et lecture d'un fichier txt. Si le fichier n'existe pas, il est créé.
w+: Ouverture en écriture nouvelle et lecture d'un fichier txt. Si le fichier n'existe pas, il est
créé.
Développer en Python

Utilisation des fichiers textes

- Ouvrir un fichier en lecture :


f=open("[Link]","r")
Le fichier doit être soit dans le même dossier que le programme
Ou utilisé avec le code permettant de préciser le chemin d'accès

- Lire le contenu d'un fichier : [Link]()

- Afficher le contenu d'un fichier : print([Link]())

- Ecrire une ou plusieurs lignes dans un fichier : [Link]("ligne a écrire")


"\n" est le saut de ligne

[Link]("ligne1\nligne2\nligne3")

- Fermer un fichier : [Link]()


Utilisation
# Mettre le fichier dans le même dossier que le module .py d'un fichier
texte

[Link]

"\n" est le
caractère
saut de ligne
Développer en Python

Parcourir
un fichier

Les sauts de lignes supplémentaire après chaque ligne du fichier et celui de print
Développer en Python

ffichage avec un saut de ligne seulement :


Développer en Python

Affichage sans sauts de lignes :


Développer en Python

ffichage de chaque ligne en liste :


Développer en Python

ffichage des 1ers éléments des listes seulement :


Développer en Python

Ouvrir un fichier avec un PATH absolu

Il n'est pas conseillé d'utiliser des chemins absolus.


Il est possible d'utiliser des chemins relatifs avec des fonctions systèmes.
Lecture par ligne dans un fichier

writelines(Liste) ?
Développer en Python

Exercices
Fichiers
1- Écrire un script qui demande à l'utilisateur 10 noms et les stocke dans un fichier puis affiche
les noms stockés dans le fichier.

2- Écrire un script qui demande à l'utilisateur 10 noms, prénoms et âges et les stocke dans un
fichier [Link]. Le fichier [Link] n'existe pas doit être rempli comme suit :
Nom-Prenom-Age

3- Écrire un script qui construit un fichier de usernames à partir d'un fichier d’adresses mail. Le
fichier d'adresses mail existe déjà et est plein.

4- Améliorez le code de l'exercice précédent : C’est l’utilisateur qui dit ce qui doit être stocké
dans le fichier : le username, le domaine ou l’extension du domaine tld (.com ou .net etc.)
Développer en Python

Exercices Fichiers
(2)
5- Ecrire une fonction de cryptage et une autre de décryptage en utilisant le cryptage césar (ord,
chr).
6- Ecrire un script qui stocke dans un fichier le nom d'hôte et l'adresse IP valides de 20 hôtes :
Nom d'hôte-Adresse IP puis affiche les noms d'hôtes stockés dans le fichier.
7- Ecrire un script qui demande à l'utilisateur des adresses IP valides et les stocke dans un
fichier.
8- Ecrire un script qui construit un fichier d'adresses IP réseaux à partir d'un fichier d'adresses IP
d'hôtes /24.
Le fichier d'adresses IP d'hôtes existe déjà
Améliorer le code de l'exercice 9 : Les masques sont différents (par classe).
Améliorer le code de l'exercice 9 : Les masques sont sans classe.

9- Ecrire un script qui dit si OSPF est configuré dans un routeur.


Le fichier running-config est disponible. Afficher la config si elle existe.
10- Ecrire un script qui construit à partir d'un fichier de vlans, un autre fichier avec les vlans dont
le numéro est
Développer en Python

Exercice
Ecrire un programme avec Récapitulatif
menu qui donne pour un routeur R1 :
1- Version de l'iOS.
2- Liste des interfaces UP/UP .
3- Liste des protocoles de routage configurés.
4- Configuration OSPF si elle existe .
5- Liste des Vlan actifs.
6- Pool Nat.
7- R1 administrable par telnet ou non.
8- Quizz connaissances réseaux.
Utiliser les fichiers de configuration qui conviennent dans la topologie Python_Exo.pkt
Utiliser le fichier Net_Quizz.txt pour le quizz. Voir les détails du quizz diapo suivante.

Le programme doit maintenant faire les traitements 1 à 7 pour 3 routeurs R1, R2 et R3.
Les noms des fichiers sont disponibles dans un fichier texte comme suit :
Par exemple pour le running-config : [Link] → R1 : run_R1.txt
R2 : run_R2.txt
R3 : run_R3.txt
Développer en Python

Exercice
QUIZZ Réseau avec fichier
Ecrire un programme jeu quizz. Une liste avec
Questions_réseaux:Réponse est stockée dans un fichier
texte.

L'utilisateur est ensuite testé :


Le programme pose une question (au hasard) et
l'utilisateur propose une réponse. Le programme évalue si
la réponse est correcte ou non, puis redonne une autre
question.
Quand l'utilisateur tape une chaine particulière ("bye" par
exemple), le quizz doit se terminer et un pourcentage des
bonnes réponses s'afficher.
- Les réponses de l'utilisateur peuvent être en minuscules ou en
majuscule.
Développer en Python

Au hasard?

# Générer 10 nombres aléatoires


from random import choice

i=0
while i<10:
Liste = [1,2,3]
Choix = choice(Liste) # choice retourne une chaine

print(Choix)
i+=1
Développer en Python

Les caractères
accentués
Développer en Python

Les Fonctions
Programm
e
sans
fonctions
Traitement

Programm
Traitement ressemblant
e qui se répète
sans
fonctions
Traitement

Traitement ressemblant
qui se répète
Développer en Python

Les fonctions permettent de simplifier le code, le rendre


lisible et
éviter les répétitions de traitements.
Développer en Python

Les fonctions

def nom_fonction(parametres):
traitement
return valeur

Valeur de retour
(pas obligatoire)
Définition de la fonction

Appel de la fonction

Programme

Paramètres de la fonction
Développer en Python

Les fonctions sont réutilisables quand on les met


dans un autre module.
Développer en Python

Exemple 1 :
Moyenne de deux nombres.

Programme dans le Fonction définie dans un autre


module [Link] module [Link]
Développer en Python

Exemple 1 :
Moyenne de deux nombres.

Programme dans le Fonction définie dans un autre


module [Link] module [Link]

Fonction inconnue
parce que définie dans un autre module
Développer en Python

Programme [Link] Fonction définie


dans un autre module [Link]

on
e l a foncti
d
Appel

Différence? voir [Link], [Link], [Link]


Développer en Python

Fonction définie
Programme [Link] dans un autre module [Link]

on
e l a foncti
d
Appel

- import func importe le module mais pas son contenu. On doit préciser le nom du module avant la fonction
[Link](x,y)

- from func import moyenne importe la fonction seulement . Dans ce cas, on met juste moyenne(x,y).
- from func import * importe toues les fonctions du module. Là encore, on met juste moyenne(x,y).
Différence? voir [Link], [Link], [Link]
Développer en Python

L'import de modules
Python importe les modules contenus dans des dossiers précis.

Les dossiers importés se trouvent dans une variable PYTHON PATH.

Par défaut, les dossiers suivants sont dans PYTHONPATH :


- Le dossier dans lequel est votre programme python (et ses sous-dossiers).
- Les dossiers sites-packages et dist-packages du dossier Python (entre
autres).
Développer en Python

Portée des variables :


- Variables locales
- Variables globales

voir [Link], [Link], [Link], [Link]


Développer en Python

Un programme Python peut être écrit dans un ou plusieurs modules.


C'est la programmation modulaire.

Pour écrire un programme dans plusieurs modules, il est nécessaire


d'utiliser les fonctions et les classes d'objets.

Un programme Python est un ensemble de modules.


Développer en Python

Exemple 2 :
Afficher les meilleures notes de 2 classes.

Les notes sont stockées dans 2 listes.


Les notes sont saisies par classe, jusqu'à ce que l'utilisateur
donne "-1".
Programm
e
en 1
module
[Link](int(input())

Programm
e
en 1
module
avec
fonctions

print(f"Classe 1 : {MeilleureNote(classe1)}")
Programm
e
en 2
modules

A partir de la, on ne programme pas les fonctions puis le code principal mais l'inverse.
On construit le programme avec les appels de fonctions qui ne sont pas encore implémentées. Puis on implémente ces fonctions.
Développer en Python

Les Exceptions
Développer en Python
Développer en Python

e
Développer en Python

e
Développer en Python

>>> 1/0
ZeroDivisionError: division by zero

>>> 1+a
NameError: name 'a' is not defined

>>> f=open("")
FileNotFoundError: [Errno 2] No such file or directory: ''

>>> f=open("d:")
PermissionError: [Errno 13] Permission denied: 'd:'

>>> f==open("w:")
NameError: name 'f' is not defined

>>> Liste=[]
>>> Liste[5]
IndexError: list index out of range
Développer en Python

Exercice
Ecrire un script qui gère les cas suivants avec des messages personnalisés.

>>> 1/0
>>> 1+a
>>> f=open("")
>>> f=open("d:")
>>> print([Link](input()))
>>> Liste=[]
>>> Liste[5]
Développer en Python

Le Débogage
Exercices (1) : Écrire des programmes avec fonctions paramétrées qui :

1- Affiche la somme, le produit et la moyenne de deux nombres (3 fonctions puis une


fonction).
2- Convertit un prix sans TVA en un prix avec TVA. Prix TVA = Prix sans TVA +(Prix sans TVA 
0.17)
Modifier la fonction sachant que la TVA n'est pas fixe, elle est donnée par l'utilisateur.
3- Demande une chaine de caractères et affiche (plusieurs fonctions) :
• Si oui ou non ce caractère est dans la chaine.
• Remplacer ce caractère par un autre donné par l'utilisateur (1ère occurrence puis
toutes).
• Si oui ou non elle est un palindrome.
5- Affiche le nom de domaine et le username d'une adresse mail (une fonction).
4- Écrire une fonction ajouter_contact(annuaire,nom,numero) qui ajoute une entrée dans un
Mettez les fonctions des exercices dans un module [Link] et faites les corrections
dictionnaire
nécessaires.
annuaire (clé : nom, valeur : numéro) et retourne le dictionnaire mis à jour.
Développer en Python

Exercices (2) :

6- Écrire une fonction rechercher_numero qui cherche un nom dans le dictionnaire


annuaire et retourne un tuple (nom, numéro) si trouvé, ou (nom, None) sinon.

7- Écrire une fonction verifier_ip(ip) qui prend une chaîne de caractères


représentant une adresse IPv4 et retourne deux valeurs : valide, message où :
- valide True si l’adresse est valide (4 octets entre 0 et 255), sinon False.
- message donne une explication simple (ex : "Adresse valide" ou "Octet 3
invalide").

8- Ecrire un programme (avec fonction) qui convertit un hostname de type Rx en ID


de protocole.
Exemple : R1 → [Link] ; R2 → [Link]
Développer en Python

Exercices (4) :

9- Écrire une fonction compter_ports_ouverts(scan) qui prend un dictionnaire où


les clés sont des numéros de ports (entiers) et les valeurs des booléens
indiquant s’ils sont ouverts (True) ou fermés (False). Cette fonction retourne
plusieurs valeurs total_ports et ports_ouverts avec le nombre total de ports
et le nombre de ports ouverts.
10- Ecrire un programme (avec fonction) qui convertit une adresse IP hôte /24 en
adresse réseau.
11- Ecrire un programme (avec fonction) qui affiche le pool NAT configuré sur un
routeur.
En entrée : running-config
En sortie : Le pool NAT ou un message de non configuration
Développer en Python

Un projet Python est un ensemble de modules


Ces modules contiennent le programme principal, nos fonctions et nos classes.
Le code de ces modules a été développé par nous.

Il est également possible d'utiliser des modules tiers


qui contiennent des fonctionnalités qu'on peut utiliser au besoin.
Par exemple, pour générer un nombre aléatoire, on a utilisé la fonction choice du module
random.
Développer en Python

Un package est un ensemble de modules


Certains packages sont inclus dans python.
D'autres sont disponibles en téléchargement et sont installés manuellement.

Exemples de packages : pygame, paramiko, scapy


Un package est un dossier contenant le module "__init__.py"
On peut importer des modules, des packages ou des sous-packages.
Modules et API
OS
Exécuter des commandes systèmes.

SHUTIL
Manipuler des fichiers et dossiers.
1- Manipulation des fichiers et répertoires :

import os
import shutil

# Créer un répertoire
if not [Link]('.') :
[Link]('mon_dossier')
else :
print('Dossier déja existant')

# Copier un fichier du dossier en cours vers une destination


if [Link]('[Link]') :
[Link]('[Link]', 'mon_dossier')
else :
print('Fichier inexistant')

# Changer de répertoire
[Link]("mon_dossier")

# Lister les fichiers dans un répertoire


print([Link]('.'))

#Retourne le chemin du répertoire courant


print([Link]())
OS
Exécuter des commandes systèmes.

Parcours et informations système


Fonction Description
[Link](path) Vérifie si c’est un fichier
[Link](path) Vérifie si c’est un dossier
Donne la taille d’un fichier (en
[Link](path)
octets)
OS
Exécuter des commandes systèmes.

Interaction système / OS
Fonction Description
[Link](command) Exécute une commande système
[Link] Accède aux variables d’environnement
[Link] Donne le nom du système OS
Valeur de [Link] Système concerné
Linux, macOS, Unix-
'posix'
like
'nt' Windows
Jython (Python sur
'java'
JVM)
Exercice 1 :

Utiliser [Link] pour obtenir des informations sur l'environnement du système.

- Afficher les variables d'environnement disponibles sur ton système.


- Afficher la valeur de la variable d'environnement
HOME (sur Linux/macOS) ou USERPROFILE (sur Windows).
Solution :

import os

# Afficher toutes les variables d'environnement


for key, value in [Link]():
print(f"{key} = {value}")

# Afficher la variable d'environnement HOME ou USERPROFILE


if [Link] == 'nt': # Windows
print("User profile:", [Link]('USERPROFILE'))
else: # Linux/macOS
print("Home directory:", [Link]('HOME'))
Exercice 2 :

Afficher le contenu d’un répertoire.

- Changer de répertoire pour un dossier existant.


- Utiliser [Link]() pour exécuter la commande ls (sur Linux/macOS) ou dir
(sur Windows) pour lister les fichiers dans ce répertoire.

Fonctionne en exécutant le script dans le terminal Windows/Linux.


Solution :

import os

# Créer un nouveau dossier


if not [Link]('mon_dossier'):
[Link]('mon_dossier')

# Changer de répertoire
[Link]('mon_dossier')

# Exécuter une commande système pour lister les fichiers dans le répertoire
if [Link] == 'nt': # Si l'OS est Windows
[Link]('dir')
else: # Si l'OS est Linux ou macOS
[Link]('ls')
Exercice 3 :

Scanner et nettoyer un répertoire suspect

Créer un script Python qui analyse un dossier donné, affiche la taille totale de chaque
fichier, détecte les extensions potentiellement dangereuses, et propose de supprimer les
fichiers suspects.
import os
import shutil

# Liste des extensions de fichiers considérées comme potentiellement dangereuses


extensions_dangereuses = ['.exe', '.bat', '.vbs', '.cmd', '.js', '.scr']

# Fonction pour analyser un dossier


def analyser_dossier(dossier):
# Vérifier si le dossier existe
if not [Link](dossier):
print(f"Le dossier {dossier} n'existe pas.")
return

total_taille = 0
fichiers_suspects = [] # Liste pour stocker les fichiers suspects

# Parcourir les fichiers dans le dossier


for fichier in [Link](dossier):
chemin_fichier = [Link](dossier, fichier) #construire le path

# Vérifier si c'est un fichier


if [Link](chemin_fichier):
taille_fichier = [Link](chemin_fichier)
total_taille += taille_fichier

# Afficher la taille du fichier


print(f"Fichier : {fichier} | Taille : {taille_fichier} octets")

# Vérifier si le fichier a une extension dangereuse


is_dangereux = False
for ext in extensions_dangereuses:
if [Link](ext):
is_dangereux = True
break
if is_dangereux:
print(f"ALERT : {fichier} est un fichier potentiellement dangereux !")
fichiers_suspects.append(chemin_fichier)

# Proposer de supprimer le fichier


reponse = input(f"Voulez-vous supprimer ce fichier {fichier}? (oui/non) : ")
if [Link]() == 'oui':
try:
[Link](chemin_fichier)
print(f"Le fichier {fichier} a été supprimé.")
except Exception as e:
print(f"Erreur lors de la suppression de {fichier}: {e}")

# Afficher la taille totale des fichiers dans le dossier


print(f"\nTaille totale de tous les fichiers : {total_taille} octets")

# Demander à l'utilisateur de spécifier le dossier à analyser


dossier_a_analyser = input("Entrez le chemin du dossier à analyser : ")
analyser_dossier(dossier_a_analyser)
SOCKET
permet la communication réseau entre différentes machines via des connexions
TCP/UDP.
Server :
Client :
Exercice 1 :

Ecrire un script qui permet dire si le port 80 d’un hôte est ouvert ou non.

Améliorer le script pour qu’il affiche les ports ouverts d’un hôte.
import socket

client=[Link](socket.AF_INET,socket.SOCK_STREAM)
try:
[Link](("[Link]",80))
except ConnectionRefusedError :
print("Port ferme")
else:
print("Port ouvert")
import socket
PORT_DEBUT=75
PORT_FIN=85
client=[Link](socket.AF_INET,socket.SOCK_STREAM) # Création d'une instance
socket

port=PORT_DEBUT
print("Ports ouverts sur [Link]")
while port<PORT_FIN:
try:
[Link](("[Link]",port)) # Etablir la connexion avec le serveur.

except ConnectionRefusedError :
print(".",end="")
else:
print("\n"+str(port)+": ouvert")
client = [Link](socket.AF_INET, socket.SOCK_STREAM)
#une fois que le socket est ouvert, mm s'il est fermé avec shutdown et close,
# l'os met du temps a le fermer. Créer une nouvelle instance regle cela
port=port+1
Exercice 2 :

Ecrire un script qui permet une communication entre un client et un serveur.


La communication prend fin quand le client écrit ‘bye’.
THREADING
permet d'exécuter plusieurs tâches en parallèle, rendant les programmes plus réactifs et
performants.

Un thread (fil d'exécution) est une unité d'exécution d'un programme, permettant
d'exécuter plusieurs tâches simultanément dans un même processus. Chaque thread
fonctionne de manière asynchrone, ce qui permet au programme de réaliser plusieurs
opérations en parallèle, comme l'attente d'une réponse réseau ou le traitement de
données, tout en continuant à exécuter d'autres tâches.

Parfois, on souhaite attendre que le thread ait terminé son exécution avant de continuer
avec le programme principal, ou avant d'enchaîner sur un autre thread.

Ceci est possible avec [Link]().


Exemple : Créer un programme qui exécute deux compteurs en parallèle (un comptant de 1 à
5, l'autre de 6 à 10).
import threading
import time

def compteur1():
for i in range(1, 6):
[Link](1)
print(f"Compteur 1: {i}")

def compteur2():
for i in range(6, 11):
[Link](1)
print(f"Compteur 2: {i}")

# Création des threads


thread1 = [Link](target=compteur1)
thread2 = [Link](target=compteur2)

# Démarrage des threads


[Link]()
[Link]()

# Attendre que les deux threads terminent


[Link]()
[Link]()

print("Les deux compteurs sont terminés")


Exercice 1 :

Créer un script Python qui simule des téléchargements de fichiers en


utilisant des threads pour exécuter plusieurs téléchargements
simultanément.

Chaque téléchargement prend un temps aléatoire entre 1 et 5


secondes pour imiter un téléchargement réel.
import threading
import time
import random

# Fonction pour simuler un téléchargement


def telecharger(fichier):
print(f"Début du téléchargement de {fichier}...")
[Link]([Link](1, 5)) # Temps de téléchargement aléatoire
print(f"Téléchargement de {fichier} terminé!")

# Liste de fichiers à télécharger


fichiers = ["[Link]", "[Link]", "fichier3.mp4", "[Link]"]

# Création des threads pour chaque téléchargement


threads = []
for fichier in fichiers:
thread = [Link](target=telecharger, args=(fichier,))
[Link](thread)
[Link]()

# Attendre la fin de tous les threads


for thread in threads:
[Link]()

print("Tous les téléchargements sont terminés.")


Exercice 2 :

Ecrire un script qui permet une communication entre un client et un serveur.


La communication prend fin quand le client écrit ‘bye’.

Le serveur peut accepter plusieurs communications de clients.


import socket
import threading

def handle_client(socket_c,address_c):
print ("client connecte : ", address_c)
MessRecu=socket_c.recv(4096).decode()
print("Message recu : ", MessRecu)
MessAenvoyer=input("Message a envoyer : ").encode()
socket_c.send(MessAenvoyer)

server = [Link](socket.AF_INET,socket.SOCK_STREAM)

[Link](("[Link]",99))
[Link]()

while True :
print("Serveur a l'ecoute...")
client_C,info_C = [Link]()
client_hand = [Link](target=handle_client,args=(client_C,info_C))
client_hand.start()

Vous aimerez peut-être aussi