# Introduction à la programmation avec Python

E2L
24/11/2018
Dimitri Merejkowsky

--- # Plan * Présentation et historique du langage * L'interpréteur interactif * Un jeu simple --- # 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. --- # 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 !pycon $ python3 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 !pycon >>> 1 1 >>> 2 2 >>> 1 + 2 3 >>> 2 * 3 6 --- # Flottants C'est le `.` qui fait le flottant !pycon >>> 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 !pycon >>> 14 // 3 4 >>> 14 % 3 2 *Le `%` n'a rien à voir avec un pourcentage!* --- # Priorité des opérations !pycon >>> 1 + 2 * 3 7 >>> (1 + 2) * 3 9 *Les parenthèses permettent de grouper les expressions* --- # Variables !pycon >>> 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) !pycon >>> 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 minuscule - Séparez les "mots" par des tirets bas (underscore) !pycon >>> score = 42 >>> medium_age = 22 --- # Les chaînes de caractères Aussi appelées "string". Avec des simple quotes (`'`) !pycon >>> 'Bonjour monde!' 'Bonjour monde' Marche aussi avec des double quotes (`"`) !pycon >>> "Bonjour, monde!" 'Bonjour monde' --- # Double et simple quotes On peut mettre des simples quotes dans des double quotes et vice-versa. !pycon >>> "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" !pycon >>> 'Il a dit: "bonjour". C\'est sympa!' 'Il a dit: "bonjour". C\'est sympa!' --- # Concaténation !pycon >>> name = "John" >>> message = "Bonjour " + name + " !" >>> message "Bonjour John !" --- # Types !pycon >>> a = 42 >>> message = "La réponse est: " + a TypeError: can only concatenate str (not "int") to str On ne mélange pas les torchons et les serviettes! --- # Conversions !python # 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 !pycon >>> la_terre_est_plate = False ... >>> python_c_est_genial = True --- # Comparaisons !pycon >>> a = 2 >>> b = 3 >>> a > b False >>> 2 + 2 == 4 True Note: `==` pour la comparaison, `=` pour l'assignation --- # Comparaisons (2) !pycon >>> a = 2 >>> b = 3 >>> a != b True >>> 2 + 2 >= 4 True --- # Non persistance !pycon >>> a = 2 >>> quit() !pycon >>> a Traceback (most recent call last): File "", line 1, in NameError: name 'a' is not defined *Notre premier message d'erreur !* --- # 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 --- # Lancer du code en ligne de commande !console $ cd Documents/e2l/python/ $ python3 bonjour.py Bonjour, monde * Les lignes commençant par dièse (`#`) ont été ignorées * `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 !bash > 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. --- # Le code !python # À recopier dans devine-nombre.py secret = 42 print("Devine le nombre auquel je pense") while True: response = input() response = int(response) if response == secret: print("Gagné") break else: if response > secret: print("Trop grand") if response < secret: print("Trop petit") --- # Éviter de hard-coder le secret Le secret a une valeur prédéfinie, et il faut changer le code source pour changer le secret, pas terrible. Solution: le choisir au hasard --- # Un secret au hasard Remplacez le première ligne pour avoir: !python # À recopier dans devine-nombre.py import random secret = random.randint(0, 100) Le jeu devient tout de suite plus amusant :) (Oui, c'est un peu magique pour le moment, mais on expliquera en détail comment ça marche plus tard). --- # Et voilà! $ python 02-devine-nombre.py Devine le nombre auquel je pense 50 Trop grand 25 Trop petit 27 Trop grand 26 Gagné