Cour Farouk Python1
Cour Farouk Python1
Faculté Polydisciplinaire
BENI MELLAL
Algorithmique et Programmation
Python
2025/2026
Les langages de programmation
Le langage de programmation est l'intermédiaire entre
l'humain (anglais)et la machine(binaire).
Il existe des milliers de langages de niveau élevé, pour
tous les goûts et toutes les applications.
Quelques uns des plus connus: C, C++, Java, PHP,…
Les langages de programmation
Haut niveau : proche de l’homme, plus facile à
apprendre et à utiliser grâce à son haut niveau
d'abstraction qui masque les détails techniques du
système
➢ C++, Java,Python, PHP,…
Bas niveau : proche de la machine offrant plus de
contrôle et d'efficacité mais nécessitant une grande
connaissance de l'architecture matérielle.
➢ Assembleur
Compilation et interpréteur
Les règles :
Commencer par effectuer les opérateurs de plus haut
niveau de priorité ;
Lorsque plusieurs opérateurs ont le même niveau de
priorité, effectuer les opérations en commençant par
les opérateurs les plus à gauche ...
sauf lorsqu’il s’agit de l’opérateur puissance (où on
commence par les opérateurs les plus à droite).
Les nombres : entiers et flottants
Exemple :
-3**2//2+3*-7-5
3**2 = 9
-9//2 + 3*-7 – 5
-9 // 2 = -5 (car division entière en Python → arrondi
vers le bas).
-5 + 3*-7 – 5
3 * -7 = -21
-5 + (-21) – 5
-5 - 21 - 5 = -31
Les chaînes de caractères:
les opérateurs:
+ : l’opérateur de concaténation ;
* : l’opérateur de duplication.
Les chaînes de caractères:
Exemple:
Les chaînes de caractères:
Conversions explicites:
Les chaînes de caractères:
Attention!
Les chaînes de caractères:
Exemple :
Les variables
La plupart des langages de programmation permettent
d’associer une valeur donnée à un nom.
Par exemple en python, on peut écrire :
Taille=8
Cette instruction associe le nom taille à la valeur 8. Après cette
instruction, lorsque Python rencontrera le mot taille, il
l’interprétera comme l’entier 8. On dit qu’une variable a été
définie.
Les variables
L’instruction qui associe un nom à une valeur est
appelée une définition.
Une définition crée une variable.
Une variable est caractérisée par une valeur, un type
et un nom (appelé aussi identificateur).
Cet identificateur peut être constitué de lettres
(minuscules ou majuscules), de chiffres et de _
(underscore). Le premier caractère ne doit pas être un
chiffre.
Les variables
Exemple:
Les variables
L’opérateur =, malgré sa ressemblance avec l’égalité
mathématique, n’est pas symétrique. Autrement dit a
= b n’est pas équivalent à b = a.
Le membre de gauche doit être constitué d’une
variable.
Le membre de droite peut être constitué de
n’importe quelle expression composée d’une ou
plusieurs constantes ou variables.
Le membre de gauche reçoit la valeur du membre de
droite
Les variables
Les variables
Opérateurs:
Dans certains langages (en particulier les langages
fonctionnelles), les variables gardent la même valeur
pendant tout le programme (on parle, malgré tout de
variables). Dans d’autres langages (en particulier en
python), on peut redéfinir une variable, c’est à dire y
associer une nouvelle valeur :
Les variables
Opérateurs
Les variables
Attention: Les variables de type chaîne de caractères
n’ont pas besoin d’être mis entre guillemets.
Les variables
Réciproquement, python essaiera d’interpréter comme
une variable toute suite de caractères qui ne se trouve
pas entre des apostrophes ou des guillemets. Par
exemple :
Les variables
L’utilité des variables
Stocker pour ne pas refaire le calcul lorsqu’un même calcul
doit être fait à plusieurs endroits d’un programme, il vaut
mieux effectuer le calcul une fois et de mettre le résultat
dans une variable.
Les valeurs littérales ne doivent apparaître qu’une seule
fois (Une valeur littérale est une valeur apparaissant dans
un programme sous la forme d’un chiffre. Une chaîne de
caractère littérale est une chaîne entourée d’apostrophe
ou de guillemets. Les données dans un programme
apparaissent soit sous la forme de valeurs littérales soit
sous la forme de variables.)
La lisibilité : rendre le programme plus lisible
Exemple :
Un conducteur souhaite estimer le coût total de son
voyage entre deux villes aller-retour.
➢ Sa voiture consomme 4,57 litres de carburant pour
100 km.
➢ La distance entre les deux villes est de 613 km.
➢ Le prix du carburant est de 1,62 dirhams par litre.
➢ Le trajet comprend également un péage de 32,40
dirhams.
Les variables
Exemple
Nous voulons calculer le coût du voyage en utilisant des
variables.
D’abord, nous enregistrons les valeurs du problème
dans des variables :
la voiture fait 4,57 litres au 100 km.
la distance entre les deux villes est de 613 km.
le prix du carburant est de 1,62dh le litre.
le péage coûtera 32,40dh.
Les variables
Pour les égalités "==", chaque caractère deux à deux doit être égal
pour retourner True et pour les différences "! =", il suffit d’un caractère
différent entre les deux chaînes pour retourner True.
Le type booléen
Pour les inégalités strictes (">", "<"), les premier caractères de chaque
chaînes sont comparés, s’ils sont différents, l’expression peut être
évaluée (True ou False). Sinon les deux caractères suivants sont
comparés, etc.
Si une chaîne est plus longue que l’autre et que la comparaison n’est
plus possible car il manque un caractère, la chaîne la plus longue est
considérée supérieure à la chaîne plus courte.
Le type booléen
Dans le premier cas, la comparaison du "j" et "J" permet de conclure
car ord("j") > ord("J").
Dans le troisième cas, tous les caractères sont égaux deux à deux, sauf
le dernier de la première chaine qui ne peut pas être comparé. La
première chaîne étant plus longue que la deuxième, elle est
considérée comme supérieure.
Le type booléen
L’opérateur "in" renvoie True si chaque caractère de l’opérande gauche est
présent dans le même ordre dans l’opérande droit. Inversement, l’opérateur
"not in" renvoie True si la chaîne de caractère de l’opérande gauche n’est pas
présente caractère par caractère dans l’opérande droit.
Le type booléen
La comparaison de chaînes de caractères n’est pas forcément intuitive. Il
faut bien faire attention à la constitution des chaînes de caractères que
vous comparez avant de vous en servir dans vos programmes. Si elles ne
contiennent pas que des lettres par exemple, le résultat pourrait vous
surprendre.
Indentation
Les blocs de code (fonctions, instructions if, boucles for ou while etc.)
sont définis par leur indentation. L'indentation démarre le bloc et la
désindendation le termine. Il n'y a pas d'accolades, de crochets ou de
mots clés spécifiques. Cela signifie que les espaces blancs sont
significatifs et qu'ils doivent être cohérents.
a = -150
if a<0:
print 'a est négatif'
Ligne d'en-tête:
première instruction du bloc
...
dernière instruction du bloc
Structure conditionnelle
Condition si
Les structures conditionnelles permettent d’exécuter différentes opérations
en fonction de l’évaluation d’une condition spécifique. Par exemple,
supposons que nous avons deux nombres quelconques stockés dans les
variables "x" et "y" ; nous voulons un programme qui retourne la chaîne de
caractère "x est plus grand que y" seulement si c’est le cas. Dans le cas
contraire, rien ne se passe.
Voici comment l’écrire en python :
En algorithmique :
si (x>y) alors
afficher “x est plus grand que y"
fin si
Structure conditionnelle
Évidemment il faut au préalable avoir affecté des valeurs à x et y.
Analysons la structure de cette condition :
Le mot clef if doit être suivi d’une condition. Généralement cela passe
par une proposition logique mettant en jeu un opérateur de comparaison
(par exemple a + b > 0 ou x! = 1). En d’autres termes, le mot clef if doit
être suivi d’un booléen. En effet, le résultat d’une comparaison renvoie
bien soit True soit False.
Structure conditionnelle
Dans ce cas, le programme afficherait toujours "c’est vrai", mais
n’afficherait jamais "c’est faux".
la condition après le if doit être suivie de " :" .
l’ensemble des instructions à effectuer si la condition est vraie (ici
seulement le print), doit être indenté sous le if.
Structure conditionnelle
Condition si ... sinon
Nous venons de voir comment faire pour effectuer une action seulement
si une condition est vraie. Mais comment faire pour effectuer une autre
action dans le cas où la condition est fausse ?
Ceci se fait grâce au mot clef else :
Dans ce cas là, une seule des deux phrases sera affichée en fonction du
résultat de x > y. Vous noterez que le mot clef else doit être au même
niveau que le if et doit être suivi des " :". Comme toujours, l’ensemble
des instructions à effectuer dans le cas else doit être indenté sous le else.
Structure conditionnelle
En algorithmique :
si (condition) alors
// instructions à exécuter si la condition est vraie
sinon
// instructions à exécuter si la condition est fausse
fin si
Structure conditionnelle
Condition si ... sinon si ... sinon
Enfin, que faire dans le cas d’une condition plus complexe ? Reprenons
l’exemple précédent avec la condition initiale x > y. Trois cas peuvent se
produire :
x est strictement plus grand que y
x est strictement plus petit que y
x est égal à y
Si nous voulons que le programme indique dans quel cas nous somme, nous
avons besoin d’un nouveau mot clef : elif (contraction de else if ).
Structure conditionnelle
En algorithmique :
si (condition1) alors
// instructions si condition1 est vraie
sinon si (condition2) alors
// instructions si condition2 est vraie
Sinon
// instructions si aucune des conditions n'est vraie
fin si
Structure conditionnelle
Le mot clef elif doit lui aussi être suivi d’une condition (c’est à dire d’un
booléen). Lors de l’exécution du programme, la condition du elif n’est
évaluée que si la condition précédente (ici celle du if ) est fausse.
La figure ci-après est un diagramme des possibilités pour cet exemple :
Dans cet exemple, un seul elif est requis, mais autant de elif que
nécessaire peuvent être ajoutés après un if. Chaque elif est alors
évalué seulement si toutes les conditions précédentes ont été
évaluées comme fausses.
Structure conditionnelle
Différence entre if ... if et if ... elif
Lorsque vous écrivez un programme, il est important de bien réfléchir au
type de structure conditionnelle que vous allez utiliser.
Prenons les deux exemples suivant :
Structure conditionnelle
Dans le deuxième cas, la condition dans le elif est pourtant bien True.
Seulement, le programme ne l’a jamais évalué. Il a dans un premier
temps évalué la condition du if. Comme cette dernière est vraie, il a
exécuté les lignes de code indentées sous le if puis est sorti de la
structure conditionnelle.
Dans certaines situations, on est amené à exécuter plusieurs
fois des actions identiques ou du moins de même nature.
Une Itération est une séquence d’instructions destinée à
être exécutée plusieurs fois.
Selon que le nombre de répétitions soit connu à l’écriture du
programme ou pas, on utilisera une structure « for » ou
une structure « while ».
Les répétitions : la boucle for (pour)
En algorithmique :
bonjour
bonjour
bonjour
Tout va bien ?
L’identificateur qui suit for n’a pas besoin d’avoir été défini auparavant. Python fait de
cet identificateur une variable.
À la première itération, cette variable vaut 0 ;
à la deuxième itération, cette variable vaut 1 ;
...
à la dernière itération, cette variable vaut n-1.
On l’appelle le compteur de la boucle.
0
1
2
Apres :
2
Les répétitions : la boucle for
Il est possible de commencer les itérations avec un compteur non-nul,
en donnant un deuxième argument à l’opérateur range.
1
2
3
Apres :
3
Les répétitions : la boucle for
Boucles for imbriquées
À l’intérieur d’une boucle, on peut faire une deuxième boucle (voire une
troisième ou une quatrième si nécessaire). Par exemple :
(0,0)
(0,1)
(0,2)
(1,0)
(1,1)
(1,2)
Les répétitions : la boucle while(tant que )
La boucle tant que (ou while en anglais) est une structure de contrôle en
algorithmique utilisée pour répéter un ensemble d'instructions tant
qu'une condition est vraie. Contrairement à la boucle for, elle est
particulièrement utile lorsqu'on ne connaît pas à l'avance le nombre
d'itérations, mais qu'on sait qu'elles doivent se poursuivre tant qu'une
certaine condition est vérifiée.
En algorithmique :
L’affichage :
1
2
3
4
5
Les répétitions : la boucle while
La boucle while permet de répéter le bloc d’instructions tant que la
condition est vraie.
Par exemple :
Les répétitions : la boucle while
Dans le cas de notre exemple, la sortie de ce code serait :
0
1
2
3
fin de boucle
Les répétitions : la boucle while
Vous aurez peut être remarqué que la boucle while de l’exemple
précédent peut être remplacée par la boucle for suivante :
Jusqu’à présent nous avons vu que les structures if elif if et les boucles for requerraient
une proposition souvent sous la forme d’une comparaison. Il est également possible
de tester plusieurs propositions en même temps en les combinant dans une "super"
proposition.
Par exemple :
not permet la négation d’une proposition logique. not A est vraie si A est
fausse, et fausse si A est vraie.
Par exemple :
Les répétitions : la boucle while
Retour sur les priorités entre opérateurs
Nous avons déjà vu qu’il existe des priorités entre opérateurs permettant
à l’interpréteur python de savoir quelle opération effectuée en premier
lorsqu’il rencontre une combinaison d’opérations.
Les opérateurs de comparaison ainsi que les opérateurs logiques que
nous avons vus s’intègrent également dans cet ordre de priorité.
L’ensemble des opérateurs vus jusqu’à présent sont rangés par ordre de
priorité décroissant dans le tableau ci-après :
Les répétitions : la boucle while
La figure suivante montre un exemple de l’ordre d’exécution des opérations en python :
Exercice : écrire un programme calculant la somme d’une suite
d’entiers saisie par l’utilisateur se terminant par 0 (exemple
5, 4, 9, 0 renverra 18).
Solution :
somme,n = 0,1
while n != 0:
n = int (input("Entrez un nombre (0 pour arrêter) : "))
somme += n
print("la somme des entiers saisis vaut",somme)
Sous-programmes
Principe
Programme
appel du sous-
instructions programme
Toto
...
Toto
Retour au bloc d’instructions du sous-
... programme
programme Toto
instructions
...
appel/retour
appel/retour
2. Favoriser la réutilisation.
3. Améliorer la conception.
Sous-programme Sous-programme
complexe simple
para1 Toto
para2
bloc d’instructions du sous-programme
Toto, qui traite para1, para2, ....paraN
paraN
Sous-programmes
Notion de paramètre
Programme
Toto
instructions val1
...
val2 bloc d’instructions du sous-
Toto(val1,val2,...)
programme Toto qui traite para1,
...
para2, .... avec les valeurs val1, val2,
instructions valN
...
...
Sous-programmes
Variables locales versus globales
Toto
para1
bloc d’instructions du sous-
para2
programme Toto, qui traite para1,
para2, ....
paraN à l’aide de variables locales
var1, var2, ...
Sous-programmes
Variables locales versus globales
Programme
Toto
instructions
Définition de variables globales bloc d’instructions du sous-
glob1, glob2, ... programme Toto qui traite para1,
... val1 para2, .... avec les valeurs val1, val2,
Toto(val1,val2,...) val2 ...
... à l’aide de variables locales
instructions var1, var2, ...
... valN Toto accède aux variables globales
glob1, glob2, ...
Sous-programmes
Deux types de sous-programmes
Fonctions :
para1 Toto
para2 résultat
bloc d’instructions du sous-
programme Toto, qui traite para1,
paraN para2, ....
Sous-programmes
Deux types de sous-programmes
Remarque :
◼ Tous les langages de programmation ne distinguent pas
nommément ces deux types de sous–programmes.
def maFonction(para1,para2,...,paraN):
bloc d’instructions de la fonction
return valeur
def cube(x):
return x*x*x
Les sous-programmes en Python
Les Fonctions
Remarques importantes :
◼Une fonction peut retourner plusieurs valeurs, il suffit de
séparer celles-ci par des virgules.
◼Une fonction peut contenir plusieurs fois la commande “return”,
mais elle cesse son fonctionnement dès qu’elle en rencontre une.
def calculMiniMaxi(x,y):
if x < y:
return x,y
else:
return y,x
Les sous-programmes en Python
Les Fonctions
Exemple :
def rectangle(x=3,y=1):
print("périmètre :",2*(x+y),"aire :",x*y)
rectangle()
rectangle(2)
rectangle(7,5)
Les sous-programmes en Python
Paramètres par défaut
Autre exemple :
def rectangle(x,y=1):
print("périmètre :",2*(x+y),"aire :",x*y)
rectangle(2)
rectangle(7,5)
Les sous-programmes en Python
Paramètres immuables
a = 3
print("valeur de a avant :",a)
doubler(a)
print("valeur de a après :",a)
Les sous-programmes en Python
Paramètres immuables
def doubler(x):
return 2*x
a = 3
print("valeur de a avant :",a)
a = doubler(a)
print("valeur de a après :",a)
Les sous-programmes en Python
Variables locales et globales
Variables locales :
◼Ce sont donc des variables définies à l’intérieur d’un sous
programme et qui ne sont accessibles qu’au sein de celui-ci.
◼Elles servent essentiellement au bon fonctionnement du sous-
programme.
def sommeEntiers(n):
somme = 0
for i in range(n+1):
somme += i
return somme
Les sous-programmes en Python
Variables locales et globales
def sommeEntiers(n):
somme = 0
for i in range(n+1):
somme += i
return somme
print(somme)
Les sous-programmes en Python
Variables locales et globales
Variables globales :
◼Ce sont des variables définies en dehors de tout sous-
programme. Elles sont “globales” au sens où elles sont visibles et
utilisables dans tous les sous-programmes du module courant.
i = 666
exemple1()
Exemple 2 :
def exemple2():
i = 111
print(i)
i = 666
exemple2()
print(i)
Les sous-programmes en Python
Variables locales et globales
Exemple 3 :
def exemple3():
print(i)
i = 111
print(i)
i = 666
exemple3()
Les sous-programmes en Python
Variables locales et globales
Syntaxe :
global var
Les sous-programmes en Python
Variables locales et globales
Exemple 4 :
def exemple4():
global i
print(i)
i = 111
print(i)
i = 666
exemple4()
print(i)
Les sous-programmes en Python
Exercice
def conversion1(n):
h = n // 3600
m = (n - 3600*h) // 60
s = n % 60
print(h,"heures,",m,"minutes,",s,"secondes")
Les sous-programmes en Python
Récursivité
facto(1) = 1 facto(1) = 1
Les sous-programmes en Python
Récursivité
Remarque importante :
Il est indispensable de prévoir une condition d’arrêt à la récurions
sinon le programme ne se termine jamais.
def factorielleRecursiveBadJob(n):
return n*factorielleRecursiveBadJob(n-1)
Les sous-programmes en Python
Récursivité versus itération
def factorielleIterative(n):
resultat = 1
for i in range(2,n+1):
resultat *= i
return resultat
Les sous-programmes en Python
Récursivité versus itération
Intérêts de la récursivité :
◼ Technique de programmation très élégante et lisible (elle évite
souvent le recours à de nombreuses structures itératives).
◼ Elle est très utile pour concevoir des algorithmes sur des
structures complexes.