Programmation avec Python La programmation procédurale Adel Daouzli LOL (LyonOpenLab) Mél : [email protected] Web : http://lyonopenlab.net/programmation Adel Daouzli Programmation - Python 1 / 39 Introduction Programmation B Sujet vaste et abondamment traité B Permet de développer des programmes informatiques (jeux, graphismes, traitement de texte, multimédia, industrie, web,...) B Actuellement la POO (Programmation Orientée Objet) est très en vogue B De nombreux langages pour différentes applications (C/C++, Python, Perl, PHP, Assembleur, Java,...) Adel Daouzli Programmation - Python 2 / 39 Introduction Python B Le nom est un clin d’oeil aux Monthy Python B Langage interprété (scripts) B Langage entièrement Orienté Objet B Tout à fait possible de faire abstraction de l’Objet! B Syntaxe simple et purifiée B Permet de se concentrer sur l’essentiel B Langage très riche et performant malgré sa simplicité apparente Adel Daouzli Programmation - Python 3 / 39 Introduction Python B Le nom est un clin d’oeil aux Monthy Python B Langage interprété (scripts) B Langage entièrement Orienté Objet B Tout à fait possible de faire abstraction de l’Objet! B Syntaxe simple et purifiée B Permet de se concentrer sur l’essentiel B Langage très riche et performant malgré sa simplicité apparente Objectifs de ce cours B Apprendre les bases de la programmation B Apprendre le langage Python B Connaı̂tre les subtilités du langage Adel Daouzli Programmation - Python 3 / 39 Plan 1 Démarrage 2 Les variables 3 Les structures de contrôle 4 Les listes 5 Les Entrées/Sorties 6 Les fonctions 7 Les décorateurs 8 Bilan Adel Daouzli Programmation - Python 4 / 39 La programmation en Python Au préalable B Il vous faut évidemment Python d’installé (normalement c’est fait sous Linux, pour les autres OS voir http://www.python.org/download) B Vous pouvez utiliser l’éditeur que vous préférez. Je vous conseille sous GNU/Linux vim ou Geany, sous windows Notepad++. Pour ceux qui aiment Eclipse vous pouvez utiliser le module PyDev. B Ce cours essaie d’être indépendant de la version de Python que vous utilisez mais il y aura forcément des différences notament entre les versions antérieur à la version 3 et cette dernière. Je m’efforcerais de préciser les différences lorsqu’il y en a. Mais il est préférable d’apprendre à utiliser Python 3 étant la nouvelle version. B Normalement, ce qui est codé ici devrait fonctionner sur Linux et d’autres systèmes mais je vous conseille vivement de coder sous Linux qui sera plus adapté à la programmation et qui est le système que j’utilise pour ce cours. Adel Daouzli Programmation - Python 5 / 39 La programmation en Python Pour commencer... B Lancez l’interpréteur Python dans un terminal (sous windows cmd ou command.com) en tapant python B Vous pouvez lire le numéro de version dans la première affichée à la console à côté de ”Python”. Vous pouvez aussi depuis un terminal taper python − −version B B Une fois Python lancé, vous aurez un prompt indiquant >>> et un curseur clignotant après lequel vous pourrez entrer vos commandes. Pour information, lorsqu’on entre un nombre ou une chaı̂ne de caractères ou un nom de variable et qu’on valide par Entrée, l’interpréteur affiche le nombre ou la chaı̂ne saisi ou la valeur de la variable. Adel Daouzli Programmation - Python 6 / 39 La programmation en Python Afficher un message B Pour afficher un message dans la console, comme nous venons de le voir l’interpréteur le fait automatiquement. Mais il est possible de le faire de façon volontaire, il faut alors utiliser la fonction print. Ceci est indispensable si vous exécutez votre programme en dehors de l’interpréteur (vous pouvez depuis le terminal taper python nom de mon script.py). B En Python 3 il faut mettre le message à afficher entre parenthèses ce qui n’étais pas obligatoire dans les versions précédentes. B Exemples: print("Hello world!") print (15) print " coucou vous" (ne marche plus à partir de Python 3!) Adel Daouzli Programmation - Python 7 / 39 La programmation en Python Afficher un message B On peut afficher plusieurs éléments (texte, variables, valeurs) en les concaténant de deux manières. L’opérateur + permet de concaténer des chaı̂nes. print("Hello " + "toi") B On peut afficher des éléments de types différents en utilisant la virgule print("J’ai", 15, "ans et", 10, " dents ") B On peut utiliser une chaı̂ne formatée. On indique par {} un élément à insérer dans la chaı̂ne qu’on fournit dans la fonction format() qui suit un point après la chaı̂ne. print("J’ai {} ans et {} dents ". format (15 , 10)) Adel Daouzli Programmation - Python 8 / 39 Plan 1 Démarrage 2 Les variables 3 Les structures de contrôle 4 Les listes 5 Les Entrées/Sorties 6 Les fonctions 7 Les décorateurs 8 Bilan Adel Daouzli Programmation - Python 9 / 39 Les variables Les différents types Les variables permettent de stocker des données qui peuvent être de différents types. Cela permet de mémoriser une information pour la traiter, l’afficher, l’initialiser, ... Il en existe différents types: B Les nombres (âge du capitaine, rayon d’un cercle, nombre de pommes dans un panier...) B Les chaı̂nes de caractères (nom, citation, discours,...) B Les booléens (vrai/faux) B Les conteneurs (liste de course, coordonnées GPS, coordonnées d’une personne (nom/prénom/adresse..)) B Les objets (tout et n’importe quoi!) Adel Daouzli Programmation - Python 10 / 39 Les variables Nommage/Affectation B Le nom est quelconque et peut contenir des lettres minuscules/majuscules, chiffres (ne doit pas commencer le nom), et le caractère underscore . Il ne doit pas contenir de caractères spéciaux ni d’espaces. B Pour mettre une valeur dans une variable on utilise le caractère = B Pour afficher le contenu d’une variable utilisez print : print(ma variable) B Exemples: age_du_capitaine = 58 print( age_du_capitaine ) super_nom = ’toto ’ print( super_nom ) ma_liste = [’poireaux ’, ’carottes ’, ’endives ’, ’lessive ’] print( ma_liste ) Adel Daouzli Programmation - Python 11 / 39 Les variables Nommage/Affectation B Le nom est quelconque et peut contenir des lettres minuscules/majuscules, chiffres (ne doit pas commencer le nom), et le caractère underscore . Il ne doit pas contenir de caractères spéciaux ni d’espaces. B Pour mettre une valeur dans une variable on utilise le caractère = B Pour afficher le contenu d’une variable utilisez print : print(ma variable) B Exemples: age_du_capitaine = 58 print( age_du_capitaine ) super_nom = ’toto ’ print( super_nom ) ma_liste = [’poireaux ’, ’carottes ’, ’endives ’, ’lessive ’] print( ma_liste ) Remarque B Python reconnaı̂t tout seul le type de donnée qu’on manipule! (pas de typage explicite) B Pour connaı̂tre le type d’une variable on utilise la fonction type() comme suit: type(ma variable) Adel Daouzli Programmation - Python 11 / 39 Les variables Les chaines de caractères B Pour stocker tous ce qui peut être affiché. B Ce qui définit une chaı̂ne: ◦ ◦ ◦ ◦ B Des délimiteurs qui sont soit ’, soit ”, soit 3 fois l’un ou l’autre Les ”’ et ” ” ” permettent d’écrire des chaı̂ne de caractères sur une ou plusieurs lignes Tout ce qui se trouve entre les délimiteurs est la chaı̂ne de caractères Le délimiteur pour indiquer la fin de chaı̂ne doit être le même que celui indiquant le début de chaı̂ne On peut à peu près tout convertir en chaı̂ne de caractères (nombres, listes, divers objets,..) Adel Daouzli Programmation - Python 12 / 39 Les variables Les chaines de caractères B Pour stocker tous ce qui peut être affiché. B Ce qui définit une chaı̂ne: ◦ ◦ ◦ ◦ B Des délimiteurs qui sont soit ’, soit ”, soit 3 fois l’un ou l’autre Les ”’ et ” ” ” permettent d’écrire des chaı̂ne de caractères sur une ou plusieurs lignes Tout ce qui se trouve entre les délimiteurs est la chaı̂ne de caractères Le délimiteur pour indiquer la fin de chaı̂ne doit être le même que celui indiquant le début de chaı̂ne On peut à peu près tout convertir en chaı̂ne de caractères (nombres, listes, divers objets,..) Remarque B On ne pourra pas utiliser l’apostrophe lorsque celle-ci sert de délimiteur sinon il faut l’échapper avec le caractère spécial \ou alors utiliser les guillemets comme délimiteur. Le corollaire est vrai. B L’avantage des délimiteurs ”’ et ” ” ” est qu’on peut écrire sans problème les caractères ’ et ” sans les échapper. Adel Daouzli Programmation - Python 12 / 39 Les variables Chaı̂nes Exemple d’affectation de chaı̂nes: chaine = "c’est une chaine " chaine2 = ’voici une autre chaı̂ne ’ chaine3 = """ encore un exemple de chaine qui peut être écrite sur plusieurs lignes """ chaine4 = ’’’idem pour celle -ci qui peut s’écrire sur plusieurs lignes ’’’ Conversion: B une variable de n’importe quel type → chaı̂ne : chaine = str(une variable) B nombre → chaı̂ne : chaine nb = str(235) B nombre entier → chaı̂ne hexadécimale : chaine hexa = hex(1045235) (donnera ’0xff2f3’) Adel Daouzli Programmation - Python 13 / 39 Les variables Les nombres B Nombres entiers (-15, 12384,..), à virgule flottante (12.5, -79.8789, 1.5e-12,..) B Opérateurs utilisables pour faire des calculs : ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ B // : division entière en Python3 / et % : division et modulo ∗ et ∗∗: multiplication et puissance + et − : addition et soustraction | et ˆ: OU inclusif et OU exlusif & : ET ˜: inversion de bits << et >> : décalages à gauche et à droite Convertible en chaı̂ne de caractères et vice-versa Adel Daouzli Programmation - Python 14 / 39 Les variables Nombres Exemple de calculs: nombre = 4 moyenne = (5 + 12.75 + 18 + 10.5) / nombre carre_de_nombre = nombre ** 2 Conversion: B mon nombre = −8.123 B entier → chaı̂ne : chaine = str(mon nombre) B ma chaine = ”25” B chaı̂ne → entier : nb = int(ma chaine) B ma chaine = ”15.725” B chaı̂ne → flottant : nb = f loat(ma chaine) B ma chaine hexa = ”AF1B30” (ou ”0xAF1B30”) B chaı̂ne hexadécimale → entier : nb = int(ma chaine hexa, 16) Adel Daouzli Programmation - Python 15 / 39 Les variables Les booléens B Les deux valeurs possible sont True et False. Exemple d’affectation : mon_booleen = True B Les booléen sont utiles pour les tests conditionnels que nous verrons plus loin. Adel Daouzli Programmation - Python 16 / 39 Les variables Les listes, tuples et dictionnaires Voici un simple aperçu. Nous verrons ces objets plus tard dans ce cours. B Les listes permettent de stocker plusieurs éléments de types différents ou de même type. Exemple d’affectation : ma_liste = [’toto ’, 15, ’0x125 ’, 156.25 , "c’est super !!"] B Les tuples sont des listes constantes, dont on ne peut pas modifier les données une fois initialisées. Exemple d’affectation : mon_tuple = (2.3e5 , 25, ’toto ’) B Les dictionnaires permettent de stocker des données associées à des clés. Les clées et les données peuvent être de types différents. Exemple d’affectation : mon_dico = {’nom ’:’toto ’, ’age ’:15 , ’adr ’:’1 rue Jolie ’} Adel Daouzli Programmation - Python 17 / 39 Les variables Lire depuis le clavier Il serait intéressant d’affecter une variable avec des données demandée à l’utilisateur. Ceci rajoutera de l’interaction avec l’utilisateur et rendra nos programmes plus dynamiques. B La fonction input() permet de lire des informations depuis le clavier: nom = input(’entre ton nom:’) print(nom) age = input(’entre ton age:’) age = int(age) print(age) B En réalité les données sont lues depuis l’entrée standard (par défaut le clavier). Attention B Avec les anciennes version de Python il faut utiliser raw input() pour lire une chaı̂ne de caractères. B input() permettait de lire des données que Python peut évaluer (nombres, listes, expressions,..). Pour obtenir un comportement similaire à partir de Python3, il faut utiliser eval(input()) Adel Daouzli Programmation - Python 18 / 39 Plan 1 Démarrage 2 Les variables 3 Les structures de contrôle 4 Les listes 5 Les Entrées/Sorties 6 Les fonctions 7 Les décorateurs 8 Bilan Adel Daouzli Programmation - Python 19 / 39 Les structures de contrôle Blocs d’instruction B Pour l’instant nous savons récupérer des données saisies depuis le clavier, les stocker dans des variables. Nous savons faire quelques manipulations avec les variables et les afficher à l’écran. B Il peut être nécessaire de regrouper des instructions dans des blocs. Par exemple si on veut qu’une suite d’instructions s’exécutent à une certaine condition et qu’une autre suite sous une autre condition. Cela est nécessaire aussi si on veut répéter une certaine suite d’instruction un certain nombre de fois. Pour délimiter un bloc d’instruction en Python, nous utilisons l’indentation! En effet il suffit que l’ensemble des instructions regroupées soient alignées sur une même colonne (même nombre d’espaces ou de tabulations à gauche) Adel Daouzli Programmation - Python 20 / 39 Les structures de contrôle Blocs d’instructions si UNE_CONDITION : instruction_1a instruction_2a instruction_3a ... si AUTRE_CONDITION : instruction_1b instruction_2b instruction_3b ... boucle_tant_que CONDITION : instruction_1c instruction_2c ... Notez qu’il faut être uniforme dans les séparations d’un même bloc en utilisant exactement les même séparateurs. Il est fortement conseillé d’utiliser des espaces (de préférence au nombre de 4). Adel Daouzli Programmation - Python 21 / 39 Les structures de contrôle Les tests conditionnels B Il s’agit d’éxécuter des instructions uniquement si une condition est vérifiée. B Les conditions sont des tests dont le résultat est un booléen True ou False B Tests de comparaisons: ◦ ◦ ◦ ◦ B Tests d’appartenance à une séquence (liste, dictionnaire, tuple, chaı̂ne): ◦ ◦ B a == b → a égal b a != b → a différent de b a < b / a > b / a <= b / a >= b → a inférieur/supérieur / ou égal b a is b → a est un objet de type b a in b → a est dans la séquence b a not in b → a n’est pas dans la séquence b Faire plusieurs tests: CONDITION A or CONDITION B → il faut qu’au moins une des conditions soit vraie pour que le test soit vrai ◦ CONDITION A and CONDITION B → il faut que les deux conditions soit vraies pour que le test soit vrai ◦ On peut enchaı̂ner plusieurs conditions dans le même test et utiliser des parenthèses si nécessaire. On peut utiliser not pour inverser un Adel Daouzli Programmation - Python 22 / 39 résultat. ◦ Les structures de contrôle Les tests Pour effectuer un test on utilise les mots clés if elif else: age = input(" Donnez votre âge : ") if age < 15: print("tu devrais être couché !") elif age >= 15 and age < 18: print("tu es un adolescent ") elif age <= 30: print("vous êtes un jeune homme ") else: print("Vous avez de la bouteille !") permis_valide = True if (age < 18 or age > 80) and permis_valide == True: print("Vous êtes sûr que votre permis est valide ?") chaine = "abcde" if "d" in chaine : print("La lettre d est dans la chaine ") liste = ["toto", "foo", "jean -luc"] if " dadel" not in liste: print("Vous n’êtes pas inscrit sur la liste ") Adel Daouzli Programmation - Python 23 / 39 Les structures de contrôle Les boucles Il peut être utile de pouvoir répéter une suite d’instructions en fonction d’une condition ou en parcourant un certain nombre d’éléments. B Boucle for → pour un certain nombre de fois B Boucle while → tant qu’une condition est valide Adel Daouzli Programmation - Python 24 / 39 Les structures de contrôle Boucle for B On va répéter des instructions un certain nombre de fois. Cette répétition va consister à parcourir une séquence et pour chaque élément de la séquence les instructions sont exécutées. B Nous utiliserons le mot clé in mais qui indiquera cette fois-ci la séquence que l’on parcours en récupérant à chaque fois l’élément dans la variable de parcours. sequence = [’toto ’, ’jean -luc ’, ’rms ’, ’foobar ’] for element in sequence : print( element ) if ’-’ in element : print("est un nom composé !") else: print("n’est pas un nom composé ") for i in range (5): print(i) Adel Daouzli # la fonction range produit une liste de nombres démarrant à Programmation - Python 25 / 39 Les structures de contrôle Boucle while B On va répéter des instructions qu’une condition est vérifiée. B Nous pouvons utiliser les mêmes tests qu’avec if. nb_essais = 10 nombre = 8 reponse = input("A quel nombre je pense (1 -10): ") while reponse != nombre and nb_essais > 0: print(" Mauvaise reponse . Nombre d’essais restant :", nb_essais ) reponse = input("A quel nombre je pense (1 -10): ") nb_essais = nb_essais - 1 if reponse == nombre : print("Bravo!") Adel Daouzli Programmation - Python 26 / 39 Plan 1 Démarrage 2 Les variables 3 Les structures de contrôle 4 Les listes 5 Les Entrées/Sorties 6 Les fonctions 7 Les décorateurs 8 Bilan Adel Daouzli Programmation - Python 27 / 39 Les listes Parcours des listes -créer une liste : liste = [] -ajouter un élément à une liste: liste.append(”elem”) liste.append(5) Adel Daouzli Programmation - Python 28 / 39 Les listes Compréhension de liste La compréhension de liste est une technique avancée de Python permettant de générer des listes. Ceci peut être assimiler à de la programmation fonctionnelle. Adel Daouzli Programmation - Python 29 / 39 Les listes Les itérateurs Adel Daouzli Programmation - Python 30 / 39 Plan 1 Démarrage 2 Les variables 3 Les structures de contrôle 4 Les listes 5 Les Entrées/Sorties 6 Les fonctions 7 Les décorateurs 8 Bilan Adel Daouzli Programmation - Python 31 / 39 Les Entrée/Sorties Introduction C’est sympathique de pouvoir stocker des données dans des variables mais il serait plus intéressant de pouvoir les lire depuis depuis un fichier. Tant qu’à faire, autant pouvoir les enregistrer aussi dans un fichier. Adel Daouzli Programmation - Python 32 / 39 Plan 1 Démarrage 2 Les variables 3 Les structures de contrôle 4 Les listes 5 Les Entrées/Sorties 6 Les fonctions 7 Les décorateurs 8 Bilan Adel Daouzli Programmation - Python 33 / 39 Les fonctions Fonction simple Adel Daouzli Programmation - Python 34 / 39 Les fonctions Affectation du nom de fonction à une variable Adel Daouzli Programmation - Python 35 / 39 Les fonctions Listes et dictionnaires de paramètres Adel Daouzli Programmation - Python 36 / 39 Plan 1 Démarrage 2 Les variables 3 Les structures de contrôle 4 Les listes 5 Les Entrées/Sorties 6 Les fonctions 7 Les décorateurs 8 Bilan Adel Daouzli Programmation - Python 37 / 39 Plan 1 Démarrage 2 Les variables 3 Les structures de contrôle 4 Les listes 5 Les Entrées/Sorties 6 Les fonctions 7 Les décorateurs 8 Bilan Adel Daouzli Programmation - Python 38 / 39 Bilan Merci mon ’tit Python ;-) B Nous avons appris les bases de la programmation procédurale B Nous avons appris particulièrement Python B La prochaine fois ◦ ◦ Nous apprendrons l’approche Orientée Objet Nous verrons la puissance de Python Adel Daouzli Programmation - Python 39 / 39