Académique Documents
Professionnel Documents
Culture Documents
Python Course
Python Course
Informatique (Partie 2)
Prof. M. Lahlou
Département de Statistique et de d'Informatique Appliquées
Bases de Python
Variables & Principaux types de données
Python est un langage à typage dynamique, ce qui signifie qu’il n’est pas nécessaire de
déclarer les variables avant de pouvoir leur affecter une valeur. La valeur que l’on affecte
possède un type qui dépend de la nature des données (nombre entier, nombre à virgule,
chaîne de caractères, etc.). Le type du contenu d’une variable peut donc changer si on
change sa valeur.
• Ligne 1. Dans cet exemple, nous avons déclaré, puis initialisé la variable x avec la
valeur 2. Notez bien qu'en réalité, il s'est passé plusieurs choses :
• Python a « deviné » que la variable était un entier. On dit que Python est un langage au typage
dynamique.
• Python a alloué (réservé) l'espace en mémoire pour y accueillir un entier. Chaque type de variable
prend plus ou moins d'espace en mémoire. Python a aussi fait en sorte qu'on puisse retrouver la
variable sous le nom x.
• Enfin, Python a assigné la valeur 2 à la variable x.
Variables (suite)
• Les noms de variables sont des noms qu’on choisit assez librement
• De préférence assez courts, mais aussi explicites que possible, pour exprimer
clairement ce que la variable est censée contenir:
• altitude, altit ou alt (au lieu de x ) pour exprimer une altitude
• prix_unit pour exprimer un prix unitaire, etc.
• Quelques règles pour les noms de variables sous Python :
1. Un nom de variable est une séquence de lettres (a à z , A à Z) et de chiffres (0 à 9), qui doit
toujours commencer par une lettre.
2. Seules les lettres ordinaires sont autorisées. Les lettres accentuées, les cédilles, les espaces,
les caractères spéciaux tels que $, #, @, etc. sont interdits, à l'exception du caractère _
(souligné).
3. La casse est significative (les caractères majuscules et minuscules sont distingués). Attention
: Altitude, altitude, ALTITUDE sont donc des variables différentes. Soyez attentifs !
4. Prenez l'habitude d'écrire l'essentiel des noms de variables en caractères minuscules (y
compris la première lettre). Il s'agit d'une simple convention, mais elle est largement
respectée. N'utilisez les majuscules qu'à l'intérieur même du nom, pour en augmenter
éventuellement la lisibilité, comme dans TableDesMatieres.
Algorithmique et Programmation 40
Mots réservés
• En plus de ces règles, il faut encore ajouter que vous ne pouvez
pas utiliser comme noms de variables les 29 «mots réservés» au
langage ci-dessous :
and assert break class continue def
del elif else except exec finally
for from global if import in
is lambda not or pass print
raise return try while yield
Algorithmique et Programmation 41
Typage des variables
• Sous Python, il n'est pas nécessaire d'écrire des lignes de programme spécifiques pour
définir le type des variables avant de pouvoir les utiliser. Il vous suffit en effet
d'assigner une valeur à un nom de variable pour que celle-ci soit automatiquement
créée avec le type qui correspond au mieux à la valeur fournie.
• Ceci constitue une particularité intéressante de Python, qui le rattache à une famille
particulière de langages où l'on trouve aussi par exemple Lisp, Scheme, et quelques
autres. On dira à ce sujet que le typage des variables sous Python est un typage
dynamique, par opposition au typage statique qui est de règle par exemple en C++ ou
en Java.
• Le typage statique est préférable dans le cas des langages compilés, parce qu'il
permet d'optimiser l'opération de compilation (dont le résultat est un code binaire
« figé »).
• Le typage dynamique quant à lui permet d'écrire plus aisément des constructions
logiques de niveau élevé (métaprogrammation, réflexivité), en particulier dans le
contexte de la programmation orientée objet (polymorphisme). Il facilite également
l'utilisation de structures de données très riches telles que les listes et les
dictionnaires.
Algorithmique et Programmation 42
dict dictionnaire
bool Booléen
Algorithmique et Programmation 43
La fonction type()
Pour connaître le type d’une donnée ou le type de la valeur d’une variable, il
suffit d’utiliser la fonction type().
Exemples :
Le type float est utilisé pour stocker des nombres à virgule flottante,
désignés en anglais par l’expression floating point numbers. Pour cette
raison, on appelle ce type : float. En français, on parle de flottant.
Exemples :
Pour obtenir le quotient et le reste d'une division entière (voir ici pour un petit rappel sur
la division entière), on utilise respectivement les symboles // et modulo % :
Les symboles +, -, *, /, **, // et % sont appelés opérateurs, car ils réalisent des opérations
sur les variables.
Enfin, il existe des opérateurs « combinés » qui effectue une opération et une affectation
en une seule étape :
L'opérateur += effectue une addition puis affecte le résultat à la
même variable. Cette opération s'appelle une « incrémentation ».
Les opérateurs -=, *= et /= se comportent de manière similaire
pour la soustraction, la multiplication et la division.
- soustraction 6-4 == 2
* multiplication 6*4 == 24
Algorithmique et Programmation 48
Attention
Vous observez que les opérateurs + et * se comportent différemment s'il s'agit
d'entiers ou de chaînes de caractères : 2 + 2 est une addition alors que "2" + "2" est
une concaténation. On appelle ce comportement redéfinition des opérateurs.
Opérateurs de chaînes
\ Séquence d'échappement
• Extraction de sous-chaînes
Algorithmique et Programmation 52
Opérateurs de chaînes
• La méthode split(): découpe la ligne en champs, en utilisant comme
séparateur les espaces ou les tabulations. Il est possible de modifier le
séparateur de champs.
Séparateur « : »
Algorithmique et Programmation 53
Le type bool (booléen)
Le type bool est utilisé pour les booléens. Un booléen peut prendre les
valeurs True ou False.
Opérateurs logiques
• Les expressions avec un opérateur logique sont évaluées à True ou
False
• X or Y : OU logique, si X évalué à True, alors l'expression est True et Y n'est
pas évalué. Sinon, l'expression est évaluée à la valeur booléenne de Y.
Algorithmique et Programmation 55
Opérateurs de comparaisons
• Tout comme les opérateurs logiques, les opérateurs de comparaison
renvoient une valeur booléenne True ou False. Les opérateurs de
comparaisons s'appliquent sur tous les types de base.
• < strictement inférieur
• > strictement supérieur
• <= inférieur ou égal
• >= supérieur ou égal
• == égal
• != différent
• X is Y : X et Y représentent le même objet.
• X is not Y : X et Y ne représentent pas le même objet
• Il est possible d'enchaîner les opérateurs : X < Y < Z, dans ce cas, c'est Y
qui est pris en compte pour la comparaison avec Z et non pas
l'évaluation de (X < Y) comme on pourrait s'y attendre dans d'autres
langages.
Algorithmique et Programmation 56
Conversion de types
• En programmation, on est souvent amené à convertir les types, c'est-à-dire
passer d'un type numérique à une chaîne de caractères ou vice-versa. En
Python, rien de plus simple avec les fonctions int(), float() et str(). Pour vous en
convaincre, regardez ces exemples :
• Lorsqu'il y a plus d'un opérateur dans une expression, l'ordre dans lequel les
opérations doivent être effectuées dépend de règles de priorité. Sous Python, les
règles de priorité sont les mêmes que celles qui vous ont été enseignées au cours de
mathématique. Vous pouvez les mémoriser aisément à l'aide d'un « truc »
mémotechnique, l'acronyme PEMDAS :
1. P pour parenthèses. Ce sont elles qui ont la plus haute priorité. Elles vous permettent donc
de « forcer » l'évaluation d'une expression dans l'ordre que vous voulez.
Ainsi 2*(3-1) = 4, et (1+1)**(5-2) = 8.
2. E pour exposants. Les exposants sont évalués ensuite, avant les autres opérations.
Ainsi 2**1+1 = 3 (et non 4), et 3*1**10 = 3 (et non 59049 !).
3. M et D pour multiplication et division, qui ont la même priorité. Elles sont évaluées avant
l'addition A et la soustraction S, lesquelles sont donc effectuées en dernier lieu.
Ainsi 2*3-1 = 5 (plutôt que 4), et 2/3-1 = -1 (Rappelez-vous que par défaut Python effectue
une division entière).
4. Si deux opérateurs ont la même priorité, l'évaluation est effectuée de gauche à droite.
Ainsi dans l'expression 59*100/60, la multiplication est effectuée en premier, et la machine
doit donc ensuite effectuer 5900/60, ce qui donne 98. Si la division était effectuée en
premier, le résultat serait 59(rappelez-vous ici encore qu'il s'agit d'une division entière).
Algorithmique et Programmation 60
Remarques
• Lors de mélange de types numériques lors d’une opération, la
réponse sera du type de l’opérande la plus complexe.
Algorithmique et Programmation 61
Exemples
• Écrire un programme qui affiche "Bonjour le monde"
print ("Bonjour le monde")
• Écrire un programme qui permet de saisir le nom de
l'utilisateur et de renvoyer "Bonjour", suivi de ce nom
name = input("Quel est votre nom?")
print("Bonjour "+(name)+"!")
• Écrire un programme qui demande à l'utilisateur la saisie
de a et b et affiche la somme de a et de b.
var_a = input ("Donnez moi la valeur de a : ")
var_b = input ("Donnez moi la valeur de b : ")
var_c = int(var_a)+int(var_b)
print("Voici le résultat de a + b :"+str(var_c)+"!")
Algorithmique et Programmation 62
Exemples
• Écrire un programme qui demande à l'utilisateur son année de naissance et qui affiche
son âge. L'année courante sera mise dans une variable.
nom = input ("Quel est votre nom?")
annee= input ("En quelle année êtes vous né ?")
annee_courante=2020
age=annee_courante-int(annee)
print("Bonjour "+(nom)+", vous avez "+str(age)+" ans!")
• Écrire un programme qui demande à l'utilisateur les coordonnées de deux points dans le
plan et qui calcule puis affiche la distance entre ces deux points selon la formule :
import math
xA = float(input("Donnez moi Xa"))
yA = float(input ("Donnez moi Ya"))
xB = float(input("Donnez moi Xb"))
yB = float(input ("Donnez moi Yb"))
distance = math.sqrt (((xB-xA)**2)+((yB-yA)**2))
print(« La distance qui sépare les deux points est de " + str(distance))
Algorithmique et Programmation 63
Exercices
• Ecrire un programme qui calcule à partir d’un prix hors taxe fournis par l’utilisateur la taxe et le prix TTC
(La valeur de la taxe étant de 20%).
• Écrivez un programme qui convertisse en radians un angle fourni au départ en degrés, minutes,
secondes.
• Écrivez un programme qui convertisse en degrés, minutes, secondes un angle fourni au départ en
radians.
• Écrivez un programme qui convertisse en degrés Celsius une température exprimée au départ en degrés
Fahrenheit, ou l'inverse. La formule de conversion est : TF=TC×1,8+32.
• Écrivez un programme qui calcule les intérêts accumulés chaque année pendant 20 ans, par
capitalisation d'une somme de 1000 dh placée en banque au taux fixe de 4,3%
• Une légende de l'Inde ancienne raconte que le jeu d'échecs a été inventé par un vieux sage, que son roi
voulut remercier en lui affirmant qu'il lui accorderait n'importe quel cadeau en récompense. Levieux
sage demanda qu'on lui fournisse simplement un peu de riz pour ses vieux jours, et plus précisément un
nombre de grains de riz suffisant pour que l'on puisse en déposer 1 seul sur la première case du jeu qu'il
venait d'inventer, deux sur la suivante, quatre sur la troisième, et ainsi de suite jusqu'à la 64ème case.
Écrivez un programme Python qui affiche le nombre de grains à déposer sur chacune des 64 cases du
jeu. Calculez ce nombre de deux manières :
• Le nombre exact de grains (nombre entier)
• Le nombre de grains en notation scientifique (nombre réel)
Algorithmique et Programmation 64
Exercices
• Écrivez un script qui détermine si une chaîne contient ou non le
caractère «e».
• Écrivez un script qui compte le nombre d'occurrences du caractère
«e» dans une chaîne.
• Écrivez un script qui recopie une chaîne (dans une nouvelle
variable), en insérant des astérisques entre les caractères. Ainsi
par exemple, «python» devra devenir «p*y*t*h*o*n»
• Écrivez un script qui recopie une chaîne (dans une nouvelle
variable) en l'inversant. Ainsi par exemple, «zorglub» deviendra
«bulgroz».
• En partant de l'exercice précédent, écrivez un script qui détermine
si une chaîne de caractères donnée est un palindrome (c'est-à-dire
une chaîne qui peut se lire indifféremment dans les deux
sens),comme par exemple «radar» ou «s.o.s».
Algorithmique et Programmation 65
Bases de Python
Les instructions simples entrées, sorties et affectation
Les entrées
• Dans un programme, il est très pratique de pouvoir
demander à l’utilisateur de saisir une chaîne de caractères.
• Pour cela, Python dispose d’une instruction : input().
input()
Les sorties
• L’instruction principale est print qui permet d’afficher
surtout des chaînes de caractères.
• Cependant, comme pour l’instruction input(), si on lui
demande d’afficher un entier, il va automatiquement
convertir l’entier en chaîne de caractères pour pouvoir
l’afficher.
• A noter que l’instruction print provoque un saut de ligne
(comportement par défaut). Pour écrire une suite de
chaînes de caractères, on pourra utiliser la concaténation
de chaînes en utilisant l’opérateur « + ».
Algorithmique et Programmation 70
Algorithmique et Programmation 71
Instructions simples : Affectations
parallèles
• Voici quelques exemples :
>>> a,b=3,4
>>> print a, b
3 4
>>> a,b=b,a
>>> print a,b
4 3
Algorithmique et Programmation 72
Bases de Python
Tests (Instructions conditionnelles)
Les tests sont un élément essentiel à tout langage informatique si on
veut lui donner un peu de complexité car ils permettent à l'ordinateur
de prendre des décisions. Pour cela, Python utilise l'instruction if ainsi
qu'une comparaison que nous avons abordée au chapitre précédent.
• Les identificateurs
Un identificateur est une suite de caractères servant à désigner les différentes entitées
manipulées par un programme : variables, fonctions, classes…
En Python, un identificateur est formé de lettres ou de chiffres. Il ne contient pas
d’espace. Le premier caractère doit obligatoirement être une lettre. Il peut contenir le
caractère « _ » (underscore, en français « souligné »). Il est sensible à la casse
(distinction entre majuscule et minuscule).
• Les mots-clés
Les mots réservés par le langage Python (if, for, etc.) ne peuvent pas être utilisés
comme identificateurs.
• Les commentaires
Les commentaires usuels:
• Un bloc est défini par une indentation obtenue en décalant le début des
instructions vers la droite grâce à des espaces en début de ligne
(habituellement 4 espaces mais ce n’est pas obligatoire). Toutes les
instructions d’un même bloc doivent être indentées exactement au même
niveau (c’est-à-dire décalées à droite d’un même nombre d’espaces).
Instruction if
Syntaxe
x = int(input("x? "))
y = int(input("y? "))
if(x>=y):
max = x
else:
max = y
print("max = ", max)
mémoire affichage
Algorithmique et Programmation 17
x = int(input("x? "))
y = int(input("y? "))
if(x>=y): x?
max = x
else:
max = y
print("max = ", max)
mémoire affichage
Algorithmique et Programmation 17
Exemple animé d’une structure
conditionnelle
x = int(input("x? "))
y = int(input("y? "))
if(x>=y): x? 5
max = x y?
else:
max = y
x 5
print("max = ", max)
mémoire affichage
Algorithmique et Programmation 17
x = int(input("x? "))
y = int(input("y? "))
if(x>=y): x? 5
? max = x y? 19
y 19
else:
? max = y
x 5
print("max = ", max)
mémoire affichage
Algorithmique et Programmation 17
Exemple animé d’une structure
conditionnelle
x = int(input("x? "))
y = int(input("y? "))
max 19 x? 5
if(x>=y):
max = x y? 19
y 19
else:
max = y
x 5
print("max = ", max)
mémoire affichage
Algorithmique et Programmation 17
x = int(input("x? "))
y = int(input("y? "))
max 19 x? 5
if(x>=y):
max = x y? 19
y 19
else: max = 19
max = y
x 5
print("max = ", max)
mémoire affichage
Algorithmique et Programmation 17
Instruction if (suite)
Exemple 2 avec condition vraie : Exemple 2 avec condition fausse :
Instruction if … else
Syntaxe
Algorithmique et Programmation 86
La structure conditionnelle:
instructions imbriquées
• Pour traiter le cas des notes invalides (<0 ou >20), on peut imbriquer des instructions
conditionnelles :
Algorithmique et Programmation 87
La structure conditionnelle:
l'instruction elif
• Une instruction elif (contraction de else if) est toujours associée à une instruction if
• Syntaxe
• Si l'expression 1 est vraie alors le bloc d'instructions 1 est exécuté, et on passe à la suite
du programme.
• Si l'expression 1 est fausse alors on teste l'expression 2 :
• si l'expression 2 est vraie on exécute le bloc d'instructions 2, et on passe à la suite du programme.
• si l'expression 2 est fausse alors on teste l'expression 3, etc...
• Le bloc d'instructions 4 est donc exécuté si toutes les expressions sont fausses (c'est le
bloc "par défaut").
Algorithmique et Programmation 88
La structure conditionnelle:
l'instruction elif
• Exemple
Algorithmique et Programmation 89
Exercice
• a=7
b=12
if a>5:
b=b-4
if b>=10:
b=b+1
• a=3
b=6
if a>5 or b!=3:
b=4
else:
b=2
Algorithmique et Programmation 90
Exercice
• a=10
if a<5:
a=20
elif a<100:
a=500
elif a<1000:
a=1
else:
a=0
• Le numéro de sécurité sociale est constitué de 13 chiffres auquel s'ajoute la clé de contrôle (2
chiffres).
La clé de contrôle est calculée par la formule : 97 - (numéro de sécurité sociale modulo 97)
Ecrire un script qui contrôle la validité d'un numéro de sécurité sociale.
Algorithmique et Programmation 91
Exercice
• Un patron décide de calculer le montant de sa participation au prix du
repas de ses employés de la façon suivante :
• S'il est célibataire participation de 20%
• S'il est marié participation de 25%
• S'il a des enfants participation de 10% supplémentaires par enfant
• La participation est plafonnée à 50%
• Si le salaire mensuel est inférieur à 6000dh la participation est majorée de
10%
• Écrire le programme qui lit les informations au clavier et affiche pour un
salarié, la participation à laquelle il a droit.
Algorithmique et Programmation 92
Bases de Python
Boucles
Les boucles s’utilisent pour répéter plusieurs fois l’exécution d’une partie du
programme. En programmation, on est souvent amené à répéter plusieurs fois une
instruction. Incontournables à tout langage de programmation, les boucles vont
nous aider à réaliser cette tâche de manière compacte et efficace.
Boucle for
• L’instruction for est une instruction composée, c’est-à-dire une instruction
dont l’en-tête se termine par deux-points :, suivie d’un bloc indenté qui
constitue le corps de la boucle.
• On dit que l’on réalise une itération de la boucle à chaque fois que le corps
de la boucle est exécuté.
• Dans l’en-tête de la boucle, on précise après le mot-clé for le nom d’une
variable (i dans l’exemple ci-dessus) qui prendra successivement toutes les
valeurs qui sont données après le mot-clé in. On dit souvent que cette
variable (ici i) est un compteur car elle sert à numéroter les itérations de la
boucle.
• Il est possible d’obtenir le même résultat sans donner la liste des valeurs,
mais en utilisant la fonction range().
mémoire
affichage
Algorithmique et Programmation 31
mémoire
affichage
Algorithmique et Programmation 31
Exemple animé de l’instruction for
somme 0
mémoire
affichage
Algorithmique et Programmation 31
i 1
somme 0
mémoire
affichage
Algorithmique et Programmation 31
Exemple animé de l’instruction for
i 1
somme 1
mémoire
affichage
Algorithmique et Programmation 31
i 2
somme 1
mémoire
affichage
Algorithmique et Programmation 31
Exemple animé de l’instruction for
i 2
somme 3
mémoire
affichage
Algorithmique et Programmation 31
i 3
somme 3
mémoire
affichage
Algorithmique et Programmation 31
Exemple animé de l’instruction for
i 3
somme 6
mémoire
affichage
Algorithmique et Programmation 31
i 4
somme 6
mémoire
affichage
Algorithmique et Programmation 31
Exemple animé de l’instruction for
i 4
somme 10
mémoire
affichage
Algorithmique et Programmation 31
i 5
somme 10
mémoire
affichage
Algorithmique et Programmation 31
Exemple animé de l’instruction for
i 5
somme 15
mémoire
affichage
Algorithmique et Programmation 31
i 6
somme 15
mémoire
affichage
Algorithmique et Programmation 31
Exemple animé de l’instruction for
affichage
Algorithmique et Programmation 31
Exercices
1. L'utilisateur donne un entier supérieur à 1 et le programme
affiche, s'il y en a, tous ses diviseurs propres sans
répétition ainsi que leur nombre. S'il n'y en a pas, il
indique qu'il est premier. Par exemple :
Entrez un entier strictement positif : 12
Diviseurs propres sans répétition de 12 : 2 3 4 6 (soit 4 diviseurs propres)
Entrez un entier strictement positif : 13
Diviseurs propres sans répétition de 13 : aucun ! Il est premier
affichage
Algorithmique et Programmation 38
Exemple animé de l’instruction while
affichage
Algorithmique et Programmation 38
valeur 8
print("Somme d'entiers positifs")
valeur = int(input ("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
affichage
Algorithmique et Programmation 38
Exemple animé de l’instruction while
valeur 8
print("Somme d'entiers positifs")
somme 0
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
affichage
Algorithmique et Programmation 38
valeur 8
print("Somme d'entiers positifs")
somme 0
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
? somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
affichage
Algorithmique et Programmation 38
Exemple animé de l’instruction while
valeur 8
print("Somme d'entiers positifs")
somme 8
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
affichage
Algorithmique et Programmation 38
valeur 5
print("Somme d'entiers positifs")
somme 8
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
affichage
Algorithmique et Programmation 38
Exemple animé de l’instruction while
valeur 5
print("Somme d'entiers positifs")
somme 8
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
? somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
affichage
Algorithmique et Programmation 38
valeur 5
print("Somme d'entiers positifs")
somme 13
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
affichage
Algorithmique et Programmation 38
Exemple animé de l’instruction while
valeur 12
print("Somme d'entiers positifs")
somme 13
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
affichage
Algorithmique et Programmation 38
valeur 12
print("Somme d'entiers positifs")
somme 13
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
? somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
?
affichage
Algorithmique et Programmation 38
Exemple animé de l’instruction while
valeur 12
print("Somme d'entiers positifs")
somme 25
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
affichage
Algorithmique et Programmation 38
valeur 16
print("Somme d'entiers positifs")
somme 25
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
affichage
Algorithmique et Programmation 38
Exemple animé de l’instruction while
valeur 16
print("Somme d'entiers positifs")
somme 25
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
? somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
?
Valeur suivante(ou -1 pour arrêter) 16
affichage
Algorithmique et Programmation 38
valeur 16
print("Somme d'entiers positifs")
somme 41
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
affichage
Algorithmique et Programmation 38
Exemple animé de l’instruction while
valeur 7
print("Somme d'entiers positifs")
somme 41
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
affichage
Algorithmique et Programmation 38
valeur 7
print("Somme d'entiers positifs")
somme 41
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
? somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
?
Valeur suivante(ou -1 pour arrêter) 16
affichage
Algorithmique et Programmation 38
Exemple animé de l’instruction while
valeur 7
print("Somme d'entiers positifs")
somme 48
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
affichage
Algorithmique et Programmation 38
valeur -1
print("Somme d'entiers positifs")
somme 48
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
affichage
Algorithmique et Programmation 38
Exemple animé de l’instruction while
valeur -1
print("Somme d'entiers positifs")
somme 48
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
? somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
?
Valeur suivante(ou -1 pour arrêter) 16
affichage
Algorithmique et Programmation 38
valeur -1
print("Somme d'entiers positifs")
somme 48
valeur = int(input("Donnez une première valeur (ou -1 pour arrêter)"))
somme = 0
mémoire
while (valeur <> -1): Somme d'entiers positifs
somme = somme + valeur Donnez une première valeur (ou -1 pour arrêter) 8
valeur = int(input ("Valeur suivante (ou -1 pour arrêter)")) Valeur suivante(ou -1 pour arrêter) 5
print("La somme des valeurs saisies est : ", somme) Valeur suivante(ou -1 pour arrêter) 12
affichage
Algorithmique et Programmation 38
Comment choisir entre boucle for et
boucle while
En général, si on connaît avant de démarrer la boucle le nombre d’itérations à
exécuter, on choisit une boucle for. Au contraire, si la décision d’arrêter la
boucle ne peut se faire que par un test, on choisit une boucle while.
Note: Il est toujours possible de remplacer une boucle for par une boucle
while.
Transformation d’une boucle for en un boucle while
Exercices
1. On dispose d'une feuille de papier d'épaisseur 0,1 mm.
Combien de fois doit-on la plier au minimum pour que
l'épaisseur dépasse la hauteur de la tour Eiffel 324 m.
Écrire un programme en Python pour résoudre ce
problème.
2. Dans un pays connaissant une forte inflation, le taux
d’inflation mensuel est de 8 %. Un article coûte 500
MAD le 1er janvier 2020.
a. Calculer le prix de cet article au 1er février 2020 puis au
1er mars 2020.
b. Écrire un programme qui calcule le nombre de mois au
bout duquel le prix sera supérieur à 1000 euros, en
fonction du prix initial.
Bases de Python
Les listes
Les listes (ou list / array ) en python sont une variable dans laquelle on
peut mettre plusieurs variables (équivalent de tableaux dans les autres
langages) .
• Soyez très attentifs au fait que les indices d'une liste de n éléments
commence à 0 et se termine à n-1. Voyez l'exemple suivant :
1. Vous pouvez obtenir un sous-ensemble d'une liste, appelé une «tranche» (slice), en
spécifiant deux indices. La valeur de retour est une nouvelle liste contenant les
éléments de la liste, dans l'ordre, en démarrant du premier indice de la tranche (dans
ce cas li[1]), jusqu'à au second indice de la tranche non inclus (ici li[3]).
2. Le découpage fonctionne si un ou les deux indices sont négatifs. Pour vous aider,
vous pouvez les voir comme ceci : en lisant la liste de gauche à droite, le premier
indice spécifie le premier élément que vous désirez et le second indice spécifie le
premier élément dont vous ne voulez pas. La valeur de retour est tout ce qui se
trouve entre les deux.
3. Les listes sont indicées à partir de zéro, donc li[0:3] retourne les trois premiers
éléments de la liste, en démarrant à li[0] jusqu'à li[3] non inclus.
1. Si l'indice de tranche de gauche est 0, vous pouvez l'omettre et 0 sera implicite. Donc
li[:3] est la même chose que li[0:3] dans le premier exemple.
2. De la même manière, si l'indice de tranche de droite est la longueur de la liste, vous
pouvez l'omettre. Donc li[3:] est pareil que li[3:5], puisque la liste a 5 éléments.
3. Remarquez la symétrie. Dans cette liste de 5 éléments, li[:3] retourne les 3 premiers
éléments et li[3:] retourne les deux derniers. En fait li[:n] retournera toujours les n
premiers éléments et li[n:] le reste, quelle que soit la longueur de la liste.
4. Si les deux indices sont omis, tous les éléments de la liste sont inclus dans la tranche.
Mais ce n'est pas la même chose que la liste li; c'est une nouvelle liste qui contient
les même éléments. li[:] est un raccourci permettant d'effectuer une copie complète
de la liste.
Algorithmique et Programmation 150
Le type list (opérations)
• Tout comme les chaînes de caractères, les listes supportent l'opérateur + de
concaténation, ainsi que l'opérateur * pour la duplication :
• Dans l'exemple ci-dessus, nous ajoutons des éléments à une liste en utilisant l'opérateur
de concaténation + ou la méthode .append(). Nous vous conseillons dans ce cas précis
d'utiliser la méthode .append() dont la syntaxe est plus élégante.
Wednesday, October 7, 2020 Prof. M. LAHLOU 59
La variation avec not permet, a contrario, de vérifier qu'un élément n'est pas dans une liste.
• Copie de listes
Il est très important de savoir que l'affectation d'une liste (à partir d'une liste préexistante) crée en
réalité une référence et non une copie :
L'instruction x[:] a créé une copie « à la volée » de la liste x. Vous pouvez utiliser aussi
la fonction list() qui renvoie explicitement une liste:
Attention, ces deux astuces ne fonctionnent que pour les listes à une dimension,
autrement dit les listes qui ne contiennent pas elles-mêmes d'autres listes.
1. L’expression de mutation est ici très simple (elle retourne juste la valeur de chaque élément),
observez plutôt attentivement l’expression de filtrage. Au fur et à mesure que Python parcours
la liste, il soumet chaque élément à l’expression de filtrage, si l’expression s’évalue à vrai,
l’élément passe par l’expression de mutation et le résultat est inclue dans la liste de résultat. Ici,
on filtre toutes les chaînes d’un seul caractère, il ne reste donc que les chaînes plus longues.
2. Ici, on filtre une valeur spécifique : b. Notez que cela filtre toutes les occurrences de b, puisqu’à
chaque fois qu’il apparaît, l’expression de filtrage s’évaluera à faux.
3. count est une méthode de listes qui retourne le nombre d’occurrences d’une valeur dans la
liste. On pourrait penser que ce filtre élimine les doublons de la liste, retournant une liste
contenant seulement un exemplaire de chaque valeur. Mais en fait, les valeurs qui apparaissent
deux fois dans la liste initiale (ici b et d) sont totalement éliminées. Il y a des moyens de
supprimer les doublons d’une liste mais le filtrage n’est pas la solution.
Algorithmique et Programmation 155
• La méthode ci-dessus est simple et intuitive mais nous pouvons écrire ce bout de code
de manière plus succincte en Python grâce aux List Comprehension :
• Grâce à cette même expression, il nous est aussi possible de filtrer les éléments insérés
en plus d’effectuer un traitement sur ces mêmes éléments :
Séparateur « : »
La notion de séquences
• Un objet itérable est une séquence de données auxquelles il
est possible d'accéder à l'aide d'un indice. Voyons ça avec
l'aide d'un petit schéma d'une séquence de N éléments :
Exercice
uneVal = input("Entrer un nombre STOP pour finir. ")
while uneVal <> "STOP":
if(int(uneVal) >= 10) and (int(uneVal) < 100):
print( uneVal, "est un nombre à deux chiffres.")
uneVal = input("Entrer un autre nombre STOP pour finir. ")
print("fin de l’algorithme")
Exercice
Soit T un tableau qui contient n valeurs réelles non triés. Ecrire un
programme qui
1. lit le contenu de ce tableau,
2. le met dans une liste
3. le trie
4. lit aussi un nombre réel x,
5. et effectue l’insertion de x dans la liste, de telle manière que la
liste reste triée.
Exemple : Soit le tableau T de 8 nombres triés dans lequel on désire
insérer le nombre 40
Appel du sous-
programme monSousProg
Programme
appelant
Retour
Retour du sous-programme
• Vous pouvez choisir n'importe quel nom pour la fonction que vous créez, à l'exception des mots
réservés du langage, et à la condition de n'utiliser aucun caractère spécial ou accentué (le caractère
souligné « _ » est permis). Comme c'est le cas pour les noms de variables.
• Comme les instructions if et while que vous connaissez déjà, l'instruction def est une instruction
composée. La ligne contenant cette instruction se termine obligatoirement par un double point,
lequel introduit un bloc d'instructions que vous ne devez pas oublier d'indenter.
• La liste de paramètres spécifie quelles informations il faudra fournir en guise d'arguments lorsque
l'on voudra utiliser cette fonction (Les parenthèses peuvent parfaitement rester vides si la fonction
ne nécessite pas d'arguments).
• Une fonction s'utilise pratiquement comme une instruction quelconque. Dans le corps d'un
programme, un appel de fonction est constitué du nom de la fonction suivi de parenthèses. Si c'est
nécessaire, on place dans ces parenthèses le ou les arguments que l'on souhaite transmettre à la
fonction. Il faudra en principe fournir un argument pour chacun des paramètres spécifiés dans la
définition de la fonction, encore qu'il soit possible de définir pour ces paramètres des valeurs par
défaut (voir plus loin).
• En entrant ces quelques lignes, nous avons défini une fonction très simple qui
calcule et affiche les 10 premiers termes de la table de multiplication par 7.
Notez bien les parenthèses, le double point, et l'indentation du bloc
d'instructions qui suit la ligne d'en-tête (c'est ce bloc d'instructions qui
constitue le corps de la fonction proprement dite).
• Pour utiliser la fonction que nous venons de définir, il suffit de l'appeler par son
nom. Ainsi :
• provoque l'affichage de :
• La fonction table() telle que définie ci-dessus utilise le paramètre base pour calculer les dix
premiers termes de la table de multiplication correspondante.
• Pour tester cette nouvelle fonction, il nous suffit de l'appeler avec un argument. Exemples :
• Dans ces exemples, la valeur que nous indiquons entre parenthèses lors de l'appel de la
fonction (et qui est donc un argument) est automatiquement affectée au paramètre base. Dans
le corps de la fonction, base joue le même rôle que n'importe quelle autre variable. Lorsque
nous entrons la commande table(9), nous signifions à la machine que nous voulons exécuter la
fonction table() en affectant la valeur 9 à la variable base.
• provoque l'affichage de :
1x8=8 5 x 8 = 40 1x8=8
2 x 8 = 16 6 x 8 = 48 2 x 8 = 16
3 x 8 = 24 7 x 8 = 56 3 x 8 = 24
4 x 8 = 32 8 x 8 = 64 4 x 8 = 32
5 x 8 = 40 9 x 8 = 72 5 x 8 = 40
6 x 8 = 48 10 x 8 = 80
7 x 8 = 56
8 x 8 = 64
9 x 8 = 72
10 x 8 = 80
A. 6.0
B. 8.0
C. 10.0
D. 12.0
A. 4
2
3
5
6
B. 4
2
3
5
puis message d'erreur
C. 4
2
puis message d'erreur
D. 4
puis message d'erreur
Écriture de données
Programme
Stockage
Lecture de données
Fichier
Disque
Exemple
•Dans cet exemple nous allons créer un fichier et
stocké dedans les 10 premier termes de la suite
de Fibonacci
Exemple 2
« temperature.txt » est un fichier contenant une série de
mesures de températures à différents points (voir extrait ci-
joint). Le fichier se compose d’une ligne de titre suivit des
lignes de données composées du numéro du point de mesure
suivit d’un espace suivit de la mesure de la température.
Ecrire un programme pour calculer la moyenne des
températures
Calculs scientifiques
Analyse numérique
Exemple
>>> print(moyenne(test))
8.0
>>> print(variance(test))
11.666666666666666
• L'écart-type est défini comme la racine carrée de la variance
>>> def ecartype(tableau):
return variance(tableau)**0.5
>>> print(ecartype(test))
3.415650255319866
50.3665
28.56636794816643
49.745912210247546
28.997495489810333
15.993753359028622
1.9889518438838354
3.14044 3.141592653589793
Calculs scientifiques
Fonctions mathématiques de base
La bibliothèque math
import math
• Une fois un module importé on peut lister les fonctions
disponibles avec la fonction dir:
print(dir(math))
['__doc__', '__loader__', '__name__', '__package__', 'acos', 'acosh',
'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos',
'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial',
'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isfinite', 'isinf',
'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pi',
'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
La bibliothèque numpy:
• Nous allons voir comment créer des tableaux avec la
fonction numpy.array() de NumPy. Ces tableaux
pourront être utilisés comme des vecteurs ou des
matrices grâce à des fonctions de NumPy (numpy.dot(),
numpy.linalg.det(), numpy.linalg.inv(), numpy.linalg.eig(),
etc.) qui permettent de réaliser des calculs matriciels
utilisés en algèbre.
• Premièrement, nous allons importer le module numpy.
Pour cela, il suffit de faire :
Exercice
1. A l’aide de numpy résoudre les systèmes d’équations linaires suivants
d’inconnues x , y , z :
1, 4 et 3 respectivement en 0, 1 et 2.
La bibliothèque Matplotlib
•Une des grandes activités des scientifiques qui
touchent à la modélisation numérique c'est de
faire des courbes.
•Le module Matplotlib, comme son nom l’indique,
s’occupe du tracé graphique. Nous avons déjà vu
un exemple d’utilisation de ce module dans la
partie « Statistique inférentielle »
Un histogramme et un affichage de
texte sur le graphique
Bases de Python
Interfaces graphiques en Python avec Qt 5 et PyQt5:
Introduction
• C'est l'application elle même, et non un événement, qui contrôle les parties
du code qui sont exécutées, ainsi que leur ordre d'exécution.
Programmation événementielle
253
Evénement sur
un objet de
l'interface
Périphériques Place
agissant sur l'événement sur
l'interface la pile
noyau
de
Pile d'événements WINDOWS
ensemble de
sous-programmes
Cho
ix du s
ous
-pro
Un sous-programme g ram
me Dépile l'événement
pour chaque événement adé
qua
de chaque objet . t le plus ancien
.
.
Analyse de l'évenement dépilé
Programmation événementielle
255
Analyse du programme
• from PyQt5.QtWidgets import QApplication, Qwidget
Il importe le module QtWidgets pour que nous ayons accès à l’interface graphique.
• app = QApplication(sys.argv)
Il crée un objet d’application qui a accès à la boucle d’événements.
• fen = QWidget()
Nous devons ensuite créer un QtWidget, parce que nous allons utiliser cela comme
notre fenêtre de haut niveau et il a tout ce que nous voulons.
• fen.setWindowTitle('Basic Window Example')
setWindowTitle donne un titre à la fenêtre et elle peut être appelée quand vous en
avez besoin.
• fen.show()
Il est nécessaire pour montrer la fenêtre.
• app.exec_()
Nous avons besoin de démarrer cette boucle d’événement en utilisant la fonction.
Si nous ne le faisons pas, le programme va s’exécuter directement parce qu’il ne va pas
continuer à tourner sur lui-même et cette boucle d’événement ici attend des
événements de notre part pour s’exécuter là.
Gestion de la disposition
Le système de mise en page (layout) Qt fournit un moyen simple et puissant
d’organiser automatiquement les widgets enfants dans un widget parant.
• QHBoxLayout présente des widgets dans une ligne horizontale, de gauche à
droite.
Exemple de QVBoxLayout
Bases de Python
Interfaces graphiques en Python avec Qt 5 et PyQt5:
Composants graphiques usuels
Gestion du bouton
• On va connecter le signal clicked de la classe QPushButton avec l’appel
d’une fonction.
La partie import
La procédure principale
Combobox - QComboBox
Exemple de dessin
Fin