% Programmation avec Python (chapitre 1) % Dimitri Merejkowsky # Plan * La ligne de commande * Présentation et historique du langage * L'interpréteur interactif * Un jeu simple \center \huge La ligne de commande # Pourquoi la ligne de commande? * Très puissant * Ancien, mais toujours d'actualité * Indispensable dans de nombreux cas * Écrire des programmes qui marche dans la ligne de commande est (relativement) simple * Possibilités infines, même si on ne fait que manipuler du texte # Les bases On tape un commande, on appuie sur entrée, l'ordinateur interprète ce qui a été tapé et affiche un message: * `cd` * `ls` (ou `dir` sous Windows) * `pwd` \center \huge Python # Petit détour: version d'un programme * Comme les versions d'un document * Si le nombre est plus grand, c'est plus récent * Souvent en plusieurs morceaux: `1.3, 1.4, 3.2.5`. etc * Plus l'écart est grand, plus le programme a changé. * `3.2.5 -> 3.2.6`: pas grand-chose * `1.5.1 -> 4.3`: beaucoup de changements * On omet souvent le reste des numéros quand c'est pas nécessaire # Historique * Créé par Guido van Rossum. Conçu à la base pour l'enseignement. * Le nom vient des Monty Python (si, si) * Python 1: Sortie en 1991 * Python 2: en 2000 * Python 3: en 2008 # Le grand schisme La plupart des langages continuent à être compatibles d'une version à l'autre. *Ce n'est pas le cas pour Python3*, et ça a causé beaucoup de confusion et de débats. Heureusement, 10 ans plus tard, la situation s'est arrangée, et Python2 cessera d'être maintenu le premier janvier 2020. # Python3 Ce cours fonctionne donc uniquement avec Python3. N'utilisez *pas* Python2, sinon certaines choses expliquées ici ne marcheront pas :/ # Utilisation de Python * Aussi appelé "langage de script", `glue language` * Bon partout, excellent nulle part * Exemples d'utilisation: * Sciences (physique, chimie, linguistique ...) * Animation (Pixar, Disney ...) * Sites web (journaux, youtube, ...) * Ligne de commande * ... # Installation # L'interpréteur interactif ``` Python 3.7.1 (default, Oct 22 2018, 10:41:28) [GCC 8.2.1 20180831] on linux Type "help", "credits" or "license" for more information. ``` # Note À partir de maintenant, recopiez les entrées sur les slides dans votre propre interpréteur. Vous devez taper la même chose après l'invite de commande ('>>>') et vous devez voir les mêmes réponses. Si ce n'est pas le cas, prévenez moi! # Entiers et maths simples ``` >>> 1 1 >>> 2 2 >>> 1 + 2 3 >>> 2 * 3 6 ``` # Flottants C'est le `.` qui fait le flottant ``` >>> 0.5 0.5 >>> 0.5 + 0.2 0.7 >>> 10 / 3 3.3333333333333335 ``` *Note: les flottants sont imprécis* # Division entières et modulo ``` >>> 14 // 3 4 >>> 14 % 3 2 ``` *Le `%` n'a rien à voir avec un pourcentage!* # Priorité des opérations ``` >>> 1 + 2 * 3 7 >>> (1 + 2) * 3 9 ``` *Les parenthèses permettent de grouper les expressions* # Variables ``` >>> a = 2 >>> a 2 >>> b = 3 >>> a + b 5 ``` * On peut nommer des valeurs * On peut afficher la valeur d'une variable entrant son nom dans le REPL # Variables (2) ``` >>> a = 2 >>> a 2 >>> a = 3 >>> a 3 ``` * On peut changer la valeur d'une variable (d'où son nom) # Nom des variables Préférez des noms longs et descriptifs Toujours en minuscules Séparez les "mots" par des tirets bas (underscore) ``` >>> score = 42 >>> age_moyen = 22 ``` # Les chaînes de caractères Aussi appelées "string". Avec des simple quotes (`'`) ``` >>> 'Bonjour monde!' 'Bonjour monde' ``` Marche aussi avec des double quotes (`"`) ``` >>> "Bonjour, monde!" 'Bonjour monde' ``` # Double et simple quotes On peut mettre des simples quotes dans des double quotes et vice-versa. ``` >>> "Il a dit: 'bonjour' ce matin." "Il a dit: 'bonjour' ce matin." >>> 'Il a dit: "bonjour" ce matin' 'Il a dit: "bonjour" ce matin!' ``` # Échappement Avec la barre oblique inversée "backslash" ``` >>> 'Il a dit: "bonjour". C\'est sympa!' 'Il a dit: "bonjour". C\'est sympa!' ``` # Concaténation ``` >>> name = "John" >>> message = "Bonjour " + name + " !" >>> message "Bonjour John !" ``` # Types ``` >>> a = 42 >>> message = "La réponse est: " + a TypeError: can only concatenate str (not "int") to str ``` *Notre premier message d'erreur !* On ne mélange pas les torchons et les serviettes! # Conversions # Entier vers string ``` >>> a = 42 >>> message = "La réponse est: " + str(a) >>> message 'La réponse est 42' ``` # String vers entier ``` >>> answer = int("42") >>> answer 42 ``` Notez les parenthèses autour des valeurs. # Booléens True et False En Python, elle sont en majuscules! # Assignation On peut assigner des variables aux valeurs True et False ``` >>> la_terre_est_plate = False ... >>> python_c_est_genial = True ``` # Comparaisons ``` >>> a = 2 >>> b = 3 >>> a > b False ``` ``` >>> 2 + 2 == 4 True ``` Note: `==` pour la comparaison, `=` pour l'assignation # Comparaisons (2) ``` >>> a = 2 >>> b = 3 >>> a != b True >>> 2 + 2 >= 4 True ``` # Comparaisons (3) ``` >>> a = 2 >>> a < 2 False >>> 1 < a < 3 True ``` # Non persistance ``` >>> a = 2 >>> quit() ``` ``` >>> a Traceback (most recent call last): File "", line 1, in NameError: name 'a' is not defined ``` # Du code dans un fichier Aussi appelé: "code source", ou "source". L'essence du logiciel libre :) # Installation d'un éditeur de texte simple * Linux; `gedit`, `kate`, ... * macOS: `CotEditor` * Windows: `Notepad++` J'insiste sur **simple**. Inutile d'installer un IDE pour le moment. # Configuration * Police de caractères à chasse fixe * Indentation de *4 espaces* * Remplacer tabulation par des espaces * Activer la coloration syntaxique # Notre premier fichier source Insérez le code suivant dans votre éditeur de texte ```python # Affiche un message print("Bonjour, monde") ``` Sauvegardez dans un fichier `bonjour.py` dans `Documents/e2l/python` par exemple # Démonstration avec `kate` C'est l'éditeur que nous utiliserons pour nos ateliers. * Pour l'environement KDE, mais ça marche bien sous Gnome aussi * Coloration syntaxique * Auto-complétion # Lancer du code en ligne de commande ``` $ cd Documents/e2l/python/ $ python3 bonjour.py Bonjour, monde ``` * Les lignes commençant par dièse (`#`) ont été ignorées - ce sont des *commentaires*. * `print()` affiche la valeur, comme dans le REPL. # Note importante (1) Vous avez juste besoin: * d'un éditeur de texte * de Python3 installé * d'une ligne de commande Pas la peine d'installer quoique ce soit de plus pour le moment # Note importante (2) À partir de maintenant, s'il y a marqué `# à recopier` en haut d'un exemple 1. *Recopiez* le code affiché dans votre éditeur, à la suite du code déjà écrit 2. Lancez le code depuis la ligne de commande 3. Réparez les erreurs éventuelles 4. Recommencez # Note importante (3) C'est le meilleur moyen d'apprendre. Si vous restez passifs vous retiendrez beaucoup moins de choses et ne pourrez pas coder par vous-même. Profitez qu'on soit là pour vous aider si vous avez des erreurs que vous ne comprenez pas! # Flot de contrôle L'essence de la programmation! # while Répéter tant qu'une condition est vraie ```python print("Bonjour, monde") while True: print("spam!") ``` Notes: * deux points à la fin de la ligne * indentation après les deux points # Notre première boucle infinie ``` $ python bonjour.py Bonjour, monde spam! spam! spam! .... ``` CTRL-C pour interrompre # Conditions ```python a = 3 b = 4 if a == b: print("a et b sont égaux") else: print("a et be sont différents") ``` Rappel: * deux points à la fin de la ligne * indentation après les deux points # Combiner while et if Interrompt la boucle quand une condition devient vraie: ```python i = 0 while True: i = i + 1 if i > 3: print("i est plus grand que 3, on arrête") break print("i =" + str(i)) print("i est plus petit que 3, on continue") ``` ``` i = 1 i est plus petit que 3, on continue i = 2 i est plus petit que 3, on continue i = 3 i est plus petit que 3, on continue i est plus grand que 3, on arrête ``` # Lire une entrée utilisateur * `input()` (encore des parenthèses ...) * interrompt le script * lit ce que l'utilisateur tape jusqu'à ce qu'il tape "entrée". * renvoie une string # Le jeu On fait deviner un nombre à l'utilisateur, en affichant 'trop grand', 'trop petit' jusqu'à ce qu'il trouve la valeur exacte.