CPES 1re année 2016-2017 PSL Informatique Premiers pas en Python Notes préparées par V. Gabrel, E. Lazard, M. Manouvrier et C. Murat 1 Plan du cours 1. Algorithmes et programmation : principaux concepts (a) Résoudre un problème (b) Programmer (c) Modèle d’ordinateur (d) Langages informatiques (e) Erreurs 2. Valeurs, types et variables 3. Instructions élémentaires : affectation, lecture et écriture 4. Instructions conditionnelles et expressions logiques 5. Instructions répétitives 6. Structures de données séquentielles : chaines de caractères et listes (piles et files) 7. Utilisation de modules externes (math, numpy, matplotlib...) 8. Définition et appels de fonction : Passage des paramètres par valeur, Portée des variables en Python, La récursivité 9. Analyse d’algorithmes et notions de complexité : Définition, ordre de grandeur (linéaire, exponentielle, logarithmique). 10. Algorithmes de recherche : recherche séquentielle, recherche dichotomique, recherche par hachage. 1 Présentation de Python Python est un langage de haut niveau généraliste dont le développement a été initié en 1989 par Guido Van Rossum, qui continue encore de nos jours à travailler sur Python avec l’aide de très nombreux contributeurs bénévoles formant une partie de la « communauté Python ». Il est particulièrement bien adapté à l’apprentissage de la programmation car ses constructions syntaxiques sont simples et lisibles, tout en restant relativement puissantes. 1. Cours également dispensé en 1ère année de licence Mathématique-Informatique-Économie (MIE) à l’Université Paris-Dauphine 1 Python étant un langage interprété, il faut disposer sur la machine d’un interpréteur, c’est-àdire du programme capable d’exécuter les instructions Python. Une fois ce dernier installé (voir section 4.1), on peut lui faire exécuter des instructions une par une (on parle alors de travail interactif avec l’interpréteur de commandes) ou plus souvent lui faire exécuter un fichier contenant un programme Python complet sous la forme d’un simple fichier texte dont l’extension est ".py". L’interpréteur peut être utilisé seul en le lançant depuis un terminal 2 et en saisissant les programmes dans un éditeur de texte séparé, soit via un environnement de développement intégré qui regroupe, au sein de la même interface, un éditeur de texte et un interpréteur de commandes. IDLE (fourni automatiquement avec l’installation de l’interpréteur Python) et Pyzo (anciennement IEP) sont deux exemples d’environnement de développement que nous allons détailler ci-après. En raison de sa constante évolution, il existe plusieurs versions du langage Python. La version 2 (et sa dernière déclinaison, la version 2.7) a longtemps été la plus diffusée et utilisée, et on trouve encore de nombreux codes qui se conforment à cette syntaxe. Dans le but d’éliminer des faiblesses du langage, Python 3 a officiellement été lancée en 2008 et est rapidement devenue le « standard » Python, maintenant en version 3.5. Il y a des différences syntaxiques et sémantiques entre les versions 2 et 3 de Python qui introduisent une incompatibilité entre les deux : un programme écrit pour un interpréteur Python 2 sera initialement rejeté par un interpréteur Python 3 et devra être repris et modifié. Il est donc important de se fixer sur une version du langage et d’utiliser les outils correspondants. Dans ce cours, nous avons choisi de nous conformer à la syntaxe de Python 3. Il est toujours possible d’installer les deux versions de l’interpréteur ce qui permet de récupérer et d’exécuter du code Python 2. 2 Pyzo sous linux Il existe de nombreux environnements de développement pour Python permettant d’exécuter facilement des commandes directement dans l’interpréteur ou d’exécuter un fichier tout en ayant ce dernier à l’écran pour pouvoir le modifier. Les machines sont équipées de l’environnement Pyzo (www.pyzo.org), voir section 4.3 (anciennement IEP). Afin de lancer l’environnement Pyzo, il est nécessaire de demander au système de le trouver. Pour ce faire, il suffit de lancer une recherche en cliquant sur l’icône d’exploration et de taper pyzo dans le champ de recherche. Le système nous propose alors tous les fichiers dont le nom correspond et l’icône du programme pyzo est la première ; un clic dessus démarre l’application. Interface L’interface par défaut de l’outil Pyzo est composée de quatre parties (voir figure 1) : l’interpréteur de commandes en ligne (en haut de l’interface), une fenêtre en bas à gauche pour entrer un programme complet, le sauvegarder et l’exécuter (un onglet par programme), un gestionnaire de fichiers (pour par exemple aller ouvrir un programme - en bas à droite) et au milieu en bas, un schéma de la structure du programme (inutile pour l’instant). 2. Le terminal (encore appelé console ou shell) est un programme qui ouvre une fenêtre qui permet de communiquer (de lancer des commandes) en mode texte avec le système de l’ordinateur. 2 F IGURE 1 – Interface Pyzo On peut se servir de Pyzo pour taper des commandes dans l’interpréteur (fenêtre du haut), commandes qui sont alors immédiatement exécutées (voir figure 2). Dans l’interpréteur, le symbole >>> correspond au signal d’invite, ou prompt principal, lequel vous indique que Python est prêt à exécuter une commande (que l’utilisateur va saisir). Les lignes non précédées de ce symbole correspondent à l’affichage d’un résultat. Après avoir saisi chaque instruction, il suffit de taper sur la touche Enter pour que la commande soit exécutée (c’est-à-dire interprétée). Pour quitter l’interpréteur de commandes, il faut taper l’instruction exit() ou quit(). F IGURE 2 – Exécution de commandes dans l’interpréteur On peut aussi taper un programme dans un fichier (fenêtre de gauche), le sauvegarder et l’exécuter en choisissant le sous-menu Exécuter le fichier du menu Exécuter (ou avec le raccourci Ctrl-E), voir figure 3. Le programme s’exécute alors dans l’interpréteur du haut. 3 F IGURE 3 – Exécution d’un programme avec IEP. Les boutons situés au-dessus de la fenêtre de l’interpréteur servent à interrompre ou redémarrer ce dernier, ce qui peut s’avérer utile lorsqu’un programme est bloqué, par exemple en raison d’une boucle infinie (voir figure 4). Effacer l’écran de l’interpréteur Interrompre l’exécution Redémarrer l’interpréteur F IGURE 4 – Gestion de l’interpréteur. 4 Gestionnaire de fichiers Le gestionnaire de fichiers permet de naviguer dans l’arborescence afin d’ouvrir facilement un fichier Python (voir figure 5). F IGURE 5 – Le gestionnaire de fichiers. Au lancement, le répertoire courant affiché est votre dossier personnel. Supposons que vous ayez créé un répertoire Python dans votre dossier Documents ; il est alors facile de se positionner dessus en cliquant sur les répertoires Documents puis Python (voir figure 6). F IGURE 6 – Navigation. On peut alors ouvrir un programme déjà présent simplement ou double-cliquant son nom ; un nouvel onglet s’ouvre avec le source du programme. Si on veut créer un nouveau programme, on peut soit démarrer un onglet vide (menu fichier puis nouveau), soit ouvrir un programme existant et le sauvegarder sous un autre nom. On prendra bien soin, dans la fenêtre de sauvegarde, de se positionner dans le répertoire Python choisi. On peut avoir plusieurs programmes ouverts dans la partie gauche de la fenêtre : chaque onglet va correspondre à un programme Python que l’on peut ouvrir à partir du gestionnaire de fichiers situé dans la partie en bas à droite (figure 7). Pour exécuter un de ces programmes, il suffit de cliquer sur l’onglet correspondant après l’avoir ouvert, puis de sélectionner le menu d’exécution (Ctrl-E). 5 F IGURE 7 – Exécution d’un programme parmi plusieurs onglets. 3 Liens utiles — Site officiel de Python : www.Python.org/ — Site où télécharger la dernière version de Python et l’interface IDLE : www.Python.org/downloads/ — Site où télécharger l’outil Pyzo : www.pyzo.org/start.html — Mémento Bases Python 3 : perso.limsi.fr/pointal/Python:memento perso.limsi.fr/pointal/Python:abrege — Site où télécharger (gratuitement) le livre "Apprendre à programmer avec Python" de Gérard Swinnen : inforef.be/swi/Python.htm — Site où télécharger (gratuitement) le livre "How to Think Like a Computer Scientist” d’Allen B. Downey : www.greenteapress.com/thinkPython/thinkPython.pdf 6 Exercice 1 La fonction print() permet d’afficher la valeur d’une ou plusieurs expressions passées en paramètre : >>> pi=3.14 >>> print(2*pi) 6.28 >>> print("2*pi=", 2*pi) 2*pi= 6.28 Deux paramètres optionnels permettent de préciser l’affichage. Le premier, sep, indique ce qui doit séparer les différentes valeurs affichées (par défaut il s’agit d’une espace). On l’utilise en ajoutant sep="X" comme paramètre, où X est la chaîne de séparation. Testez : print(pi, print(pi, print(pi, print(pi, 2*pi, 2*pi, 2*pi, 2*pi, 4*pi) 4*pi, sep=",") 4*pi, sep="--") 4*pi, sep="") Le second paramètre optionnel est end qui indique la chaîne à ajouter à la fin de l’affichage (par défaut, il s’agit d’un \n, le retour à la ligne). On l’utilise en ajoutant end="X" comme paramètre, où X est la chaîne de terminaison. Testez : print(pi, 2*pi) print(pi, 2*pi, end="*") print(pi, 2*pi, end="\n\n") print(pi, 2*pi, end="", sep="-") print(pi); print(2*pi) print(pi, end=","); print(2*pi) La fonction input() permet de suspendre le programme afin de récupérer une chaîne de caractères tapée par l’utilisateur au clavier. Si on veut récupérer un entier, il faut utiliser l’instruction int(input()). L’exécution de l’instruction input() ne fait qu’attendre, sans qu’une indication prévienne l’utilisateur qu’il doit entrer quelque chose ; c’est pourquoi la fonction input() est systématiquement associée à un affichage préalable : print("Entrez une valeur entière") x = int(input()) Ces deux instructions peuvent être combinées en une en passant la chaîne à afficher en paramètre de input : x = int(input("Entrez une valeur entière")) La seule différence est que dans ce deuxième cas, il n’y a plus de retour à la ligne à la fin de l’affichage. Écrire un programme en Python qui demande à l’utilisateur d’entrer une valeur numérique entière, une valeur réelle et une chaîne de caractères puis affiche ces trois valeurs sur trois lignes successives. Ce programme ne devra comporter qu’une seule instruction print. 7 Exercice 2 Indiquer précisément les actions engendrées par les instructions python suivantes : x=3.5 print(x) print("x") print("x=",x) Exercice 3 Écrire un programme, appelée ex2.py, permettant de lire une valeur saisie au clavier par un utilisateur et, de calculer et d’afficher l’image de ce nombre x par la fonction f (x) = 3x + 1 Exercice 4 Écrire un programme python permettant de lire 2 valeurs, de les stocker dans deux variables et d’échanger la valeur de ces deux variables. Exercice 5 Utilisée dans l’interpréteur de commandes, la fonction type(X) permet d’afficher le type de l’expression X. Par exemple : >>> type(3) <class ’int’> >>> type(3.5) <class ’float’> >>> type("Hello") <class ’str’> Attention, la virgule utilisée dans l’écriture française des nombres décimaux est, en informatique, toujours remplacée par un point comme dans l’écriture anglophone. Pour vous en convaincre, testez la commande type(3,14). C’est malheureusement une erreur assez classique qui ne provoque pas systématiquement le plantage ci-dessus. Testez les deux commandes suivantes : pi = 3,14 type(pi) 8 L’explication est la suivante. La virgule permet de séparer des valeurs d’une séquence d’éléments. Ainsi l’affectation pi=3,14 ne concerne pas la valeur réelle 3,14 mais une séquence de deux valeurs, 3 et 14. On peut d’ailleurs retrouver cette séquence en affichant la valeur de la variable pi : >>> pi=3,14 >>> pi (3, 14) L’affichage type(pi) nous indique donc bien que pi est un « tuple », qui est un type spécial de séquence, que nous verrons plus tard en cours. Exercice 6 — int(X) permet de transformer un valeur réelle (de type float) ou une chaîne (représentant un entier) en une valeur de type entier. — float(X) permet de transformer une valeur entière ou une chaîne en valeur réelle de type float. — str(X) permet de transformer une valeur numérique en chaîne de caractères. Tester les commandes suivantes et interpréter les résultats : type(3) 6.0//4 type(3.14) 2+"3" type("3") 2+int(3.5) type("3.14") 2+int("3") type(3+4) 2+int("3.5") type(3*4.0) 2+float("3") 6/4 2+float("3.5") 8/4 str(2)+"3" 6//4 str(2.5)+"3.5" 8//4 Exercice 7 Étant donnés la taille (en cm) et l’âge d’un individu, on donne la formule suivante du poids idéal : 0, 9(taille − 100 + age/10). Écrire et tester un programme en Python qui saisit au clavier la taille et l’âge, et affiche le poids idéal. Exercice 8 Écrire un algorithme permettant de lire une valeur entière, d’incrémenter cette valeur de 1 puis de l’afficher. 9 Exercice 9 Créer un fichier ex5.py contenant le programme suivant : a=float(input()) b=int(input()) if (a>b): b=b+1 if (b<4): if (a<0): a=a-b else: b+=int(a) print("moins de 4") else: print("plus de 4") b-=4 print("a=",a) print("b=",b) Exécuter votre programme pour différentes valeurs saisies par l’utilisateur et analyser les différentes exécutions : a) 2.3 puis -2 b) 4 puis 3 c) -1 puis 1 Exercice 10 Écrire un programme en Python qui saisit trois nombres réels a, b et c et affiche la résolution de l’équation ax2 + bx + c = 0 (on distinguera trois cas : ∆ < 0, ∆ = 0 et ∆ > 0). Afin de pouvoir calculer la racine carrée, on ajoutera la ligne from math import sqrt en tête de fichier et on utilisera ensuite la fonction sqrt() (square root). Tester votre programme en vous assurant que vous obtenez bien les solutions suivantes (si tel n’est pas le cas, corriger votre programme !) : 1 2 3 4 a 1 4 -1 0 b 1 4 2 1 c -2 1 -3 -2 Solutions x1 = −2, x2 = 1 x = −0.5 −2+i∗2.83 x1 = , x2 = −2−i∗2.83 −2 −2 x=2 Exercice 11 Écrire un programme en Python qui saisit un entier n et affiche "Ajourné" si n < 10, "Passable" si 10 ≤ n < 12, "AB" si 12 ≤ n < 14, "B" si 14 ≤ n < 16 et "TB" si n ≥ 16. 10 Exercice 12 Écrire un programme en Python qui saisit 3 nombres et affiche "oui" si l’un des 3 est égal à la somme des 2 autres et "non" sinon. Exercice 13 Écrire en Python, un programme qui saisit 6 nombres a, b, c, d, e et f et affiche la résolution du système d’équations : ax + by = c dx + ey = f Quelles sont les différentes issues de cette résolution ? Tester votre programme en vous assurant que vous obtenez bien les solutions suivantes (si tel n’est pas le cas, corriger votre programme !) : Tests a 1 1 2 1 3 1 4 1 5 2 6 1 7 -3 b 2 2 2 0 1 0 1 c 1 1 1 -1 1 -1 2 d e 2 1 0 1 1 0 2 1 4 2 1 0 12 -4 f Solutions 2 x = 1, y = 0 2 x = −3, y = 2 2 x = 2, y = −0.5 2 x = −1, y = 4 6 pas de solution 1 pas de solution -8 infinité de solutions 11 4 4.1 Annexe : Avoir son propre environnement Python Installer Python Pour installer Python sur votre machine personnelle, vous devez télécharger la dernière version du langage à l’adresse www.Python.org/downloads/ en récupérant la version adaptée à votre système (voir figure 8). F IGURE 8 – Page de téléchargement Windows. Sous windows par exemple, les instructions à suivre sont : — télécharger le fichier correspondant à la configuration de votre machine (voir figure 9 par exemple) ; — cliquer sur le fichier pour l’installer (voir figure 10). Sur MacOS, la procédure est similaire : télécharger le fichier d’installation et l’exécuter (figure 11). Il faut ensuite se procurer la dernière version de l’interface graphique liée à Python en allant sur www.Python.org/download/mac/tcltk/ (figure 12). 12 F IGURE 9 – Téléchargement de Python sous Windows. F IGURE 10 – Installer Python sous Windows. F IGURE 11 – Installation de Python sous MacOS. F IGURE 12 – Tcl/Tk sous MacOS. Enfin, on procède de même sous Linux avec une installation manuelle une fois le fichier téléchargé. 13 4.2 Travailler avec le terminal Une fois Python installé, on peut lancer directement l’interpréteur à partir du terminal MacOS ou Linux avec les commandes Python (pour lancer l’interpréteur en version 2) et Python3 (pour la version 3), voir figure 13. F IGURE 13 – Terminal avec les commandes Python 2 et 3 sous MacOS et Linux. On peut aussi directement utiliser le terminal pour exécuter un fichier Python contenant un programme complet en faisant suivre le nom de la commande (Python ou Python3) par le nom du fichier. F IGURE 14 – Exécution du fichier de gauche dans un terminal. L’installation de Python génère également l’installation d’une interface, appelée IDLE (Python GUI). Cette interface permet de saisir des instructions directement dans l’interpréteur de commandes mais également d’exécuter des programmes Python enregistrés dans des fichiers. Nous préférons utiliser l’interface Pyzo. 4.3 L’outil Pyzo Pour installer Pyzo sur votre machine personnelle, vous devez préalablement avoir installé Python (voir section 4.1). Puis vous devez télécharger la version de Pyzo correspondant à votre machine à l’adresse : www.pyzo.org/start.html. Au premier lancement de Pyzo, il est nécessaire de lui indiquer la version de l’interpréteur Python à utiliser. Pour ce faire, il faut aller dans le menu Shell et choisir l’option Edit shell configurations... (voir figure 15). 14 F IGURE 15 – Édition d’un shell avec Pyzo. Dans le dialogue qui s’affiche, on indique dans le champ exe la version de Python choisie. Dans la figure 16, on s’aperçoit qu’il n’y a qu’un seul interpréteur Python, celui que l’on a installé à la section 4.1, c’est-à-dire la dernière version 3.5.1. (Sous MacOS, il peut y avoir plusieurs versions disponibles si Python est déjà installé par le système. L’important est de choisir une version 3 de Python.) F IGURE 16 – Configuration du shell Python avec Pyzo. On peut également en profiter pour changer la langue par défaut du logiciel en allant dans le menu Settings et en choisissant French dans le sous-menu Select language. Il faut ensuite quitter puis relancer le programme pour que ces modifications soient prises en compte. 15