Méthodologie de la programmation - séance 1

publicité
Méthodologie de la programmation
Pablo Rauzy
pablo·rauzy @ univ-paris8·fr
pablo.rauzy.name/teaching/mdlp
UFR MITSIC / L1 informatique
Séance 1
La programmation impérative avec Python
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
1 / 20
La programmation impérative avec Python
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
2 / 20
Cette séance
I Objectifs :
• Programmation impérative avec un vrai langage.
• Écrire du code proprement (établir des conventions et les respecter).
I On va utiliser pour cela le langage Python, dans sa version 3.
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
3 / 20
Python
I Python a été créé en 1991 par Guido van Rossum.
I C’est un langage très répandu pour lequel il existe énormément de bibliothèques.
I Python est dynamiquement typé.
I Python est plutôt prévu pour la programmation impérative.
I Python offre un support de la programmation orientée objet (à base de classe).
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
4 / 20
Syntaxe
I La syntaxe de Python se veut très lisible.
I L’indentation et les retours à la ligne sont significatifs
du coup, pas besoin de séparer les instructions par un symbole comme ;.
I Les commentaires sont tout ce qui suit le symbole # sur une ligne jusqu’à la fin de
celle-ci.
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
5 / 20
Syntaxe
Variables, expressions, affectations
I Les variable n’ont pas de types et il n’y a pas besoin de les déclarer.
I La convention en Python est de nommer les variables en minuscules en séparant les
mots par des underscores.
I L’opérateur d’affection est =.
I Exemples :
• distance = speed * duration
• length_in_cm = 2.54 * length_in_inch
!
Attention, ce = est différent du = des mathématiques !
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
6 / 20
Syntaxe / Types et valeurs
True, False, None
I Les valeurs booléennes en Python sur True et False.
I Il existe aussi une valeur None qui veut dire “rien”.
I Les opérateurs de comparaison booléenne renvoient True ou False.
I L’égalité se teste avec ==, l’inégalité avec !=.
I Pour tester si une valeur expr est None on utilise expr is None.
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
7 / 20
Syntaxe / Types et valeurs
Nombres
I Les nombres peuvent être entier (Z) ou flottant (∼ R).
I Exemples :
• 13.51
• 42
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
8 / 20
Syntaxe / Types et valeurs
Chaînes de caractères
I Les chaînes de caractères sont notées entre simple ou double quote (' ou ").
I Selon lequel on utilise il faut l’échapper avec un \.
I Exemples :
• "Je m'appelle Python"
• "dites \"AAAAAAH\"."
• 'Je m\'appelle Python'
• 'dites "AAAAAAH".'
I On peut utiliser certains opérateurs sur les chaînes :
• "cou" * 2 # vaut "coucou"
• "MIT" + "SIC" # vaut "MITSIC"
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
9 / 20
Syntaxe / Types et valeurs
Tuples
I Python permet de manipuler des paires, des triplets, des quadruplets, . . .
I La syntaxe est de séparer les expressions par des virgules.
I Exemples :
• nom, age = "Sam", 24
• a, b = b, a
!
Attention 1,23 est la paire composée de 1 et 23, pas le nombre 1.23.
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
10 / 20
Syntaxe / Types et valeurs
Listes
I Une liste (ou tableau, ou vecteur) en Python se notent entre crochets et leurs
éléments séparés par des virgules.
I On accède à un élément d’une liste en donnant son indice entre crochets.
I Exemples :
• one_to_ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
• one_to_ten[3] # 4
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
11 / 20
Syntaxe / Types et valeurs
Dictionnaires
I Un dictionnaire (ou tableau associatif) en Python permet de stocker des
associations clef-valeur.
I On note les dictionnaires entre accolades, leurs entrées séparées par des virgules, et
les clefs séparées des valeurs par des :.
I On accède à une valeur avec sa clef entre crochets.
I Exemple :
1
2
3
4
5
6
7
8
9
10
mdlp = {
'niveau': 'L1',
'semestre': 1,
'enseignant · e · s': {
'A': 'JJ Bourdin',
'B': 'S Chalençon',
'C': 'A Pappa',
'D': 'P Rauzy'
}
}
11
12
13
mdlp['niveau'] # 'L1'
mdlp['enseignant · e · s']['D'] # 'P Rauzy'
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
12 / 20
Syntaxe
Conditions
I La syntaxe des conditions est la suivante :
• if condition:
then-block
elif other-condition:
otherwise-block
else:
else-block
I Il peut y avoir zéro ou plusieurs bloc elif après un bloc if.
I Il peut y avoir zéro ou un bloc else à la fin.
I Les branches sont introduites par un symbole : puis délimité par l’indentation.
I La convention en Python est d’utiliser 4 espaces comme indentation
(j’en utilise seulement 2 par habitude, mais c’est mieux de suivre les conventions !).
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
13 / 20
Syntaxe
Boucles
I Il existe deux types de boucles :
• “tant que”, qui répète un bloc d’instructions tant qu’une condition est vraie,
• “pour . . . dans”, qui répète un bloc d’instructions pour chaque valeur dans un conteneur.
I Leur syntaxe sont :
• while bool-expr:
do-block
• for v in iterable:
do-block
I Même syntaxe que pour les branches conditionnelles.
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
14 / 20
Syntaxe / Boucles
Compréhension de liste
I Il y a une syntaxe spéciale pour faire des opérations sur les éléments d’une liste.
I Pour créer une nouvelle liste à partir des éléments d’une liste existante :
• [expr(x) for x in lst]
I On peut au passage filtrer certains éléments de la liste :
• [expr(x) for x in lst if pred(x)]
I Exemples :
• lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
• [n * 2 for n in lst]
• [n * n for n in lst if (n % 2) == 0]
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
15 / 20
Syntaxe
Fonctions
I Les fonctions en Python sont définies avec le mot-clef def.
I La convention en Python est de nommer les fonctions en minuscules en séparant les
mots par des underscores.
I On utilise return expr pour renvoyer une valeur et quitter la fonction.
• Utilisé sans rien derrière c’est équivalent à return None.
I Exemples :
1
2
3
4
5
6
1
2
def fact (n):
result = 1
while n > 1:
result = n * result
n = n - 1
return result
def get_distance (speed, duration):
return speed * duration
I Appels de fonctions :
• fact(10)
• distance = get_distance(50, 0.25)
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
16 / 20
Syntaxe / Fonctions
Portées des variables
I Les variables qui sont initialisées en dehors d’une fonction sont dites globales.
I Les variables qui sont initialisées dans une fonction sont locales, elles n’existent que
dans cette fonction.
I L’affectation n’est pas une modification “en place”, elle crée une variable locale.
I Exemple :
1
a = 5 # global
2
3
4
5
6
7
def fct (arg):
b = "foo"
r = b * (a + arg) # ici a est accessible
a = 10
return r
8
9
10
# b et r ne sont plus accessibles ici
# ici a vaut
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
17 / 20
Syntaxe / Fonctions
Portées des variables
I Les variables qui sont initialisées en dehors d’une fonction sont dites globales.
I Les variables qui sont initialisées dans une fonction sont locales, elles n’existent que
dans cette fonction.
I L’affectation n’est pas une modification “en place”, elle crée une variable locale.
I Exemple :
1
a = 5 # global
2
3
4
5
6
7
def fct (arg):
b = "foo"
r = b * (a + arg) # ici a est accessible
a = 10
return r
8
9
10
# b et r ne sont plus accessibles ici
# ici a vaut 5
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
17 / 20
Syntaxe / Fonctions
Passage des arguments
I En Python les arguments sont passés aux fonctions par référence.
I Cela veut dire que si on fait une modification en place de ces variables, alors elles
seront affectées en dehors de la fonction aussi.
I L’affectation n’est pas une modification “en place”, elle crée une variable locale.
I Exemple :
1
2
3
def f (lst1, lst2):
lst1 = [1, 2, 3] # affectation d'une nouvelle liste
lst2.append(13) # ajout d'élément en place
4
5
6
a = [0, 1, 0, 1]
b = [10, 11, 12]
7
8
9
10
11
12
print(a)
print(b)
f(a, b)
print(a)
print(b)
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
18 / 20
Syntaxe / Fonctions
Passage des arguments
I En Python les arguments sont passés aux fonctions par référence.
I Cela veut dire que si on fait une modification en place de ces variables, alors elles
seront affectées en dehors de la fonction aussi.
I L’affectation n’est pas une modification “en place”, elle crée une variable locale.
I Exemple :
1
2
3
def f (lst1, lst2):
lst1 = [1, 2, 3] # affectation d'une nouvelle liste
lst2.append(13) # ajout d'élément en place
4
5
6
a = [0, 1, 0, 1]
b = [10, 11, 12]
7
8
9
10
11
12
print(a) # [0, 1, 0, 1]
print(b)
f(a, b)
print(a)
print(b)
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
18 / 20
Syntaxe / Fonctions
Passage des arguments
I En Python les arguments sont passés aux fonctions par référence.
I Cela veut dire que si on fait une modification en place de ces variables, alors elles
seront affectées en dehors de la fonction aussi.
I L’affectation n’est pas une modification “en place”, elle crée une variable locale.
I Exemple :
1
2
3
def f (lst1, lst2):
lst1 = [1, 2, 3] # affectation d'une nouvelle liste
lst2.append(13) # ajout d'élément en place
4
5
6
a = [0, 1, 0, 1]
b = [10, 11, 12]
7
8
9
10
11
12
print(a) # [0, 1, 0, 1]
print(b) # [10, 11, 12]
f(a, b)
print(a)
print(b)
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
18 / 20
Syntaxe / Fonctions
Passage des arguments
I En Python les arguments sont passés aux fonctions par référence.
I Cela veut dire que si on fait une modification en place de ces variables, alors elles
seront affectées en dehors de la fonction aussi.
I L’affectation n’est pas une modification “en place”, elle crée une variable locale.
I Exemple :
1
2
3
def f (lst1, lst2):
lst1 = [1, 2, 3] # affectation d'une nouvelle liste
lst2.append(13) # ajout d'élément en place
4
5
6
a = [0, 1, 0, 1]
b = [10, 11, 12]
7
8
9
10
11
12
print(a) # [0, 1, 0, 1]
print(b) # [10, 11, 12]
f(a, b)
print(a) # [0, 1, 0, 1]
print(b)
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
18 / 20
Syntaxe / Fonctions
Passage des arguments
I En Python les arguments sont passés aux fonctions par référence.
I Cela veut dire que si on fait une modification en place de ces variables, alors elles
seront affectées en dehors de la fonction aussi.
I L’affectation n’est pas une modification “en place”, elle crée une variable locale.
I Exemple :
1
2
3
def f (lst1, lst2):
lst1 = [1, 2, 3] # affectation d'une nouvelle liste
lst2.append(13) # ajout d'élément en place
4
5
6
a = [0, 1, 0, 1]
b = [10, 11, 12]
7
8
9
10
11
12
print(a)
print(b)
f(a, b)
print(a)
print(b)
# [0, 1, 0, 1]
# [10, 11, 12]
# [0, 1, 0, 1]
# [10, 11, 12, 13]
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
18 / 20
Syntaxe / Fonctions
Arguments par défaut
I Il est possible de spécifier une valeur par défaut pour certains arguments (qui doivent
tous être après ceux qui n’ont pas de valeur par défaut).
I Exemple :
1
2
3
def get_distance (speed, duration = 1/6):
# par défaut, on calcul la distance parcouru en 10 minutes}
return speed * duration
4
5
6
get_distance(50, 0.5) # une demi-heure en agglomération
get_distance(130)
# 10 minutes sur l'autoroute
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
19 / 20
TD
1. Réécrire fizzbuzz en Python.
2. Écrire une fonction qui prend une liste de contacts et une lettre et renvoie la liste des
emails de celleux dont le nom commence par cette lettre (on imagine que chaque
contact est enregistré comme dictionnaire avec comme informations son prénom, son
nom, et son adresse email).
I Informations (peut-être) utiles :
• range(min,max) retourne une liste dont les éléments sont les nombres de min à max
(non-inclus).
• Les caractères d’une chaîne de caractères sont accessibles comme les éléments d’une liste.
• Les chaînes de caractères répondent à une méthode lower() qui converti les majuscules
en minuscules.
Pablo Rauzy (Paris 8 / LIASD)
Méthodologie de la programmation
Séance 1
20 / 20
Téléchargement