From 6e084f49f88a13922aaf1d6c34ead5dde5c7455a Mon Sep 17 00:00:00 2001 From: Dimitri Merejkowsky Date: Sat, 17 Nov 2018 16:28:06 +0100 Subject: [PATCH] Write contents for session1 --- sessions/01.md | 619 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 507 insertions(+), 112 deletions(-) diff --git a/sessions/01.md b/sessions/01.md index 39930f9..f72ca7e 100644 --- a/sessions/01.md +++ b/sessions/01.md @@ -1,165 +1,560 @@ -### Introduction +# Introduction à la programmation avec Python -* Historique du langage: - * création par Guido pour l'enseignement - * Monty Python - * le grand schisme 2/3. - * Meilleur nul part, excellent partout -* Utilisation de Python +

+E2L
+24/11/2018
+Dimitri Merejkowsky
+

- * Sciences (physique, chimie ...) - * Animation - * Sites web - * ... - * Ligne de commande - * Langage de 'glue' +--- -### Le REPL +# Plan -* S'assurer que tous les étudiants peuvent lancer le REPL +* Présentation et historique du langage +* L'interpréteur interactif +* Un jeu simple -Notions: +--- -* Entiers et flottants (via maths basiques: + * - /) -* Grouper avec des parenthèses. -* Booléens -* Variables -* Fonctions: +# Historique - * `quit()` +* 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 -### Du code dans un fichier +--- -Oups, les variables disparaissent quand on ferme le REPL. -Solution: les mettre dans un fichier `.py`. +# Le grand schisme -```python -a = 1 -b = 2 +La plupart des langages continuent à être compatibles d'une version à l'autre. -c = a+b +*Ce n'est pas le cas pour Python3*, et ça a causé beaucoup de confusion et de débats. -print(c) -``` +Heureusement, 10 ans plus tard, la situation s'est arrangée. -S'assurer que les étudiants peuvent: +--- -* `cd` dans le bon répertoire -* Lancer `python >> -### Flot de contrôle +--- -* if -* while -* `break`, `continue` -* `for` -* `range()` -* On peut aussi itérer sur les strings +# Note -### Entrèe standard -* input() +Recopiez les entrées sur les slides dans votre propre interpréteur. +S'il fait quelque chose que vous ne comprenez pas, prévenez moi! -Démo: "à quel nombre je pense" +--- +# Entiers et maths simples -```python -secret = 42 + !pycon + >>> 1 + 1 + >>> 2 + 2 + >>> 1 + 2 + 3 + >>> 2 * 3 + 6 -print("Devine le nombre auquel je pense"): -while True: - reponse = input() - if response > secret: - print("Trop grand") - if response < secret: - print("Trop petit") - print("Gagné") - break -``` +--- -Notions: +# Flottants -* Exceptions: si la conversion échoue +C'est le `.` qui fait le flottant -```python -import random + !pycon + >>> 0.5 + 0.5 + >>> 0.5 + 0.2 + 0.7 + >>> 10 / 3 + 3.3333333333333335 -secret = random.randint(0, 100) -``` +*Note: les flottants sont imprécis* +---- -Notions: +# Division entières et modulo -* imports -* accès à un membre avec `.` + !pycon + >>> 14 // 3 + 4 + >>> 14 % 3 + 2 +*Le `%` n'a rien à voir avec un pourcentage!* -Des liens: +--- -* La doc officielle (récemment traduite en français): - https://docs.python.org/fr/3/tutorial/index.html +# Priorité des opérations -* sametmax: http://sametmax.com/cours-et-tutos/. Note: ça y parle aussi de - cul, donc pas à mettre entre toutes les mains ;-) + !pycon + >>> 1 + 2 * 3 + 7 + >>> (1 + 2) * 3 + 9 -* Fin! +*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) + +--- + + +# 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, vous devez suivre ce cycle: + +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 + +--- + +# Devine nombre + +--- + +# Le code + + + !python + secret = 42 + + print("Devine le nombre auquel je pense") + while True: + response = input() + response = int(response) + if response > secret: + print("Trop grand") + continue + if response < secret: + print("Trop petit") + continue + print("Gagné") + break + + +--- + +À vous de jouer! + +--- + +# É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 glop. + + +Solution: le choisir au hasard + +--- + +# Un secret au hasard + +Remplacez le première ligne pour avoir: + + !python + import random + + secret = random.randint(0, 100) + +Le jeu devient tout de suite plus amusant :)