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