GUIDE COMPLET
Certification Python 3
Toutes les astuces, des plus simples aux plus avancees
Ce document couvre l'integralite du Module 1 : Python Basics, Structures de donnees,
Fichiers, Dictionnaires, Fonctions et le Mini-Projet Sentiment Classifier.
1. FONDAMENTAUX DU LANGAGE
1.1 Pourquoi Python ?
• Simplicite : indentation obligatoire (pas d'accolades {}), typage dynamique
• Multi-plateforme : meme code sur Windows, Mac, Linux
• Langage interprete (execution ligne par ligne) vs compile (C, Java)
• Usages principaux : Data Science, Machine Learning, Web (Django), scripts
ASTUCE EXAM : La difference interprete vs compile est souvent demandee.
Python = interprete => plus lent a l'execution mais plus facile a developper.
1.2 Types de donnees de base
Type Exemple Remarque
int x = 5 Entier, illimite en Python 3
float x = 3.14 Nombre decimal
str x = "Bonjour" Chaine de caracteres
bool x = True True ou False (majuscule !)
NoneType x = None Valeur nulle / absence de valeur
1.3 Operateurs — Priorite a connaitre
Operateur Syntaxe Exemple
Division entiere // 9 // 5 = 1
Modulo (reste) % 9 % 5 = 4
Puissance ** 2 ** 3 = 8
Division normale / 9 / 5 = 1.8
Multiplication * 3 * 4 = 12
Guide de Certification Python 3 — Anis Ben Ammar | Page 1
ORDRE DE PRIORITE (de haut en bas) :
1. ** (puissance) 2. * / // % 3. + - 4. Comparaisons 5. not 6. and 7. or
ASTUCE : print(2 ** 3 ** 2) = 512 car ** s'evalue de droite a gauche !
1.4 Conversions de types
int('123') # => 123
float('3.14') # => 3.14
str(42) # => '42'
int(3.9999) # => 3 (pas d'arrondi, troncature !)
bool(0) # => False / bool(1) => True
bool('') # => False / bool('abc') => True
PIEGE FREQUENTS : int(3.99) = 3, pas 4 ! Python TRONQUE, il n'arrondit pas.
PIEGE : bool('') = False mais bool('0') = True (chaine non vide = True)
1.5 Chaines de caracteres — Methodes essentielles
Methode Syntaxe Description
.lower() [Link]() Tout en minuscules
.upper() [Link]() Tout en majuscules
.strip() [Link]() Supprime espaces debut/fin
.split() [Link](",") Divise en liste
.replace() [Link]("a","b") Remplace (retourne nouvelle chaine
!)
.find() [Link]("abc") Index premiere occurrence (-1 si
absent)
.count() [Link]("e") Nombre d'occurrences
len() len(s) Longueur de la chaine
PIEGE TRES FREQUENT : Les strings sont IMMUTABLES !
[Link]('a','b') NE MODIFIE PAS s => il faut ecrire s = [Link]('a','b')
Ce bug apparait dans le code du cours (version 'optimisee' de strip_punctuation) !
2. CONTROLE DU FLUX
2.1 Conditions if / elif / else
if condition1:
# instructions si condition1 True
Guide de Certification Python 3 — Anis Ben Ammar | Page 2
elif condition2:
# instructions si condition2 True
else:
# instructions sinon
Operateurs de comparaison :
Operateur Signification Exemple
== egal x == 5
!= different x != 5
< > <= >= comparaison x < 10
in contenu dans 'a' in 'bonjour'
not in absent de 5 not in [1,2,3]
and et logique x > 0 and x < 10
or ou logique x == 0 or x == 1
not negation not (x > 5)
2.2 Boucles
Boucle for :
for element in liste: # parcourir une liste
print(element)
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(2, 10, 2): # 2, 4, 6, 8 (start, stop, step)
print(i)
for char in 'Python': # parcourir une chaine
print(char)
Boucle while :
while condition:
# instructions
# ne pas oublier de modifier la condition !
break et continue :
for i in range(10):
if i == 5:
Guide de Certification Python 3 — Anis Ben Ammar | Page 3
break # quitte la boucle
if i % 2 == 0:
continue # passe a l'iteration suivante
print(i) # affiche 1, 3 (s'arrete avant 5)
2.3 Le modele accumulateur — TRES IMPORTANT
PATTERN EXAM : Initialiser AVANT la boucle, modifier DANS la boucle.
C'est la base de presque tous les exercices de comptage / somme / collecte.
# Compter des elements
compteur = 0 # initialisation AVANT
for x in liste:
if condition:
compteur += 1 # modification DANS
# Accumuler dans une liste
resultat = [] # initialisation AVANT
for x in liste:
[Link](x*2) # modification DANS
3. STRUCTURES DE DONNEES — COEUR DU MODULE
3.1 Listes []
Ordonnee, mutable, iterable, peut contenir n'importe quel type.
Creer une liste :
ma_liste = [] # vide
ma_liste = [1, 2, 3] # avec elements
ma_liste = list(range(5)) # [0,1,2,3,4]
Methodes essentielles :
Methode / Syntaxe Description
[Link](x) Ajoute x en fin de liste
[Link]([x,y]) Ajoute plusieurs elements a la fin
[Link](i, x) Insere x a l'index i
[Link](x) Supprime la PREMIERE occurrence de x
[Link](i) Supprime et RETOURNE l'element a l'index i
del liste[i] Supprime l'element a l'index i (ne retourne rien)
[Link]() Trie EN PLACE (modifie la liste, ne retourne
rien)
Guide de Certification Python 3 — Anis Ben Ammar | Page 4
Methode / Syntaxe Description
sorted(liste) Retourne une NOUVELLE liste triee
[Link](reverse=True) Trie en ordre decroissant
[Link](key=len) Trie selon un critere (ex: longueur)
[Link](x) Compte le nombre de x dans la liste
[Link](x) Retourne l'index de la premiere occurrence de x
len(liste) Retourne la longueur
Slicing (TRES IMPORTANT) :
l = ['a','b','c','d','e']
l[0] # 'a' (premier element)
l[-1] # 'e' (dernier element)
l[1:3] # ['b','c'] (index 1 inclus, 3 exclus)
l[:3] # ['a','b','c'] (du debut jusqu'a 3)
l[2:] # ['c','d','e'] (de 2 jusqu'a la fin)
l[::2] # ['a','c','e'] (un element sur deux)
l[::-1] # ['e','d','c','b','a'] (inverse)
DIFFERENGE CLES : .sort() modifie la liste originale et retourne None.
sorted() ne modifie PAS la liste originale et retourne une nouvelle liste.
PIEGE : resultat = ma_liste.sort() => resultat vaut None !
COPIE de liste : new_l = [Link]() ou new_l = l[:] (pas new_l = l !)
3.2 Tuples ()
Comme les listes, mais IMMUTABLES (taille et contenu fixes apres creation).
mon_tuple = (1, 2, 3) # creation directe
mon_tuple = tuple([1, 2, 3]) # depuis une liste
tuple_un = (42,) # OBLIGATOIRE : virgule pour tuple a 1 element
# Tuple unpacking (tres utile)
a, b, c = (1, 2, 3) # a=1, b=2, c=3
x, y = 10, 20 # equivalent de (10, 20)
QUAND UTILISER un tuple ? Donnees qui ne doivent pas changer (coordonnees, config).
Avantage : acces plus rapide que les listes pour les grandes collections.
PIEGE : (42) n'est pas un tuple => c'est juste l'entier 42. Il faut (42,)
Guide de Certification Python 3 — Anis Ben Ammar | Page 5
3.3 Dictionnaires {}
Paires cle:valeur. Cles uniques. Mutable. Iterable.
# Creer un dictionnaire
d = {} # vide
d = {'nom': 'Alice', 'age': 25} # avec donnees
d = dict(nom='Alice', age=25) # autre syntaxe
# Acceder aux valeurs
d['nom'] # => 'Alice' (erreur si cle absente !)
[Link]('nom') # => 'Alice' (None si absente, pas d'erreur)
[Link]('prenom', 'N/A') # => 'N/A' (valeur par defaut)
# Modifier / Ajouter
d['age'] = 26 # modifie ou ajoute
del d['age'] # supprime la cle
[Link]('age') # supprime ET retourne la valeur
# Parcourir
[Link]() # toutes les cles
[Link]() # toutes les valeurs
[Link]() # paires (cle, valeur)
for cle, val in [Link](): print(cle, val)
# Tester l'existence
'nom' in d # True si la cle existe
PIEGE : d['cle_inexistante'] leve une KeyError !
SOLUTION : Toujours utiliser [Link]('cle') pour eviter les erreurs.
IMBRICATION possible : d = {'personne': {'nom': 'Ali', 'age': 30}}
Acces : d['personne']['nom'] => 'Ali'
3.4 Sets (Ensembles) {}
Elements uniques, non ordonnes. Utile pour supprimer les doublons.
# Creer un set
s = set() # vide (PAS {} qui cree un dict vide !)
s = {1, 2, 3} # avec elements
s = set([1, 2, 2, 3, 3]) # => {1, 2, 3} (doublons supprimes !)
# Operations
[Link]('python') # ajoute un element
Guide de Certification Python 3 — Anis Ben Ammar | Page 6
[Link]('python') # supprime (erreur si absent)
[Link]('python') # supprime sans erreur si absent
# Operations ensemblistes
a & b # intersection (elements communs)
a | b # union (tous les elements)
a - b # difference (dans a mais pas dans b)
# Astuce : obtenir liste sans doublons et triee
sorted(set([3,1,2,1,3])) # => [1, 2, 3]
3.5 Comparaison des structures — A MEMORISER
Structure Ordonnee Mutable Doublons Acces
Liste [] Oui Oui Oui index ou iteration
Tuple () Oui NON Oui index ou iteration
Dict {} Non* Oui Cles non cle (d['k'])
Set {} Non Oui NON iteration seule
3.6 List Comprehension
Syntaxe concise pour creer des listes. TRES frequente dans les examens.
# Syntaxe de base
[expression for element in iterable]
# Avec condition
[expression for element in iterable if condition]
# Ternaire (if/else dans l'expression)
[expr_si_vrai if condition else expr_si_faux for el in liste]
# Exemples concrets
carres = [x**2 for x in range(5)] # [0,1,4,9,16]
pairs = [x for x in range(10) if x%2==0] # [0,2,4,6,8]
cubes_pairs = [x**3 if x%2==0 else x**2 for x in range(5)]
# Dict comprehension
longueurs = {mot: len(mot) for mot in ['chat','chien','oiseau']}
Guide de Certification Python 3 — Anis Ben Ammar | Page 7
4. FICHIERS EN PYTHON
4.1 Ouvrir et fermer un fichier
# Methode classique (penser a fermer !)
f = open('[Link]', 'r') # ouvre en lecture
contenu = [Link]()
[Link]() # OBLIGATOIRE
# Methode recommandee (fermeture automatique)
with open('[Link]', 'r') as f:
contenu = [Link]() # f est ferme automatiquement apres
4.2 Modes d'ouverture — A MEMORISER
Mode Description
'r' Lecture seule. Erreur si le fichier n'existe pas.
'w' Ecriture. CREE le fichier ou EFFACE le contenu existant !
'a' Ajout. Ecrit a la FIN du fichier. Cree si n'existe pas.
'r+' Lecture ET ecriture. Le fichier doit exister.
'w+' Lecture ET ecriture. Efface le contenu existant.
PIEGE : Ouvrir un fichier en 'w' sur un fichier existant EFFACE tout son contenu !
Pour ajouter du contenu sans effacer => utiliser 'a' (append)
4.3 Lire un fichier
with open('[Link]', 'r') as f:
tout = [Link]() # tout le fichier en une seule chaine
une_ligne = [Link]() # une seule ligne (avec \n a la fin)
lignes = [Link]() # liste de toutes les lignes
# Parcourir ligne par ligne (le plus efficace)
with open('[Link]', 'r') as f:
for ligne in f:
print([Link]()) # .strip() enleve \n
4.4 Ecrire dans un fichier
with open('[Link]', 'w') as f:
[Link]('Premiere ligne\n') # write() n'ajoute pas \n auto !
[Link]('Deuxieme ligne\n')
Guide de Certification Python 3 — Anis Ben Ammar | Page 8
# Ecrire un CSV manuellement
with open('[Link]', 'w') as f:
[Link]('Col1,Col2,Col3\n') # en-tete
[Link]('val1,val2,val3\n') # donnees
ATTENTION : [Link]() n'ajoute PAS de saut de ligne automatiquement !
Toujours ajouter '\n' a la fin de chaque ligne manuellement.
ASTUCE CSV : Utiliser ',' pour separer et '\n' pour la fin de chaque ligne.
4.5 Package os et shutil
import os
[Link]() # repertoire courant
[Link]('.') # liste les fichiers
[Link]('[Link]') # teste si le fichier existe
[Link]('[Link]') # supprime un fichier
import shutil
[Link]('[Link]', '[Link]') # copie un fichier
[Link]('[Link]', '[Link]') # deplace / renomme
[Link]('dossier') # supprime un dossier
5. FONCTIONS
5.1 Syntaxe de base
def nom_fonction(param1, param2):
# corps de la fonction
return valeur # optionnel
# Appel
resultat = nom_fonction(arg1, arg2)
5.2 Types de parametres
# Valeurs par defaut
def saluer(nom, message='Bonjour'):
print(message, nom)
saluer('Alice') # => 'Bonjour Alice'
saluer('Alice', 'Salut') # => 'Salut Alice'
Guide de Certification Python 3 — Anis Ben Ammar | Page 9
# Arguments nommes (keyword arguments)
def infos(nom, age, ville):
pass
infos(age=25, ville='Tunis', nom='Ali') # ordre libre si nommes
# Nombre variable d'arguments
def somme(*args): # *args => tuple
return sum(args)
somme(1, 2, 3, 4) # => 10
def config(**kwargs): # **kwargs => dictionnaire
print(kwargs)
config(nom='Ali', age=25) # => {'nom': 'Ali', 'age': 25}
5.3 Variables locales vs globales — TRES IMPORTANT
x = 10 # variable GLOBALE
def ma_fonction():
x = 5 # variable LOCALE (different de x global !)
print(x) # => 5
ma_fonction()
print(x) # => 10 (globale inchangee)
# Pour MODIFIER une variable globale depuis une fonction :
def modifier_global():
global x
x = 99
modifier_global()
print(x) # => 99
REGLE : Une variable cree DANS une fonction est locale (invisible dehors).
REGLE : Pour modifier une variable globale dans une fonction => mot-cle 'global'.
PIEGE : Sans 'global', assigner x=99 dans une fonction cree une nouvelle variable locale !
5.4 Fonctions lambda
# Syntaxe : lambda parametres: expression
double = lambda x: x * 2
Guide de Certification Python 3 — Anis Ben Ammar | Page 10
double(5) # => 10
# Avec plusieurs parametres
somme = lambda a, b: a + b
somme(3, 4) # => 7
# Usage frequent : tri avec cle
mots = ['banane', 'kiwi', 'fraise', 'abricot']
sorted(mots, key=lambda m: len(m)) # tri par longueur
# Avec map() et filter()
list(map(lambda x: x**2, [1,2,3,4])) # [1,4,9,16]
list(filter(lambda x: x>2, [1,2,3,4])) # [3,4]
5.5 Modules et imports
import math # importe le module
[Link](16) # utilise avec le prefixe
from math import sqrt # importe une fonction specifique
sqrt(16) # utilise sans prefixe
from math import * # importe tout (deconseille en prod)
import random
[Link]() # nombre aleatoire entre 0 et 1
[Link](1, 10) # entier aleatoire entre 1 et 10
6. MINI-PROJET : SENTIMENT CLASSIFIER
6.1 Vue d'ensemble
Objectif : Analyser des tweets et calculer un score de sentiment.
1. Lire les mots positifs et negatifs depuis des fichiers .txt
2. Nettoyer chaque mot (supprimer la ponctuation, mettre en minuscules)
3. Compter les mots positifs et negatifs dans chaque tweet
4. Calculer le score net = score_pos - score_neg
5. Ecrire les resultats dans un fichier CSV
6.2 Fonction strip_punctuation
punctuation_chars = ["'", '"', ',', '.', '!', ':', ';', '#', '@']
# VERSION CORRECTE (boucle avec liste)
Guide de Certification Python 3 — Anis Ben Ammar | Page 11
def strip_punctuation(s):
for c in punctuation_chars:
s = [Link](c, '') # OBLIGATOIRE : reassigner s !
return s
# VERSIONS INCORRECTE DU COURS (bug !)
def strip_punctuation_bug(s):
for c in punctuation_chars:
[Link](c, '') # BUG : sans s = ... => rien ne change !
return s # retourne s inchange
PIEGE DU COURS : La 'version optimisee' a un bug !
[Link](c,'') NE MODIFIE PAS s car les strings sont immutables.
Il FAUT ecrire s = [Link](c, '') pour que ca fonctionne.
6.3 Fonctions get_pos et get_neg
positive_words = []
with open('positive_words.txt') as f:
for ligne in f:
if ligne[0] != ';' and ligne[0] != '\n':
positive_words.append([Link]())
def get_pos(phrase):
mots = [Link]() # decouper en mots
score = 0
for mot in mots:
mot_propre = strip_punctuation(mot).lower() # nettoyer + minuscules
if mot_propre in positive_words:
score += 1
return score
# get_neg est identique avec negative_words
6.4 Code principal — Lecture et ecriture CSV
source = open('project_twitter_data.csv', 'r')
sortie = open('resulting_data.csv', 'w')
# Lire et ignorer l'en-tete
[Link]()
Guide de Certification Python 3 — Anis Ben Ammar | Page 12
# Ecrire l'en-tete du fichier de sortie
[Link]('Number of Retweets,Number of Replies,
Positive Score,Negative Score,Net Score\n')
# Traiter chaque ligne
for ligne in [Link]():
parties = [Link](',')
texte = parties[0]
retweets = parties[1]
reponses = parties[2].replace('\n', '') # enlever le saut de ligne
pos = get_pos(texte)
neg = get_neg(texte)
net = pos - neg
[Link](retweets+','+reponses+','+str(pos)+','+str(neg)+','+str(net)+'\n')
[Link]()
[Link]()
7. BIBLIOTHEQUES CLES
7.1 Pandas
import pandas as pd
# Lire un CSV
df = pd.read_csv('[Link]')
# Infos de base
[Link]() # 5 premieres lignes
[Link] # (nb_lignes, nb_colonnes)
[Link] # noms des colonnes
[Link]() # statistiques
# Acceder aux donnees
df['colonne'] # une colonne
df[df['age'] > 25] # filtrer
7.2 NumPy
import numpy as np
Guide de Certification Python 3 — Anis Ben Ammar | Page 13
arr = [Link]([1, 2, 3, 4, 5])
arr * 2 # [2, 4, 6, 8, 10] (operations vectorisees)
[Link](arr) # moyenne
[Link](arr) # somme
[Link](arr) # maximum
8. PIEGES LES PLUS FREQUENTS A L'EXAMEN
PIEGE 1 : Strings immutables
[Link]('a','b') ne modifie pas s => toujours faire s = [Link]('a','b')
PIEGE 2 : .sort() vs sorted()
[Link]() => modifie EN PLACE, retourne None
sorted(liste) => retourne une NOUVELLE liste, liste originale inchangee
NE PAS faire : nouvelle = [Link]() => nouvelle sera None !
PIEGE 3 : Copie de liste
b=a => b et a pointent le MEME objet ! modifier b modifie a
b = [Link]() => copie independante
b = a[:] => copie independante (slicing complet)
PIEGE 4 : Set vide vs Dict vide
{} cree un DICTIONNAIRE vide, PAS un set !
set() est la seule facon de creer un set vide
PIEGE 5 : int() tronque, n'arrondit pas
int(3.9) = 3 (pas 4 !)
Pour arrondir : round(3.9) = 4
PIEGE 6 : Boucle while infinie
Ne pas oublier de modifier la condition a chaque iteration !
Ou utiliser break pour sortir si une condition est atteinte.
PIEGE 7 : dict['cle_absente'] leve une KeyError
Utiliser [Link]('cle') qui retourne None sans erreur
Guide de Certification Python 3 — Anis Ben Ammar | Page 14
Ou [Link]('cle', valeur_par_defaut)
PIEGE 8 : Tuple a un seul element
(42) n'est pas un tuple => c'est juste 42 entre parentheses
(42,) est un tuple (virgule obligatoire)
9. RECAP EXPRESS — DERNIERE MINUTE
A RETENIR ABSOLUMENT FONCTIONS INCONTOURNABLES
✓ Strings = immutables len() range() type() print()
✓ Liste = ordonnee + mutable int() str() float() bool()
✓ Tuple = ordonne + immutable append() extend() insert()
✓ Dict = cle:valeur + mutable sort() sorted() reverse()
✓ Set = unique + non ordonne split() strip() replace()
open() read() write() close()
✓ sort() retourne None
keys() values() items() get()
✓ {} = dict vide, set() = set vide
map() filter() lambda
✓ int(3.9) = 3 (troncature)
Bonne chance a l'examen !
Guide de Certification Python 3 — Anis Ben Ammar | Page 15