Programmation sous Python
Première partie
1
CPGE-Taza 2017-2018
La programmation
Démarche
La programmation consiste à « expliquer » en détails à une machine ce qu'elle doit faire, en sachant qu'elle ne peut pas véritablement « comprendre » un langage humain, mais seulement effectuer un traitement automatique sur des séquences de caractères.
Un programme n'est rien d'autre qu'une suite d'instructions, codées en respectant de manière stricte un ensemble de conventions fixées à l'avance que l'on appelle un langage informatique. La machine est ainsi pourvue d'un mécanisme qui décode ces instructions en associant à chaque « mot » du langage une action précise.
Apprendre à programmer :
2
CPGE-Taza 2017-2018
Machine, Langage et Programmation
…00110011001100110011000011111100001111….
Alors que nous raisonnons en base 10 (grâce à nos 10 doigts)
Imaginez qu’un ordinateur ne sache compter qu’avec une paire de doigts
3
CPGE-Taza 2017-2018
Le seul «langage» que l'ordinateur puisse véritablement «comprendre» est donc très éloigné de ce que nous utilisons nous-mêmes.
00011111, 1E , AB6D, …etc
Machine, Langage et Programmation
4
CPGE-Taza 2017-2018
Le système de traduction proprement dit s'appellera interpréteur ou bien compilateur, suivant la méthode utilisée pour effectuer la traduction.
Machine, Langage et Programmation
On appellera langage de programmation un ensemble de « mots-clés » (choisis arbitrairement) associé à un ensemble de règles très précises indiquant comment on peut assembler ces mots pour former des « phrases » que l'interpréteur ou le compilateur puisse traduire en langage machine (binaire)
5
CPGE-Taza 2017-2018
Le langage que vous allez découvrir en premier est Python
Langage machine, langage de programmation
Pourquoi ?
6
CPGE-Taza 2017-2018
Compilation et Interprétation
Ce que nous écrirons …
Il existe deux techniques de traduction
Ce que l’on utilisera à chaque fois que l’on voudra exécuter le code source : traduction/exécution ligne par ligne.
Affichage ligne par ligne
7
CPGE-Taza 2017-2018
traduit la totalité du texte source en une fois
Programme prêt à être exécuté
Compilation et interprétation
8
CPGE-Taza 2017-2018
Compilation et interprétation
Chacune de ces deux techniques a ses avantages et ses inconvénients
9
CPGE-Taza 2017-2018
Certains langages modernes tentent de combiner
les deux techniques afin de garder le meilleur de chacune.
très facile à interpréter
portable
Compilation et interprétation
10
CPGE-Taza 2017-2018
Tout ceci peut paraître un peu compliqué, mais la bonne nouvelle
est que tout ceci est pris en charge automatiquement par l'environnement de développement de Python.
Il vous suffira d'entrer vos commandes au clavier, de frapper <Enter>,
et Python se chargera de les compiler et de les interpréter pour vous.
Remarque
Compilation et interprétation
11
CPGE-Taza 2017-2018
Mise au point d'un programme.
Recherche des erreurs «debug»
Trois types d’erreurs :
12
CPGE-Taza 2017-2018
Langages naturels et langages formels
Les langages de programmation sont des langages formels qui ont été développés pour décrire des algorithmes et des structures de données.
13
CPGE-Taza 2017-2018
Langages naturels et langages formels
Lorsque vous lisez une phrase quelconque, vous devez arriver à vous représenter la structure logique de la phrase (même si vous le faites inconsciemment la plupart du temps).
Par exemple, lorsque vous lisez la phrase « la pièce est tombée », vous comprenez que « la pièce » en est le sujet et « est tombée » le verbe.
L'analyse vous permet de comprendre la signification et la logique de la
phrase (sa sémantique).
D'une manière analogue, l'interpréteur Python devra analyser la structure de votre programme source pour en extraire la signification.
Par comparaison au système de raisonnement humain …
Les langages naturels et formels ont donc beaucoup de caractéristiques communes (symboles, syntaxe, sémantique), mais ils présentent aussi des différences très importantes : ambiguïté et redondance chez l’un, littéralité chez l’autre.
14
CPGE-Taza 2017-2018
Premiers PAS !
15
CPGE-Taza 2017-2018
Premiers PAS !
« Calculer avec Python en mode interactif »
L'interpréteur peut être lancé directement depuis la ligne de commande (dans un
« shell » Linux, ou bien dans une fenêtre DOS sous Windows) : taper la commande "python"
Les trois caractères >>> constituent le signal d'invite, ou prompt principal, lequel vous indique que Python est prêt à exécuter une commande.
16
CPGE-Taza 2017-2018
>>> 5+3
>>> 2 - 9 # les espaces sont optionnels
>>> 7 + 3 * 4 # la hiérarchie des opérations mathématiques
# est-elle respectée ?
>>> (7+3)*4
>>> 20 / 3
Calculer avec Python en mode interactif
Les parenthèses sont fonctionnelles.
17
CPGE-Taza 2017-2018
Données et variables
1110000000011
1110001110011
1110001110000
0000001110011
0000000000011
.
.
.
Une variable apparaît dans un langage de programmation sous un nom de variable, mais pour l'ordinateur il s'agit d'une référence désignant une adresse mémoire, c'est-à-dire un emplacement précis dans la mémoire vive.
Taille
Quantité
Prix_Unitaire
@
@
@
Mémoire
18
CPGE-Taza 2017-2018
Noms de variables et mots réservés
Les noms de variables sont des noms (identificateurs) 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 :
19
CPGE-Taza 2017-2018
En plus de ces règles, il faut encore ajouter que vous ne pouvez pas utiliser comme noms de variables les 33 « mots réservés » au langage ci-dessous (version 3.3.0):
Noms de variables et mots réservés
�
and | del | from | None | True | as |
elif | global | nonlocal | try | assert | else |
if | not | while | break | except | import |
or | with | class | False | in | pass |
yield | continue | finally | is | raise | def |
for | lambda | return | | | |
20
CPGE-Taza 2017-2018
Affectation (ou assignation)
Nous savons désormais comment choisir judicieusement un nom de variable. Voyons à présent comment nous pouvons en définir et affecter une valeur.
En Python comme dans de nombreux autres langages, l'opération d'affectation est représentée par le signe égal :
>>> n = 7 # donner à n la valeur 7
>>> msg = "Quoi de neuf ?" # affecter la valeur "Quoi de neuf ?" à msg
>>> pi = 3.14159 # assigner sa valeur à la variable pi
7 en binaire
« quoi de neuf »
en binaire…
3,14159 en binaire
.
.
.
n
Pi
msg
@
@
@
Mémoire
21
CPGE-Taza 2017-2018
Afficher la valeur d'une variable
Pour afficher la valeur à l'écran, il existe deux possibilités. :
>>> n
7
>>> msg
"Quoi de neuf ? " #affiche les guillemets, donc le type.
>>> pi
3.14159
>>> print (msg)
Quoi de neuf ? #pas de guillemets.
Pas de Typage explicite des variables sous python
22
CPGE-Taza 2017-2018
Sous Python, on peut assigner une valeur à plusieurs variables simultanément.
Exemple :
>>> x = y = 7
>>> x
7
>>> y
7
On peut aussi effectuer des affectations parallèles à l'aide d'un seul opérateur :
>>> a, b = 4, 8.33
>>> a
4
>>> b
8.33
Dans cet exemple, les variables a et b prennent simultanément les nouvelles valeurs 4 et 8,33.
Affectations multiples
23
CPGE-Taza 2017-2018
2.1. Décrivez le plus clairement et le plus complètement possible ce qui se passe à chacune des trois lignes de l'exemple ci-dessous :
>>> largeur = 20
>>> hauteur = 5 * 9.3
>>> largeur * hauteur
930
2.2. Assignez les valeurs respectives 3, 5, 7 à trois variables a, b, c.
Effectuez l'opération a - b/c.
Exercices d’application
24
CPGE-Taza 2017-2018
On manipule les valeurs et les variables qui les référencent, en les combinant avec des opérateurs pour former des expressions.
Exemple :
a, b = 7.3, 12
y = 3*a + b/5
z=b%7+b//7*7-3**2+a- int(a)*2**3
Opérateurs et expressions
Exercices:
b) Décrivez ce qui se passe à l’exécution des lignes suivantes :
r , pi,mess = 12, 3.14159,’hello’
s = pi * r**2
print(s)
print(mess*4)
print(type(r), type(pi), type(s),type(mess))
Quelle est, à votre avis, l'utilité de la fonction type() ?
25
CPGE-Taza 2017-2018
Priorité des opérations
PEMDAS pour le mémoriser !
26
CPGE-Taza 2017-2018
Composition
L'une des grandes forces d'un langage de programmation de haut niveau est qu'il permet de construire des instructions complexes par assemblage de fragments divers. Ainsi par exemple, si vous savez comment additionner deux nombres et comment afficher une valeur, vous pouvez combiner ces deux instructions en une seule :
print(type(17 + 3))
<class 'int'>
Cela n'a l'air de rien, mais cette fonctionnalité qui paraît si évidente va vous permettre de programmer des algorithmes complexes de façon claire et concise. Exemple :
h, m, s = 15, 27, 34
print("nombre de secondes écoulées depuis minuit = ", h*3600 + m*60 + s)
Ce que vous placez à la gauche du signe égale dans une expression doit toujours être une variable, et non une expression : le signe égale n'a pas la même signification qu'en mathématiques, il s'agit d'un symbole d'affectation
m + 1 = b est incorrect.
Par contre, a = a + 1 est inacceptable en math,
mais correct en programmation
27
CPGE-Taza 2017-2018
Les structures de contrôle sont les groupes d'instructions qui déterminent l'ordre dans lequel les actions sont effectuées dans le programme.
En programmation moderne, il en existe seulement trois : la séquence, la sélection que nous allons décrire dans ce qui suit, et la répétition.
Structures de contrôle
28
CPGE-Taza 2017-2018
Sauf mention explicite, les instructions d'un programme s'exécutent les unes après les autres, dans l'ordre où elles ont été écrites à l'intérieur du programme.
Le « chemin » d’exécution est appelé un flux d'instructions, et les constructions qui le modifient sont appelées des instructions de contrôle de flux.
Python exécute normalement les instructions de la première à la dernière, sauf lorsqu'il rencontre une instruction conditionnelle comme l'instruction «if». Une telle instruction va permettre au programme de suivre différents chemins suivant les circonstances.
Séquence d'instructions
début d’exécution
fin d’exécution
if
circonstance1
circonstance2
Instruction de contrôle du flux
29
CPGE-Taza 2017-2018
Sélection ou exécution conditionnelle
L'instruction if.
a = 150
if (a > 100):
print("a dépasse la centaine" )
Indentation obligatoire
En interactif : (mode commande)
Frappez encore une fois <Enter>. Le programme s'exécute, et vous obtenez :
a dépasse la centaine.
Recommencez le même exercice, mais avec a = 20 en guise de première ligne : cette fois Python
n'affiche plus rien du tout.
30
CPGE-Taza 2017-2018
a = 20
if (a > 100):
print("a dépasse la centaine")
else:
print("a ne dépasse pas cent")
Sélection ou exécution conditionnelle
En interactif :
Frappez <Enter> encore une fois. Le programme s'exécute, et affiche cette fois :
a ne dépasse pas cent.
Comme vous l'aurez certainement déjà compris, l'instruction else (« sinon », en anglais) permet de programmer une exécution alternative, dans laquelle le programme doit choisir entre deux possibilités
31
CPGE-Taza 2017-2018
a = 0
if a > 0 :
print( " a est positif ")
elif a < 0 :
print("a est négatif")
else:
print("a est nul")
On peut faire mieux encore en utilisant aussi l'instruction elif (contraction de « else if ») :
Sélection ou exécution conditionnelle
32
CPGE-Taza 2017-2018
x == y # x est égal à y (deux signes « égale » et non un seul)
x != y # x est différent de y
x > y # x est plus grand que y
x < y # x est plus petit que y
x >= y # x est plus grand que, ou égal à y
x <= y # x est plus petit que, ou égal à y
Opérateurs de comparaison
La condition évaluée après l'instruction «if» peut contenir les opérateurs de comparaison suivants :
Exemple :
a = 7
if (a % 2 == 0):
print("a est pair")
print("parce que le reste de sa division par 2 est nul")
else:
print("a est impair")
Même symbolisme qu’en C++ et en Java
33
CPGE-Taza 2017-2018
Instructions composées – Blocs d'instructions
S'il y a plusieurs instructions indentées sous la ligne d'en-tête, elles doivent l'être exactement au même niveau .
Ces instructions indentées constituent ce que nous appellerons désormais un bloc d'instructions.
L'instruction if est votre premier exemple d'instruction composée
Exemple :
Ligne d'en-tête:
première instruction du bloc
... ...
... ...
dernière instruction du bloc
Sous Python, toutes les instructions composées ont toujours la même structure : une ligne d'en-tête terminée par un double point, suivie d'une ou de plusieurs instructions indentées sous cette ligne d'en-tête.
34
CPGE-Taza 2017-2018
Il est parfaitement possible d'imbriquer les unes dans les autres plusieurs instructions composées, de manière à réaliser des structures de décision complexes.
Instructions imbriquées
if age >= 18: # 1
if etat_civile == "marié": # 2
if nb_enfants>0: # 3
if sexe == « masculin": # 4
print("ce monsieur, est majeur et père de famille" ) # 5
else:
print("cette dame est la mère de la famille") # 6
elif etat_civile! = ‘veuf‘ and etat_civile!=‘veuve’: # 7
print("c'est peut-être un (e) célibataire") # 8
Else:
print("c’est un (e ) mineur(e ) ") # 9
Exemple :
35
CPGE-Taza 2017-2018
Quelques règles de syntaxe Python
Avec Python, vous devez utiliser les sauts à la ligne et l'indentation. Python vous force donc à écrire du code lisible, et à prendre de bonnes habitudes que vous conserverez lorsque vous utiliserez d'autres langages.
Les blocs d'instructions sont toujours associés à une ligne d'en-tête contenant une instruction bien spécifique (if, elif, else, while, def, ...) se terminant par un double point
36
CPGE-Taza 2017-2018
Instructions répétitives.
>>> altitude = 320
>>> altitude
320
>>> altitude = 375
>>> altitude
375
Permet de remplacer l'ancienne valeur d'une variable par une nouvelle
Rappels sur l’affectation :
>>> a = 5
>>> b = a # a et b contiennent des valeurs égales
>>> b = 2 # a et b sont maintenant différentes
Ré-affectation
37
CPGE-Taza 2017-2018
Exercice (permutation de valeurs)
Instructions répétitives
Supposons par exemple que nous voulions maintenant échanger les valeurs des variables a et c. (Actuellement, a contient la valeur 3, et c la valeur 5.
Nous voudrions que ce soit l'inverse). Comment faire ?
4.1. Écrivez les lignes d'instructions nécessaires pour obtenir ce résultat sous python.
Rappelons ici que Python permet d'affecter leurs valeurs à plusieurs variables simultanément :
>>> a, b, c, d = 3, 4, 5, 7
38
CPGE-Taza 2017-2018
De façon générale, nous parlerons de conteneur pour désigner un type de données permettant de stocker un ensemble d’autres données, en ayant ou non, suivant les types, une notion d’ordre entre ces données.
Nous parlerons aussi d’itérable pour désigner un conteneur que l’on peut parcourir élément par élément.
Pour parcourir ces conteneurs, nous nous servirons parfois de range() qui fournit un moyen commode pour générer une liste de valeurs.
Notions de conteneur et d’itérable
Par exemple :
uneListe = list(range(6)) # list génère une structure liste.
print(uneListe) # on affiche la liste
Ce qui affichera : [0, 1, 2, 3, 4, 5]
Ces notions seront étudiées plus tard dans le chapitre des listes.
39
CPGE-Taza 2017-2018
Python propose deux type de répétitions (ou boucles) :
Voyons la syntaxe de chacune d’elles et leurs caractéristiques.
Instructions répétitives.
L'une des tâches que les machines font le mieux est la répétition (bouclage) sans erreur de tâches identiques !
40
CPGE-Taza 2017-2018
Répétitions en boucle - l'instruction for
for lettre in "ciao":
print(lettre)
#affichage de: c i a o
for x in [2, 'a', 3.14]:
print(x)
#affichage de : 2 a 3.14
for i in range(5):
print(i)
# affichage de : 0 1 2 3 4
nb_voyelles = 0
for lettre in "Python est un langage tres sympa":
if lettre in "aeiouy":
nb_voyelles = nb_voyelles + 1
print(nb_voyelles)
# affichage du contenu de la variable nb_voyelle qui vaut 10
Quelques exemples de boucle for :
41
CPGE-Taza 2017-2018
Commentaires
Répétitions en boucle - l'instruction for
42
CPGE-Taza 2017-2018
Répétitions en boucle - l'instruction while
L'une des tâches que les machines font le mieux est la répétition sans erreur de tâches identiques !
Une des méthodes pour programmer ces tâches répétitives est construite autour de l'instruction while.
a = 0
while (a < 7): # (n'oubliez pas le double point !)
a = a + 1 # (n'oubliez pas l'indentation !)
print(a)
43
CPGE-Taza 2017-2018
nouvelle fois et le bouclage se poursuit.
Répétitions en boucle - l'instruction while
Commentaires
n = 3
while n < 5:
print("hello !")
Exemple de boucle sans fin ou infinie (à éviter) :
a = 0
while (a < 7): # (n'oubliez pas le double point !)
a = a + 1 # (n'oubliez pas l'indentation !)
print(a)
Ici la valeur de n ne change pas dans le corps de la boucle:
Elle est toujours égale à 3 donc la condition est toujours vraie!!
S’assurer toujours que la condition va devenir fausse, dans le corps de la boucle, à un moment donné.
44
CPGE-Taza 2017-2018
L’instruction permet de sortir immédiatement de la boucle for ou while en cours .
Exemple :
Répétitions en boucle - Interrompre une boucle : break
for x in range(1, 11):
if x == 5:
break
print(x, end=" ")
# end permet de garder le curseur sur la même ligne sans retourner à la ligne
print ("Boucle interrompue pour x =", x)
Le résultat obtenu :
1 2 3 4
Boucle interrompue pour x = 5
45
CPGE-Taza 2017-2018
L’instruction permet de passer immédiatement à l’itération suivante de la boucle for ou while en cours; reprend à la ligne de l’en-tête de la boucle.
Exemple :
Répétitions en boucle - Court-circuiter une boucle : continue
for x in range(1, 11):
if x == 5:
continue
print(x, end=" ")
Le résultat est le suivant :
1 2 3 4 6 7 8 9 10
# la boucle a sauté la valeur 5
46
CPGE-Taza 2017-2018
ci-dessous :
1 euro(s) = 1.65 dollar(s)
2 euro(s) = 3.30 dollar(s)
4 euro(s) = 6.60 dollar(s)
8 euro(s) = 13.20 dollar(s)
etc. (S'arrêter à 16384 euros)
Exercices
47
CPGE-Taza 2017-2018
Fin première partie
48
CPGE-Taza 2017-2018