Académique Documents
Professionnel Documents
Culture Documents
1 Types de base
Les types les plus simples que l'on peut utiliser et manipuler sont :
Opération Notation
In [ ]: 3*6 # Multiplication
In [ ]: (8-2)*5
In [ ]: 2**5 # exposant
Opération Notation
Logique and,or,not()
In [ ]: 1<=2
In [ ]: 0==-1
In [ ]: 3>1 or 12==5
In [ ]: not(1==-1)
1.2 Variables
Une variable est un identifiant d'un emplacement mémoire dans lequel on stocke une valeur.
• Toute variable est crée à partir du moment où elle est affectée par l'opérateur
d'assignation = (à ne pas confondre avec == ). Son type est automatique sans le
besoin de le préciser : typage dynamique.
• Le nom de la variable est toujours à gauche de l'opérateur = .
• Le nom de la variable doit toujours commencer par une lettre majuscule ou minuscule
et peut être combinaison de lettre et de chiffres sauf les caractères spéciaux, comme
*,&,#,espace, ...
Par exemple a3X est valide, mais 0a3# non valide
2 of 24
In [ ]: x=1.5 # typage dynamique
type(x)
In [ ]: # le casting automatique
x=2 # int
y=1.5 # float
z=x+y # x --> float --> z est float
print(z)
type(z)
In [ ]: print(z)
In [ ]: (1+z**2)/(2-z.conjugate())
In [ ]: print(z,y)
z*y #operation sur complexes
In [ ]: print(n)
In [ ]: n+3 # erreur
In [ ]: # ou bien directement :
n=int(input("donner un nombre entier : "))
In [ ]: type(n)
In [ ]: n-3
2 Objets itérables
Ce sont des objets regroupant plusieurs éléments :
• les chaines,
• les listes,
• les tuples,
• les ensembles,
• les dictionnaires.
4 of 24
In [ ]: a='Ali'
b="a un"
c="ordinateur"
In [ ]: d=a+b+c
print(d) # cancatenation de chaînes
In [ ]: d[2:8]
In [ ]: ch="ma chaine"
In [ ]: x=[-1,3,0.5,'ok',-5,3]
In [ ]: print(x)
In [ ]: type(x)
In [ ]: x[3]
In [ ]: print(x[-2],x[-5])
5 of 24
In [ ]: x[2]=[0.5,"6"] #une liste est modifiable ou mutable
In [ ]: x[2]
In [ ]: print(x)
In [ ]: print(x[2][1])
• len(ls) : une fonction utile qui renvoie le nombre d'éléments d'une liste ls
• range(...) : constructeur d'un objet appelé intervalle formé d'entiers selon une
progression arithmétique. cet objet est souvent employé dans l'instruction for (voir
chapitre 2)
range(start,stop,step) # start,start+step,start+2step,
start+3step, ...etc
# attention! l'extrémité stop n'est jamais incluse
• Pour récuperer la liste des éléments de range , on applique la fonction list( ) à l'objet
range.
In [ ]: list(a)
In [ ]: list(range(-4,4))
In [ ]: x=[-6,5,4,'xy',-34]
In [ ]: print(x)
6 of 24
In [ ]: x.append(-9) #ajoute un élément à la fin de la liste
print(x)
In [ ]: l=[-3,4,6]
print(l+x) #cancaténation
print(l) # l non modifiée
In [ ]: l=[-3,4,6]
l.extend(x) # etendre l à la fin
print(l)
Slicing : On peut accéder aux objets itérables comme les listes par tranches (slices
en anglais)
In [ ]: ls=[4,6,3,'a',-1,3,12.5,'hello']
ls[1:6] # sous-liste d'éléments à partir de l'indice 1 à 5
In [ ]: # Plus généralement :
# extraire une tranche d'une liste t : t[start:stop:step] (stop exclu)
t=list(range(4,70,2))
print(t)
t[5:30:4]
In [ ]: print(t)
Copie de listes : l'opération assignation entre deux objets listes n'est pas une copie
7 of 24
In [ ]: i=-2
j=i # copie de variables simples
print('i = ',i,'et j = ',j)
j=2
print('i = ',i,'et j = ',j) # j modifiée, i inchangée
Remarque : cette méthode ne marche qu'au premier niveau : si on a des listes imbriquées, il
faut faire appel à la fonction deepcopy du module copy (voir notion de modules et
fonctions d'un module plus loin)
2.3 Tuples
_2/10/2023_
Collection ordonnée non modifiable d'éléments hétérogènes délimités par des virgules et
emballés (non nécessairement) par des parenthèses : (elem1,elem2,...) .
Ce type de données admet les mêmes méthodes que les listes à l'exception de celles de
modification.
x+t # fonctionne
Remarque.
• On peut transformer n'importe quelle liste en tuple par la fonction tuple( ) (et vice-versa
par list( ))
• Les tuples sont moins flexibles que les listes à cause de l'immutabilité. Leur intérêt
réside dans le fait qu'ils occupent moins d'espace mémoire que les listes.
In [ ]: x=[1,"z",-5,2]
y=tuple(x)
print(y)
z=list((3,-5,"foo"))
print(z)
In [ ]: lst=list(range(-5,10,2))
print(lst)
en=enumerate(lst)
print(en)
'''
remarquer que en n'est pas en fait une liste
Pour le transformer en liste de couples (indice,valeur)
il faut appliquer le constructeur list()
'''
list(en) # start par defaut =0
2.4 Ensembles
Collection non ordonnée modifiable d'éléments hétérogènes uniques emboitée entre
accolades {elem1,elem2, ... } .
Interêt : effectuer des opérations sur ces objets propres aux ensembles au sens
mathématique (intersection, union, ...)
9 of 24
In [ ]: E1={'a','b'}
E1
In [ ]: E2={15,'b','c'}
In [ ]: E4=E1 | E2 # union
E4
In [ ]: s.add(6)
s
D'autres opérations peuvent être effectuées sur les ensembles (voir help('set') )
In [ ]: help('set')
2.5 Dictionnaires
Les dictionnaires sont des objets pratiques lorsq'on veut manipuler des structures
complexes que les listes ou les tuples présentent des limites.
Un dictionnaire est une collection non ordonnés d'objets modifiables (comme les listes),
mais indexés par clé au lieu de la position. La forme des dictionnaires est :
{cle1:valeur1,cle2:valeur2,...}
Les clés doivent être uniques : deux éléments ne doivent pas partager la même clé.
In [ ]: #Exemple :
animal1={"nom":"girafe","taille":5.0,"poids":1100}
print(animal1)
print(voiture)
In [ ]: print(animal1['poids'])
10 of 24
On peut rajouter ou supprimer des clés
In [ ]: voiture['hauteur']=1.70
print(voiture)
del voiture['clim']
print(voiture)
In [ ]: voiture.keys()
In [ ]: voiture.values()
Exercice 1.1
Exercice 1.2
Exercice 1.3 Etant donné une liste L de nombres (éventuelement dupliqués), écrire des
instructions utilisant les ensembles et les listes pour obtenir le second nombre le plus élevé
(on pourrait utiliser la méthode sort() des listes. Par exemple si L=[10, 20,
54.36,2.5, 54.36, -45, 54.36, 25, 99, 99] , l'exécution donne :
11 of 24
Exercice 1.4
1. Définir le dictionnaire
d = {
'etudiant':'Rizki Ayoub',
'topologie': 11, 'algebre': 9.5,
'calcul differentiel': 9,
'integration':8,
'Info': 12} .
2. En utilisant uniquement la fonction list et la méthode values des dictionnaires,
calculer la moyenne des notes obtenues de la valeur de la cle 'etudiant' pour
afficher le message :
la moyenne de Rizki Ayoub est : ...
5. Programmation
Les instructions de programmation est l'ensemble des commandes et expressions qui
permettent de contrôler le flux de l'exécution d'un algorithme. A partir du moment où la liste
des instructions pour une tâche donnée s'allonge, le mode interactif n'est pas adapté. nous
allons utiliser un éditeur de texte, de préférence en environnement intégré comme idle (sous
Linux), ou spyder (sous anaconda,Linux ou Windows) pour rédiger ce qu'on appelle les
scripts et les modules (voir plus loin les définitions plus précises). Un fichier d'instructions
est un fichier texte ASCII nommé avec l'extenstion .py.
• sous Linux idle à partir du menu Applications ou bien dans un Terminal système.
• sous Windows, anaconda puis spyder.
• familiarisez-vous avec l'environnement de votre choix.
• Python comme d'autres langages permet d'automatiser des tâches plus compliqées à
l'aide des instructions de contrôle.
Pour Python : dans un même bloc, deux instructions de même profondeur logique doivent
avoir strictement la même indentation.
instruction_1
...
instruction_N
en-tete1: # bloc 1
instruction
...
instruction
en-tete2: # autre bloc dans bloc 1
ici
et ici
...
ici # retour au bloc 1
...
instruction # retour au niveau avant bloc 1
13 of 24
Pour former les conditions logique on utilise :
Opérateur Action
x==y égalité
x in y x appartient à y : chaine,liste,tuple,...
On peut former des expressions booléennes plus complexes à l'aide les opérateurs de
logique : and,or,not
if a <b:
print('a plus petit que b ')
else:
print('a plus grand que b ')
Plus généralement :
if condition1:
bloc_instructions
elif condition2:
bloc_instructions
.
.
.
elif conditionN:
bloc_instructions
else:
bloc_instructions
• for : l'instruction for est adaptée pour parcourir n'importe quelle séquence (par ex. une
liste ou une chaîne), dans l'ordre où ils apparaissent dans la séquence.
In [ ]: for i in range(1,11):
print(i**2,end=' ') # remarquer l'option end de print
In [ ]: '''
On veut construire une liste
contenant les cubes des entiers entre 1 et 30.
'''
# Première manière :
l1=[] # initialiser liste vide
for j in range(1,31):
l1.append(j**3)
print(l1)
• while : L'instruction while est une itération plus générale. Elle exécute le bloc indenté
tant que la condition de test est réalisée.
while condition:
bloc_instructions
15 of 24
In [ ]: a=10
while a>0.1:
print(a)
a=a/5
Rupture de boucle :
• break : interrompre
• continue : court-circuiter
bloc_boucle
.
.
.
break #interruption de boucle
...
continue # passer au tour suivant
forme plus générale : les boucles for ou while peuvent posséder une clause else, c.a.d. ne
s'exécute que si la boucle se termine normalement (sans interruption)
for i in sequence:
if i == cible:
sauve = i
break # voici l’interruption
16 of 24
In [ ]: for x in range(1,8):
y=(x**2-4)/(x-2)
print(y)
# produit erreur lorsque x=2 et l'exécution s'arrête
In [ ]: for x in range(1,8):
try:
y=(x**2-4)/(x-2)
print(y) # cas normal
except:
print(4) # gere l'exception en x=2
Pour des informations plus complète sur la gestion des erreurs, consulter la doc à ce sujet.
Exercice 1.5
(2n − 3)2
La suite (un )n ∈ N, n ≥ 1 définie par un = et k est un entier donné.
(n + 1)2
2. Ecrire quelques quelques instructions pour afficher le couple (n0 , un0 ), où n0 est le plus
petit entier tel que pour un nombre réel ϵ > 0 donné au clavier, on a 4 − un0 < ϵ.
Tester pour ϵ = 10−3 , ϵ = 10−8 . Conclure.
Exercice 1.6
Soit la liste Ls=[-3,5,-6,14,-2,5,3,-11] . On veut réaliser ce qui suit :
idication : effectuer une double boucle sur ls et remplir au fur et a mesure une liste Lc
de couples trouvés .
"""
Documentation de la fonction (docstrings)
"""
Caractéristiques:
• Permet d'encapsuler des instructions afin de les réutiliser sans la nécessité de les
réécrire.
• Découpe une tâche en morceaux aux spécifications bien précises. Ce qui rend le code
plus lisible et plus facile à maintenir.
In [ ]: #Exemple
def som(a,b):
s=a+b
return(s) # <-- retour de résultat
• le nom commence toujours par une lettre et peut contenir des chiffres
Attention! : il est interdit d'utiliser les caractères spéciaux : #,&,@,..
• Par convention de lisibilité, on commence le nom par une lettre miniscule et composer
avec des majuscules et (ou) des chiffres. Par ex. triBulle
• Le nom est sensible à la casse : Par ex. python reconnait print() et non
Print() .
18 of 24
• On appelle la fonction dans un code appelant en mentionnant son nom exacte et en lui
trasmettant les paramètres effectifs dans le même ordre que la définition :
nomFonction(paramètres effectifs) .
• La transmission des paramètres effectifs au moment de l'appel se fait par valeur (ou
copie des valeurs effectives vers les paramètres formels).
Remarque importante :
In [ ]: def som2(a,b):
s=a+b
print(s)
In [ ]: x=som2(5,-7)
print(x) # None est une primitive interne qui n'a pas de type
x-1
Remarque importante: l'objet None renvoyé par le code précédent est une primitive
interne qui n'a aucun type de stockage. C'est souvent la source de plusieurs erreurs de
traitements dans Python
19 of 24
In [ ]: def som3(a,b):
s=a+b
return(s)
s1=a+2*b
return(s1)
x=som3(5,-7)
print(x)
print(x-1)
In [ ]: def somProd(a,b):
s=a+b
p=a*b
return(s,p) # retour de résultat multiple
#test
r,s=4,8
somProd(r,s) # copie de r,s dans a,b
print(t,u)
In [ ]: # ou bien
v=somProd(r,s) # ici v est automatiquement un tuple
print(v)
print(v[0])
print(v[1])
Remarques :
In [ ]: #argument fonction
def f1(x):
return x+1
def g(func,t):
s=func(t**3)
return(s)
In [ ]: g(f1,-3)
20 of 24
paramètres obligatoires, ou optionnels:
In [ ]: def diff(a,b):
c=a-b
return(c)
In [ ]: diff(3,5)
Les paramètres optionnels sont spécifiés par mots clefs dans l'entête et doivent être placés
après les paramètres obligatoires dans la définition de la fonction.
In [ ]: def myfunc(m,n,r="science"):
# m,n obligatoires,r optionnel
return([m,n,r])
In [ ]: myfunc(5,4)
In [ ]: myfunc(5,4,3)
In [ ]: myfunc([3,4,7],('3',[3,12]))
Si on veut appeler dans un ordre différent il faut expliciter le mot cle au moment de l'appel :
In [ ]: def somme(*args):
resu=0
for nombre in args:
resu=resu+nombre
return(resu)
print(somme(23))
print(somme(2,3,-8))
print(somme(1,-2,4,5,-1))
21 of 24
Expression lambda : c'est une fonction anonyme (sans nom) formée par le mot clef
lambda et d'instructions simples en une seule ligne. C'est une construction utile dans
certaines situations. La syntaxe est :
print(l)
Une autre manière plus compacte sans structure de boucle est l'utilisation d'une fonction
lambda avec la fonction map(fonction,sequence) qui distribue une fonction sur une
séquence :
Portée des variables : il existe dans python des variables à portée globale et des variables
à portée locale.
• Par exemple toute variable définie dans une fonction n’est accessible que par la
fonction elle-même. On parle de variable locale.
• Une variable définie à l'extérieur de la fonction est visible par la fonction, mais ne peut
pas a la modifier. C'est une variable globale.
22 of 24
In [ ]: def mask(a):
b=a+1 #b locale
a=a-1 #a modife localement
print("a = ",a,"b = ",b)
a=4
b=-3
mask(a)
print("a = ",a)
print("b = ",b)
Si on veut qu'une fonction modifie une variable définie en dehors de sa portée, il faut
déclarer celle-ci dans la fonction à l'aide du mot cle global
In [ ]: def maskbis(a):
global b #permet de modifier le b global
b=a+1
maskbis(a)
print("b = ",b)
Récursivité : une fonction récursive est une fonction qui peut appeler elle même. Par
exemple, considérons la suite u1 = 4.0, un+1 = (un + 3)/2 qui converge vers 3. On peut
la définir comme suit :
In [ ]: def f(n):
if n==1: return(4.)
y=(3+f(n-1))/2
return(y)
Docstrings: les docstrings sont les commentaires qui expliquent la tâche de la fonction
placés entre l'en-tête et le début des instrunctions. Ces informations sont visibles au niveau
de l'interpréteur par la commande help() .
In [ ]: def somDiff(x,y):
"""
fournit la somme et la difference
de 2 nombres arbitraires
23 of 24
Exercice 1.7
1. Programmer de manière recursive une fonction facto (n) qui renvoie la valeur n!. On
tient compte de la convention 0! = 1 et on doit tester si on transmet un entier n ≥ 0.
Dans le cas contraire, la fonction affiche le message suivant :
erreur : votre nombre n'est pas valide! Donner un entier >=0 .
Tester sur n = −1, n = 0, n = 6.
x3 x5 x2k−1
sin(x) ≈ x − + + ⋯ + (−1)(k−1) , k≥1 (⋆)
3! 5! (2k − 1)!
24 of 24