Kit de survie en Python. 2OOP Object Oriented Programming Cette illustration est de Grady Booch. © SUPINFO International University - http://www.supinfo.com SUPINFO vous permet de partager ce document Vous êtes libre de : Partager — reproduire, distribuer et communiquer ce document Remixer — modifier ce document A condition de respecter les règles suivantes : Indication obligatoire de la paternité — Vous devez obligatoirement préciser l’origine « SUPINFO » du document au début de celui-ci de la même manière qu’indiqué par SUPINFO International University – Notamment en laissant obligatoirement la première et la dernière page du document, mais pas d'une manière qui suggérerait que SUPINFO International University vous soutiennent ou approuvent votre utilisation du document, surtout si vous le modifiez. Dans ce dernier cas, il vous faudra obligatoirement supprimer le texte « SUPINFO Official Document » en tête de page et préciser notamment la page indiquant votre identité et les modifications principales apportées. En dehors de ces dispositions, aucune autre modification de la première et de la dernière page du document n’est autorisée. NOTE IMPORTANTE : Ce document est mis à disposition selon le contrat CC-BY-NC-SA Creative Commons disponible en ligne http://creativecommons.org/licenses ou par courrier postal à Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA modifié en ce sens que la première et la dernière page du document ne peuvent être supprimées en cas de reproduction, distribution, communication ou modification. Vous pouvez donc reproduire, remixer, arranger et adapter ce document à des fins non commerciales tant que vous respectez les règles de paternité et que les nouveaux documents sont protégés selon des termes identiques. Les autorisations au-delà du champ de cette licence peuvent être obtenues à support@supinfo.com. © SUPINFO International University – EDUCINVEST - Rue Ducale, 29 - 1000 Brussels Belgium . www.supinfo.com
Kit de survie en Python. Objectifs de ce module Introduire les bases procédurales du langage Python. Constater la simplicité syntaxique de ce langage.
Plan de ce module Premiers pas. Kit de survie en Python. Plan de ce module Premiers pas. Structures conditionnelles et itératives. Sous-programmes. Séquences.
Kit de survie en Python. 1. Premiers pas.
Plan de ce chapitre Un environnement de développement. 1. Premiers pas. Plan de ce chapitre Un environnement de développement. Les variables en Python. Opérations sur les variables.
a. Un environnement de dév. 8/28/2018 1. Premiers pas. [Title of the course] a. Un environnement de dév. Environnement de développement IDLE proposé par la Python Software Foundation : https://www.python.org/ Multiplateforme et de licence libre. Ce cours a été écrit avec la version 3.3.5 Les utilisateurs d’Apple ont la version 2.7 livrée par défaut avec Mac OS X. Ce n’est pas celle que l’on utilisera, ils devront donc eux aussi suivre cette procédure. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Un environnement de dév. 1. Premiers pas. a. Un environnement de dév. Le premier mode d’utilisation de Python est un mode interactif, style “calculatrice”. Il permet d’exécuter du code “à la volée”. L’intérêt étant de pouvoir tester facilement des petites portions de code, de vérifier la justesse d’une syntaxe, etc. Ou même de réaliser des calculs.
a. Un environnement de dév. 1. Premiers pas. a. Un environnement de dév. Sous Windows : au choix à partir du menu “démarrer”, répertoire ‘Python 3.3” lancer “Python (command line)”. À partir du réperoire “c:/Python33” lancer “Python.exe”.
a. Un environnement de dév. 1. Premiers pas. a. Un environnement de dév. Sous Mac : Dans “Applications/Utilitaires” ouvrir le “Terminal”. Taper “python”.
a. Un environnement de dév. 8/28/2018 1. Premiers pas. [Title of the course] a. Un environnement de dév. Console d’IDLE sous Windows : au choix à partir du menu “démarrer”, répertoire ‘Python 3.3” lancer “IDLE (Python GUI)”. À partir du réperoire “c:/Python33/lib/idlelib” lancer “idle.pyw”. Console d’IDLE sous Mac : Dans “Applications/Python 3.3” lancer IDLE. Cette console bénéficie de la coloration syntaxique. On la préfèrera à la précédente. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Un environnement de dév. 8/28/2018 1. Premiers pas. [Title of the course] a. Un environnement de dév. La console d’IDLE : Cette console bénéficie de la coloration syntaxique. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Un environnement de dév. 8/28/2018 1. Premiers pas. [Title of the course] a. Un environnement de dév. Le mode console ne permet pas de sauvegarder des programmes. Pour écrire un script, un simple éditeur de texte peut suffire mais on préfèrera utiliser un environnement de développement afin de bénéficier de fonctionnalités supplémentaires : coloration syntaxique, auto-complétion, etc. On utilise le mot « script » pour désigner un programme dans un langage interpété. Si on utilise un éditeur de texte on n’oubliera pas de rajouter manuellement l’extension « .py » à nos fichiers. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Un environnement de dév. 1. Premiers pas. a. Un environnement de dév. Avec IDLE : Écriture : menu “File”, “New File” (ou “New window” selon les versions). Ouverture : menu “File”, “Open”. Lancement : menu “Run”, “Run Module” ou alors touche “F5”.
a. Un environnement de dév. 8/28/2018 1. Premiers pas. [Title of the course] a. Un environnement de dév. Avec IDLE (suite) : Jolie mise en abîme, n’est-ce-pas ? Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 1. Premiers pas. b. Les variables en Python. Rappel de la définition d’une variable : Nom désignant une donnée (nombre, texte…) susceptible de changer de valeur. Une variable possède un type, ce qui permet à l’ordinateur de savoir quelles valeurs elle peut prendre et quelles opérations on peut effectuer avec.
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Types “élémentaires” en Python : int : nombres entiers. float : nombres décimaux. complex : nombres complexes. bool : booléens (deux valeurs possibles “True” et “False”). str : chaînes de caractères. Deux d’entre eux ne sont pas si élémentaires que ça, « complex » et « str » puisqu’ils contiennent en fait nécessairement plusieurs valeurs... Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Typage dynamique : Avant d’utiliser une variable on n’a pas besoin de déclarer explicitement son type, c’est l’interpréteur qui s’en charge. Cela sera fait dès que l’on attribuera une valeur à notre variable. Cela va vous changer du C. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Typage fort : Les opérations possibles sur une variable dépendent intégralement de son type. Les conversions de types implicites afin de réaliser certaines opérations sont donc interdites. On ne pourra donc pas additioner une chaînes de caractères avec un nombre pour espérer produire un nombre. Ni concaténer une chaîne avec un nombre pour obtenir une chaîne. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Syntaxe : affectation simple Syntaxe : affectation multiple maVariable = valeur On essaiera de respecter la convention classique qui stipule que le nom des variables doit être en « lowerCamelCase ». var1, var2, ... = val1, val2, ... Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Remarques : Comme mentionné précédemment, lorsque l’on veut utiliser une variable il n’y a donc pas besoin de déclarer son type. C’est lors de son initialisation que ce typage s’effectue. On peut toujours vérifier le type d’une variable avec l’instruction “type” : Ce que l’on appelle « initialisation » en programmation, c’est le fait d’assigner pour la première fois une valeur à une variable. type(maVariable) Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Exemple : >>> i = 4 >>> type(i) <class 'int'> >>> x, z = -5.3, 1+1j >>> z (1+1j) >>> type(z) <class 'complex'> >>> type(x) <class 'float'> Au passage on s’aperçoit que l’on peut faire plusieurs affectations en une même ligne de commande. On parle alors d’affectations multiples. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Exemple : >>> texte = 'Street fighting man' >>> type(texte) <class 'str'> >>> texte 'Street fighting man’ >>> '666’ + 111 Traceback (most recent call last): File "<console>", line 1, in <module> TypeError: Can't convert 'int' object to str implicitly On remarque que les chaînes de caractères sont délimitées avec des ‘ ‘. Ou avec des " ". Le dernier exemple montre le typage fort du Python. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 1. Premiers pas. b. Les variables en Python. En mode “console” on peut afficher le contenu d’une variable en tapant juste son nom (voir exemples précédents). Pour réaliser un affichage sur la console à partir d’un script, et/ou pour réaliser des affichages plus sophistiqués on aura besoin de l’instruction “print”.
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Syntaxe de la fonction “print” : Les différentes expressions (en nombre variables) sont soit des chaînes, soit des résultats de calculs convertis en chaînes, soit des variables dont on souhaite afficher la valeur. print(expr_1,expr_2,...,sep=‘ ‘,end=‘\n’) Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Syntaxe de la fonction “print” : (suite) “sep” indique ce qui va séparer ces expressions, par défaut il s’agit d’un espace. “end” indique ce qui sera affiché après toutes les expressions, par défaut il s’agit d’un retour à ligne. « par défaut » signifie que si l’on ne mentionne rien, ce sont ces valeurs qui seront utilisées. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 1. Premiers pas. b. Les variables en Python. Exemple : >>> age = 30 >>> print("J'ai",age,"ans et dans deux ans j'aurais",age+2,"ans") J'ai 30 ans et dans deux ans j'aurais 32 ans
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Exemple : (suite) print("des","traits","bas","pour","séparer" ,sep='_') print("et","des","plus","à","la","suite", sep='_',end='+++ ') print("et la fin") Notre premier script. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 8/28/2018 1. Premiers pas. [Title of the course] b. Les variables en Python. Syntaxe de la fonction “input” : “expression” est facultative, elle sert juste à réaliser un affichage sur la ligne de la saisie. Ce que va saisir l’utilisateur sera affecté sous forme de chaîne de caractère à la variable “var”. var = input(expression) Insistons sur le fait que ce que saisit l’utilisateur est nécessairement convertit en chaîne de caractère. Si l’on veut conserver le côté numérique d’une saisie, il faudra utiliser la fonction « eval ». Voir les exemples du slide suivant. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les variables en Python. 1. Premiers pas. b. Les variables en Python. Exemple : >>> a = input() >? 12 >>> print(a,type(a)) 12 <class 'str'> >>> b = eval(input("saisir un nombre : ")) saisir un nombre : >? 12 >>> print(b,type(b)) 12 <class 'int'>
c. Opérations sur les variables. 1. Premiers pas. c. Opérations sur les variables. Liste des principales opérations arithmétiques : Opération Résultat x + y Addition de x et y x - y Soustraction de y à x x * y Multiplication de x et y x ** y Élévation de x à la puissance y x / y Quotient réel de x par y x // y Quotient entier de x par y x % y Reste du quotient entier de x par y
c. Opérations sur les variables. 8/28/2018 1. Premiers pas. [Title of the course] c. Opérations sur les variables. Quelques raccourcis : Opération Résultat x += y x = x + y x -= y x = x - y x *= y x = x * y x **= y x = x ** y x /= y x = x / y x //= y x = x // y x %= y x = x % y Pas très puissant conceptuellement mais assez utile en pratique. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Avez – vous des questions ? 1. Premiers pas. Fin de ce chapitre Avez – vous des questions ?
2. Structures conditionnelles et itératives. Kit de survie en Python. 2. Structures conditionnelles et itératives.
Plan de ce chapitre Structures conditionnelles. Structures itératives. 2. Structures conditionnelles et itératives. Plan de ce chapitre Structures conditionnelles. Structures itératives.
a. Structures conditionnelles. 2. Structures conditionnelles et itératives. a. Structures conditionnelles. Opérateurs de comparaison : Opérateurs logiques : < <= > >= == != or and not
a. Structures conditionnelles. 2. Structures conditionnelles et itératives. a. Structures conditionnelles. Syntaxe d’un test simple : if conditionnelle: bloc d’instructions à exécuter si la conditionnelle est vraie
a. Structures conditionnelles. 8/28/2018 2. Structures conditionnelles et itératives. [Title of the course] a. Structures conditionnelles. Remarque plus qu’importante : En python les blocs d’instructions sont délimités de deux façons : La ligne les précédant se termine par un double point : L’intégralité du bloc est indenté par rapport aux instructions qui le précèdent et le suivent. Dans la plupart des langages la délimitation des blocs se fait de façon beaucoup moins simple. Rappelez vous du C. Par son indentation obligatoire, le python force naturellement à l’écriture de codes lisibles. Vous réaliserez cette indentation à l’aide de la touche de tabulation ou de 4 « espaces ». Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Structures conditionnelles. 2. Structures conditionnelles et itératives. a. Structures conditionnelles. Exemple de test simple : remplacer un nombre par sa valeur absolue x = eval(input()) if x < 0: x = -x print(x)
a. Structures conditionnelles. 8/28/2018 2. Structures conditionnelles et itératives. [Title of the course] a. Structures conditionnelles. Syntaxe d’un test avec une alternative : if conditionnelle: bloc d’instructions à exécuter si la conditionnelle est vraie else: bloc d’instructions à exécuter si la conditionnelle est fausse Là encore et comme dans toute la suite les blocs sont délimités par des « : » et une indentation. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Structures conditionnelles. 2. Structures conditionnelles et itératives. a. Structures conditionnelles. Exemple de test avec une alternative : savoir si un nombre est pair ou non n = eval(input()) if n%2 == 0: print("le nombre saisi est pair") else: print("le nombre saisi est impair")
a. Structures conditionnelles. 8/28/2018 2. Structures conditionnelles et itératives. [Title of the course] a. Structures conditionnelles. Syntaxe d’un test avec plusieurs alternatives : if conditionnelle: bloc d’instructions à exécuter si la conditionnelle est vraie elif autre_conditionnelle: bloc d’instructions à exécuter si la seconde conditionnelle est vraie else: bloc d’instructions à exécuter si les premières conditionnelles sont fausses Là encore et comme dans toute la suite les blocs sont délimités par des « : » et une indentation. Même remarque que précédemment, on peut avoir plus de deux alternatives. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Structures conditionnelles. 2. Structures conditionnelles et itératives. a. Structures conditionnelles. Exemple de test avec plusieurs alternatives : signe strict d’un nombre x = eval(input()) if x < 0: print("le nombre saisi est strictement négatif") elif x > 0: print("le nombre saisi est strictement positif") else: print("le nombre saisi est nul")
b. Structures itératives. 8/28/2018 2. Structures conditionnelles et itératives. [Title of the course] b. Structures itératives. La structure « for » réalise un nombre d’itérations fixe et connu. Elle utilise une variable dont la valeur va parcourir une certaine plage au fil des itérations. C’est cette variable qui contrôlera le nombre d’itérations. Cette plage de valeurs va être construite grâce à la fonction « range ». Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Structures itératives. 8/28/2018 2. Structures conditionnelles et itératives. [Title of the course] b. Structures itératives. Syntaxe de la fonction “range” : Cette fonction produit une plage de valeurs allant de ‘début’ (inclus) à ‘fin’ (non inclus) avec un certain ‘pas’. À noter que par défaut ‘début’ et ‘pas’ valent respectivement 0 et 1. range(début,fin,pas) On laisse pas mal de poussières sous le tapis... Si l’on ne passe que deux paramètres à cette fonction, ils sont nécessairement affectés à « début » et « fin ». Le pas est alors obligatoirement de 1. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Structures itératives. 2. Structures conditionnelles et itératives. b. Structures itératives. Exemples d’utilisation de la fonction “range” : range(6) produira la plage de valeurs 0, 1, 2, 3, 4, 5. range(3,6) produira la plage de valeurs 3, 4, 5. range(3,10,2) produira la plage de valeurs 3, 5, 7, 9. range(6,0,-1) produira la plage de valeurs 6, 5, 4, 3, 2, 1.
b. Structures itératives. 8/28/2018 2. Structures conditionnelles et itératives. [Title of the course] b. Structures itératives. Syntaxe de la structure “for” : for var in range(début,fin,pas): bloc d’instructions à répéter pendant que var prend les valeurs de la plage définie par range On retrouve la délimitation du bloc par un « : » et par de l’indentation. Maintenant cela doit être de l’ordre du réflexe. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Structures itératives. 2. Structures conditionnelles et itératives. b. Structures itératives. Exemple : table de multiplication d’un entier saisi par l’utilisateur n = eval(input()) for i in range(1,11): print(i,'*',n,'=',n*i)
b. Structures itératives. 2. Structures conditionnelles et itératives. b. Structures itératives. Autre exemple : affichage des nombres pairs entre 20 et 0 for i in range(20,-1,-2): print(i)
b. Structures itératives. 2. Structures conditionnelles et itératives. b. Structures itératives. La structure « while » réalise un nombre d’itérations non nécessairement connu à l’écriture du programme. Ce nombre dépend d’une conditionnelle qui sera évaluée avant chaque itération. On la qualifie parfois d’itération conditionnelle.
b. Structures itératives. 2. Structures conditionnelles et itératives. b. Structures itératives. Syntaxe de la structure “while” : while conditionnelle: bloc d’instructions à exécuter tant que la conditionnelle est vraie
b. Structures itératives. 2. Structures conditionnelles et itératives. b. Structures itératives. Exemple : calcul de la partie entière d’un réel positif x = eval(input()) n = 0 while n+1 <= x: n += 1 print("la partie entière de",x,"est",n)
Avez – vous des questions ? 2. Structures conditionnelles et itératives. Fin de ce chapitre Avez – vous des questions ?
Kit de survie en Python. 3. Sous-Programmes.
Plan de ce chapitre Procédures. Fonctions. Duck Typing. 3. Sous-programmes. Plan de ce chapitre Procédures. Fonctions. Duck Typing. Paramètres par défaut. Paramètres immuables. Variables locales et globales. Modules de fonctions.
a. Procédures. Syntaxe générale d’une procédure : 8/28/2018 3. Sous-programmes. [Title of the course] a. Procédures. Syntaxe générale d’une procédure : def maProcedure(para1,para2,...,paraN): bloc d’instructions de la procédure On essaiera de respecter la convention classique qui stipule que le nom des procédures doit être en « lowerCamelCase ». À noter qu’une procédure peut très bien ne pas posséder de paramètres comme nous le verrons sur des exemples. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
8/28/2018 3. Sous-programmes. [Title of the course] a. Procédures. Exemple 1 : affichage du périmètre et de l’aire d’un rectangle Exemple 2 : affichage du nombre d’or def rectangle(x,y): print("périmètre :",2*(x+y),",aire :",x*y) def afficheNombreDor(): print((1+sqrt(5))/2) Ici un exemple de procédure qui possède deux paramètres. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Procédures. Utilisation d’une procédure : 8/28/2018 3. Sous-programmes. [Title of the course] a. Procédures. Utilisation d’une procédure : Comme une instruction prédéfinie du langage. On appelle la procédure par son nom, en lui passant autant de paramètres qu’elle en possède. Ces paramètres peuvent être des variables ou des valeurs explicites. On nuancera le deuxième point très bientôt. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Procédures. Exemples d’utilisations de procédures : rectangle(5,2) 3. Sous-programmes. a. Procédures. Exemples d’utilisations de procédures : rectangle(5,2) longueur,largeur = 6,3 rectangle(longueur,largeur) afficheNombreDor()
b. Fonctions. Syntaxe générale d’une fonction : 8/28/2018 3. Sous-programmes. [Title of the course] b. Fonctions. Syntaxe générale d’une fonction : def maFonction(para1,para2,...,paraN): bloc d’instructions de la fonction return valeur On essaiera de respecter la convention classique qui stipule que le nom des fonctions doit être en « lowerCamelCase ». Une fonction peut retourner plusieurs valeurs, on les séparera dans ce cas par des virgules. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Fonctions. Exemple : calcul du cube d’un nombre def cube(x): 3. Sous-programmes. b. Fonctions. Exemple : calcul du cube d’un nombre def cube(x): return x*x*x
8/28/2018 3. Sous-programmes. [Title of the course] b. Fonctions. Autre exemple : calcul du minimum et du maximum de deux nombres def calculMiniMaxi(x,y): if x < y: return x,y else: return y,x Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Fonctions. Remarques importantes : 8/28/2018 3. Sous-programmes. [Title of the course] b. Fonctions. Remarques importantes : Une fonction peut retourner plusieurs valeurs, il suffit de séparer celles-ci par des virgules. Une fonction peut contenir plusieurs fois la commande “return”, mais elle cesse son fonctionnement dès qu’elle en rencontre une. L’exemple précédent présente clairement ces deux points. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Fonctions. Utilisation d’une fonction : 3. Sous-programmes. b. Fonctions. Utilisation d’une fonction : On appelle la fonction par son nom, en lui passant autant de paramètres qu’elle en possède. Pour ne pas “perdre” la(les) valeur(s) retournée(s), on les incorporera par exemple dans une opération d’affichage, d’affectation, etc.
b. Fonctions. Exemples d’utilisations de fonctions : print(cube(5)) 8/28/2018 3. Sous-programmes. [Title of the course] b. Fonctions. Exemples d’utilisations de fonctions : print(cube(5)) a,b = 5,-2 min,max = calculMiniMaxi(a,cube(b)) print("Minimum :",min,", Maximum :",max) Une ligne de commande uniquement constituée par exemple de « cube(5) » se contenterait de calculer cette valeur mais la « perdrait » aussi vite... Il faut donc s’en servir avec par exemple un affichage, une affectation ou encore comme paramètre d’une autre fonction. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
c. Duck Typing. Principe du “Duck Typing” : 8/28/2018 3. Sous-programmes. [Title of the course] c. Duck Typing. Principe du “Duck Typing” : En Python on ne précise pas les types attendus des paramètres des sous-programmes. Cela implique que l’on peut utiliser un sous-programme avec des paramètres de n’importe quel type, à la condition que les opérations du sous-programme soient compatibles avec les types des paramètres. « If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck. » On retrouvera ce principe un peu plus tard dans le cours. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
c. Duck Typing. Exemple de “Duck Typing” : def addition(x,y): 3. Sous-programmes. c. Duck Typing. Exemple de “Duck Typing” : def addition(x,y): return x + y print(addition(666,1)) print(addition("Brown ",'Sugar'))
d. Paramètres par défaut. 3. Sous-programmes. d. Paramètres par défaut. Les paramètres d’un sous-programme peuvent comporter des valeurs par défaut. Deux cas possibles : Lors de l’appel on ne précise pas de valeurs pour les paramètres en question et le sous-programme utilise celles par défaut. Si on précise des valeurs ce sont celles-ci qui sont utilisées.
d. Paramètres par défaut. 8/28/2018 3. Sous-programmes. [Title of the course] d. Paramètres par défaut. Exemple : def rectangle(x=3,y=1): print("périmètre :",2*(x+y),"aire :",x*y) rectangle() rectangle(2) rectangle(7,5) Dans cet exemple tous les paramètres ont des valeurs par défaut, ce qui rend licite l’appel du sous-programme sans paramètres. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
e. Paramètres immuables. 8/28/2018 3. Sous-programmes. [Title of the course] e. Paramètres immuables. Les paramètres de type “int”, “bool”, “float”, “complex” et “str” sont immuables. Cela signifie que si l’on passe une variable de l’un de ces types comme paramètre à une fonction, celle-ci ne pourra pas en modifier sa valeur. L’auteur a choisi cette présentation que les puristes trouveront simpliste. Il assume la nécessité de cacher certaines choses aux débutants. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
e. Paramètres immuables. 8/28/2018 3. Sous-programmes. [Title of the course] e. Paramètres immuables. Exemple : tentative pour doubler un nombre def doubler(x): x *= 2 a = 3 print("valeur de a avant :",a) doubler(a) print("valeur de a après :",a) Il faudra donc se débrouiller autrement... Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
e. Paramètres immuables. 3. Sous-programmes. e. Paramètres immuables. Exemple (suite) : contournement du problème précédent en utilisant une fonction def doubler(x): return 2*x a = 3 print("valeur de a avant :",a) a = doubler(a) print("valeur de a après :",a)
f. Variables locales et globales. 3. Sous-programmes. f. Variables locales et globales. Variables locales : Ce sont donc des variables définies à l’intérieur d’un sous programme et qui ne sont accessibles qu’au sein de celui-ci. Elles servent essentiellement au bon fonctionnement du sous-programme.
f. Variables locales et globales. 8/28/2018 3. Sous-programmes. [Title of the course] f. Variables locales et globales. Exemple : fonction calculant la somme des n premiers entiers, avec deux variables locales “utilitaires” def sommeEntiers(n): somme = 0 for i in range(n+1): somme += i return somme Les variables locales « somme » et « i » ne servent bien qu’au bon déroulement du sous-programmme. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
f. Variables locales et globales. 8/28/2018 3. Sous-programmes. [Title of the course] f. Variables locales et globales. Exemple (suite) : tentative d’utilisation de la variable locale somme en dehors de la fonction def sommeEntiers(n): somme = 0 for i in range(n+1): somme += i return somme print(somme) La variable « somme » est locale à la fonction, son utilisation en dehors de celle-ci est donc interdite. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
f. Variables locales et globales. 8/28/2018 3. Sous-programmes. [Title of the course] f. Variables locales et globales. Variables globales : Ce sont des variables définies en dehors de tout sous-programme. Elles sont “globales” au sens où elles sont visibles et utilisables dans tous les sous-programmes du module courant. Par module on entend tout simplement fichier « .py ». Voir un peu plus loin. L’usage des variables globales est à limiter au maximum, si un sous-programme à besoin de valeurs pour fonctionner il est plus optimal (au sens de la structuration du code) de lui transmettre ces valeurs en utilisant des paramètres. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
8/28/2018 3. Sous-programmes. [Title of the course] g. Modules de fonctions. Module de fonctions : fichier d’extension “.py” contenant des sous-programmes regroupés de façon cohérente. Structure d’un projet : plusieurs modules de fonctions et un module particulier, dit “main”, où l’on définit les variables du projet et où l’on utilise les fonctions des différents modules. Là encore l’auteur choisit délibérément de simplifier la présentation. Un module peut également contenir la définition de constantes. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
g. Modules de fonctions. Trois méthodes pour l’import d’un module : 8/28/2018 3. Sous-programmes. [Title of the course] g. Modules de fonctions. Trois méthodes pour l’import d’un module : from NomDuModule import * from NomDuModule import uneFonction import NomDuModule Les deux premières méthodes importent respectivement tout le module ou une fonction en particulier. On pourra alors utiliser une (la) fonction simplement en l’appelant par son nom. La troisième méthode importe également tout le module, mais pour utiliser une fonction il faudra utiliser une syntaxe du style « NomDuModule.nomDeLaFonction(...) ». Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Avez – vous des questions ? 3. Sous-programmes. Fin de ce chapitre Avez – vous des questions ?
Kit de survie en Python. 4. Séquences.
Plan de ce chapitre Généralités sur les séquences. Les listes. Les t-uples.
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Définition : Suite d’éléments accessibles par leur position. Chaque élément, à part le premier, a un prédécesseur et, à part le dernier, a un successeur. On utilise également les termes de « rang » ou d’ « indice ». Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Une séquence de n éléments : Indexation des éléments à partir du début 1 2 n - 2 n - 1 Comme dans tous les langages de programmations ces indices commencent à 0. La particularité du Python est que l’on peut accéder aux éléments avec des indices négatifs, en partant de la fin de la séquence. -n -(n – 1) -(n – 2) -2 -1 Indexation des éléments à partir de la fin Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. Accès a un élément : L’accès à un élément d’une séquence se fait en utilisant la position de cet élément et des crochets [ ]. maSéquence[maPositionVoulue]
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Les trois principaux types de séquences : Les listes dont les éléments sont quelconques et modifiables. Les t-uples dont les éléments sont quelconques et non modifiables. Les chaînes de caractères dont les éléments sont des caractères et ne sont pas modifiables. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. Syntaxes de la déclaration d’une liste : maListeVide = [] maListeAvecUnSeulElement = [élément] maListe = [élément1,élément2,...,élémentN]
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Exemple de création/manipulation de listes : >>> maListe = [2, -3, ['xox', 69], 11] >>> print(maListe) [2, -3, ['xox', 69], 11] >>> print(maListe[-1]) 11 >>> maListe[1] = 666 >>> print(maListe[1]) 666 >>> print(maListe[2][0][1]) o Au passage on constate que l’imbrication de séquences est tout à fait possible. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. Un petit dessin de la liste précédente pour fixer les idées : 1 2 3 2 -3 [‘xox’, 69] 11 -4 -3 -2 -1 1 ‘xox’ 69 1 2 -2 -1 x o x -3 -2 -1
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Syntaxes de la déclaration de t-uples : monTupleVide = () monTupleAvecUnSeulElement = (élément,) monTuple = (élément1,élément2,...,élémentN) Ne pas oublier la virgule dans la déclaration d’une liste avec un seul élément car sinon l’interpréteur considère qu’il s’agit d’une variable « classique ». Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Exemple de création/manipulation de t-uples : >>> monTuple = (2.718, 3.14, 1.414) >>> print(monTuple) (2.718, 3.14, 1.414) >>> print(monTuple[2]) 1.414 >>> monTuple[2] = 1.732 Traceback (most recent call last): File "<console>", line 1, in <module> TypeError: 'tuple' object does not support item assignment L’erreur provient du fait que l’on essaie de modifier la valeur d’un t-uple. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Accès aux éléments (“slicing”) : Opération Résultat s[i] i-ème élément de s s[i:j] Sous-séquence de s constituée des éléments entre le i-ème (inclus) et le j-ème (exclus) s[i:j:k] pris avec un pas de k Les deux dernières opérations peuvent renvoyer une séquence vide. La première utilisée avec un indice « incorrect » retourne une erreur. Pour éviter ce genre de problème on va bientôt présenter une fonction calculant le nombre d’éléments d’une séquence. On pourra donc toujours vérifier la validité de nos indices. Si l’on omet le premier argument dans l’une des deux opérations de « slicing », il vaut par défaut 0, et si l’on omet le second il vaut par défaut le nombre d’éléments de la séquence. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Exemple : >>> t = (7, -3, 2, 11, 666, -1975) >>> t[3:] (11, 666, -1975) >>> t[1:4] (-3, 2, 11) >>> t[1::2] (-3, 11, -1975) >>> t[23] Traceback (most recent call last): File "<console>", line 1, in <module> IndexError: tuple index out of range Erreur retournée car l’on fait référence au 24 ème élément d’une liste qui n’en comporte que 6. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Opérations de traitement : Opération Résultat x in s Teste si x appartient à s x not in s Teste si x n’appartient pas à s s + t Concaténation de s et t s * n ou n * s Concaténation de n copies de s len(s) Nombre d’éléments de s min(s) Plus petit élément de s max(s) Plus grand élément de s s.count(x) Nombre d’occurences de x dans s s.index(x) Indice de x dans s. Pour pouvoir utiliser les opérations « min » et « max » il faut bien sûr que les éléments des séquences soient comparables deux à deux. Si l’élément « x » n’est pas dans la séquence « s », « s.index(x) » retourne une erreur. S’il y est plusieurs fois « s.index(x) » retournera la position de la première occurence de x. On reviendra bientôt sur la signification de la syntaxe des opérations « count » et « index ». Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Exemples : >>> t = (7, -3, 2) >>> 11 not in t True >>> max(t) 7 >>> tt = 2*t >>> print(tt) (7, -3, 2, 7, -3, 2) >>> tt.count(-3) 2 On ne va pas donner des exemples de toutes les opérations précédentes, à vous de les tester par vous-mêmes. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Itération sur les éléments : for x in maSéquence: traitement de l’élemént x On va parcourir ainsi successivement tous les éléments de la séquence. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. Exemple : l = [-2, 3, 11] for x in l: print(x**2)
a. Généralités sur les séquences. 8/28/2018 4. Séquences. [Title of the course] a. Généralités sur les séquences. Itération sur les indices : for i in range(len(maSéquence)): traitement de l’élément maSéquence[i] et/ou de l’indice i Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
a. Généralités sur les séquences. Exemple : l = (-2, 3, 11) for i in range(len(l)): print("élément n°",i+1,":",l[i]**2)
b. Les listes. Deux conséquences de la muabilité des listes : 8/28/2018 4. Séquences. [Title of the course] b. Les listes. Deux conséquences de la muabilité des listes : On peut modifier les éléments d’une liste, en supprimer, en ajouter d’autres. Une liste transmise en paramètre à une fonction peut être modifiée par cette dernière. Le premier point a déjà en partie été abordé. Et le sera encore dans les slides à venir. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les listes. Exemple de modification d’une liste par une fonction : 4. Séquences. b. Les listes. Exemple de modification d’une liste par une fonction : def swap(l,i,j): l[i], l[j] = l[j], l[i] maListe = [1, 2, 3, 4] print("avant échange :",maListe) swap(maListe,0,3) print("après échange :",maListe)
b. Les listes. Opérations de “slicing” pour modifier une liste : 8/28/2018 4. Séquences. [Title of the course] b. Les listes. Opérations de “slicing” pour modifier une liste : Opération Résultat s[i] = x Remplacement de l’élément s[i] par x s[i:j] = t Remplacement des éléments de s[i:j] par ceux de la séquence t del(s[i:j]) Suppression des éléments de s[i:j] s[i:j:k] = t Remplacement des éléments de s[i:j:k] par ceux de la séquence t del(s[i:j:k]) Suppression des éléments de s[i:j:k] La plupart de ces opérations sont propres au Python, on ne les retrouvera pas nativement dans d’autres langages. Pour que l’opération « s[i:j:k] = t » fonctionne, il est nécessaire que le nombre d’éléments de « s[i:j:k] » soit le même que celui de « t ». Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les listes. Exemple de modification d’une liste par “slicing” : 4. Séquences. b. Les listes. Exemple de modification d’une liste par “slicing” : >>> maListe = [1, 2, 3, 4, 5] >>> maListe[2:4] = (6,'x',7) >>> print(maListe) [1, 2, 6, 'x', 7, 5] >>> maListe[1:6:2] = 'sup' [1, 's', 6, 'u', 7, 'p']
b. Les listes. Opérations de traitement : Opération Résultat Iist(s) 8/28/2018 4. Séquences. [Title of the course] b. Les listes. Opérations de traitement : Opération Résultat Iist(s) Transforme une séquence s en une liste s.append(x) Ajoute l’élément x à la fin de s s.extend(t) Étend s avec la séquence t s.insert(i,x) Insère l’élément x à la position i s.clear() Supprime tous les éléments de s s.remove(x) Retire l’élement x de s s.pop(i) Renvoie l’élément d’indice i et le supprime s.reverse() Inverse l’ordre des éléments de s s.sort() Trie les éléments de s par ordre croissant La plupart de ces opérations sont propres au Python, on ne les retrouvera pas nativement dans d’autres langages. L’opération « s.remove(x) » renvoie une erreur si x n’appartient pas à s. Par défaut « s.pop() » retourne le dernier élément de la liste. On peut ajouter d’autres arguments à la fonction « sort », voir la documentation officielle pour plus de détails. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les listes. Exemples : >>> maListe = [1, 3, 5] 8/28/2018 4. Séquences. [Title of the course] b. Les listes. Exemples : >>> maListe = [1, 3, 5] >>> maListe.append(7) >>> print(maListe) [1, 3, 5, 7] >>> maListe.extend((8, 11)) [1, 3, 5, 7, 8, 11] >>> maListe.remove(8) >>> maListe.insert(4,9) [1, 3, 5, 7, 9, 11] Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les listes. Exemples : >>> maListe = list(range(1,10,2)) 8/28/2018 4. Séquences. [Title of the course] b. Les listes. Exemples : >>> maListe = list(range(1,10,2)) >>> maListe [1, 3, 5, 7, 9] >>> taListe = list('The Strypes') >>> taListe ['T', 'h', 'e', ' ', 'S', 't', 'r', 'y', 'p', 'e', 's'] Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
8/28/2018 4. Séquences. [Title of the course] b. Les listes. Principe : Le but est de construire une liste à partir d’une séquence déjà existante. Plus précisément, on va effectuer une opération sur chacun des éléments d’une séquence pour obtenir une liste constituée des différents résultats. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
b. Les listes. Syntaxe générale : 8/28/2018 4. Séquences. [Title of the course] b. Les listes. Syntaxe générale : [expression for x in sequence if conditionnelle] Cette façon trés élégante de définir une liste est calquée sur la définition « en compréhension » d’un ensemble mathématique, voir cours 1SET. Il peut y avoir plus d’un « for ». La partie « if conditionnelle » est facultative. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
8/28/2018 4. Séquences. [Title of the course] b. Les listes. Exemple 1 : élever au carré les éléments d’une séquence pour construire une liste t = (11, 22, 33, 44) l = [x**2 for x in t] print(l) Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
8/28/2018 4. Séquences. [Title of the course] b. Les listes. Exemple 1 (suite) : la même chose sans utiliser une définition par compréhension. t = (11, 22, 33, 44) l=[] for x in t: l.append(x**2) print(l) Beaucoup moins élégant c’est évident. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
8/28/2018 4. Séquences. [Title of the course] b. Les listes. Exemple 2 : avec deux boucles “for” et une conditionnelle. l = [(i,j) for i in range(1,4) for j in range(1,4) if i != j] print(l) Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
8/28/2018 4. Séquences. [Title of the course] b. Les listes. Comme constaté sur un exemple les éléments d’une liste peuvent eux-mêmes être une liste. On peut ainsi créer des listes multidimensionnelles. L’accès aux élément se fait alors avec une syntaxe de la forme : Une liste bidimensionnelle n’est ni plus ni moins qu’une matrice. maListe[i1][i2]...[iN] Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
8/28/2018 4. Séquences. [Title of the course] b. Les listes. Remarque importante et exemple : attention à l’initialisation des listes multimensionnelles. plateau = [[0]*3]*4 print(plateau) plateau[3][2] = 666 En effet on crée ici 4 alias de la même liste [0,0,0]. La modification de l’un de ces alias entraine donc la modification des autres. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
8/28/2018 4. Séquences. [Title of the course] b. Les listes. Remarque importante et exemple (suite) : attention à l’initialisation des listes multimensionnelles. plateau = [[0]*3 for i in range(4)] print(plateau) plateau[3][2] = 666 Ici par contre on crée 4 listes différentes valant chacune [0,0,0]. La modification de l’une n’entrainera pas la modification des autres. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
8/28/2018 4. Séquences. [Title of the course] b. Les listes. Remarque : le parcours de listes multidimensionnelles se fera en imbriquant des boucles for. plateau = [[0]*3 for i in range(4)] plateau[3][2] = 666 for ligne in plateau: for x in ligne: print(x,' ',end='') print('\n') Au pasage retenez comment on affiche « proprement » une matrice. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
c. Les t-uples. Deux conséquences de l’immuabilité des t-uples : 8/28/2018 4. Séquences. [Title of the course] c. Les t-uples. Deux conséquences de l’immuabilité des t-uples : On ne peut pas modifier les éléments d’un t-uple, en supprimer, en ajouter d’autres. Un t-uple transmis en paramètre à une fonction ne peut être modifiée par cette dernière. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
4. Séquences. c. Les t-uples. Exemple de non modification d’un t-uple par une fonction : def swap(l,i,j): l[i], l[j] = l[j], l[i] monTuple = (1, 2, 3, 4) print("avant échange :",monTuple) swap(monTuple,0,3) print("après échange :",monTuple)
8/28/2018 4. Séquences. [Title of the course] c. Les t-uples. Opération de création d’un t-uple : Permet de transformet une séquence en un t-uple monTuple = tuple(maSéquence) Pas d’autres opérations puisque les t-uples sont immuables. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
c. Les t-uples. Exemples : >>> monTuple = tuple(range(0,9,2)) 4. Séquences. c. Les t-uples. Exemples : >>> monTuple = tuple(range(0,9,2)) >>> monTuple (0, 2, 4, 6, 8) >>> monTuple = tuple("The Decemberist") ('T', 'h', 'e', ' ', 'D', 'e', 'c', 'e', 'm', 'b', 'e', 'r', 'i', 's', 't')
8/28/2018 4. Séquences. [Title of the course] c. Les t-uples. Si on veut définir une séquence de données que l’on ne veut pas modifier, utiliser un t-uple sécurise ce fait. Itérer sur les éléments d’un t-uple est plus rapide que sur ceux d’une liste. Une fonction qui retourne plusieurs valeurs, retourne en fait un t-uple. Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Avez – vous des questions ? 4. Séquences. Fin de ce chapitre Avez – vous des questions ?
Kit de survie en Python. Classes et objets.