#!/usr/bin/env python # coding: utf-8 # # langages de script – Python # # ## Cours 1 – premiers pas # # ### M1 Ingénierie Multilingue – INaLCO # # clement.plancq@ens.fr # # Avant de commencer # # * Nous travaillerons avec Python3 (3.6 de préférence) # * Pour le travail avec la console vous utiliserez ``python3`` ou ``ipython`` # Tapez ``python3`` ou ``ipython`` dans un terminal pour accéder à la console # * Choisissez l'éditeur de texte que vous préférez (emacs, vi, atom, visual studio, sublime text, …) # * Vos scripts devront être encodés en utf-8, indiquez-le dans vos scripts avec le commentaire suivant en première ligne : # `# -*- coding: utf-8 -*-` ou `# coding=utf-8` # # Avant de commencer (2) # # Pour exécuter vos scripts, deux options : # # `> python3 mon_script.py` # # ou (mais pourquoi faire compliqué ?) # # `> chmod u+x` # `> ./mon_script.py` en ajoutant ce shebang en première ligne : # `#!/usr/bin/env python3` # # # Opérateurs mathématiques # # `+` addition # In[3]: 2 + 5  # `-` soustraction # In[2]: 3 - 2 # `*` multiplication # In[4]: 2 * 3 # `/` division # In[5]: 36 / 6 # `%` modulo (reste de la division) # In[6]: 36 % 8 # `**` puissance # In[7]: 10 ** 2 * 4 # * L'ordre des opérations est l'ordre classique en mathématiques (puissance passe avant les opérations). # * vous pouvez utiliser des parenthèses pour définir des priorités. # In[8]: 36 / (2*3) # # Les chaînes de caractères # # * `+` est aussi l'opérateur de concaténation de chaînes de caractères # In[13]: "Hello" + "world" # In[14]: "Hello" + " " + "world" # * Les chaînes de caractères sont entourées soit de quotes simples `'`, soit de guillemets `"` # * Si votre mot contient une apostrophe, entourez-le de guillemets `"` # In[15]: 'Ça donne une erreur t'as vu' # In[12]: "Ça donne une erreur t'as vu" # # Les variables # # * L'affectation des variables se fait à l'aide du symbole `=` # * Si la variable est placée à droite du symbole `=`, sa *valeur* est affectée à la variable placée à gauche. # In[17]: var = 3 + 2 print(var) another_var = var print(another_var) # In[18]: yet_another_var_2 = var + 1 yet_another_var_2 # * Les noms de variable sont composés de car. alphabétiques (min ou maj), des chiffres et de l'underscore. C'est tout. # # * Les noms de variable sont choisis par le programmeur, ils doivent être le plus clair possible. # En réalité il est conseillé de suivre la [PEP 8](https://www.python.org/dev/peps/pep-0008/). # # # In[21]: je-ne-suis-pas-une-variable = 2 # In[22]: 3_moi_non_plus = 2 + 3 # * Seuls les mots réservés sont interdits. # In[20]: import keyword print(keyword.kwlist) # # Help ! # ## PEP, quesaco ? # # PEP : Python Enhancement Proposals # # Python est sous licence libre. Le langage a été créé par Guido Van Rossum mais depuis 2001 le développement de Python est géré par la [Python Software Foundation](http://www.python.org/psf/) (dont Guido était le *"benevolent dictator for life"* jusqu'en juillet 2018). # # Les évolutions du langage sont détaillées dans ces PEP (proposées, examinées, corrigées, acceptées puis implémentées). # Les PEP les plus célèbres sont # * [PEP 20](https://www.python.org/dev/peps/pep-0020/) "Zen of Python"1 (tapez `import this` dans une console) # * [PEP 8](https://www.python.org/dev/peps/pep-0008/) "Style Guide for Python Code" # # 1 "There should be one-- and preferably only one --obvious way to do it." Tacle par derrière sur Perl, c'est pas joli-joli. # # Les types # # * Python est un langage à typage *dynamique* fort : le type d'une variable est déterminé par l'interpréteur. # * Python est un langage à typage dynamique *fort* : pas de conversion implicite, certaines actions sont interdites. # In[23]: "Hello" + 1 # * La fonction `type()` retourne le type de la variable donnée en argument. # In[31]: type("Hello") # * `str()`, `int()`, `float()` convertit l'argument dans le type désiré. # * `bool()` retourne `True` si l'argument est vrai, `False` sinon. # In[26]: int(3.14159265359) # In[27]: "Hello" + str(1) # # Help ! # # Nous venons d'utiliser 4 fonctions. # # Avant d'utiliser une fonction il est indispensable de savoir : ce que fait la fonction, quels sont les paramètres attendus, quelle est la valeur de retour. # # Pour accéder à la documentation d'une fonction : # * dans la console : `help(int)` (d'une fonction ou d'une classe ou d'un module) # `q` pour sortir de la doc # * sur le web : [https://docs.python.org/3/library/functions.html](https://docs.python.org/3/library/functions.html) # * ou bien : [DevDocs](http://devdocs.io/) # # Les structures conditionnelles # # ```python # if condition: # #begin of block # instruction1 # instruction2 # #end of block # # ``` # # ### Opérateurs de comparaison # `<` inférieur / `<=` inférieur ou égal # `>` supérieur / `>=` supérieur ou égal # `==` égal / `!=` non égal # `is` identité (pour les objets surtout) / `is not` non identité # In[33]: x = 4 if x > 3: print("x a grandi") # In[34]: if x > 3: print("x a grandi") else: print("x n'a pas grandi") # ### Opérateurs booléens # ``not`` négation # ``and`` conjonction (True si les deux opérandes sont vraies, False sinon) # ``or`` disjonction (True si une des deux opérandes est vraie) # In[35]: if x > 3 and x <= 5: print("x a grandi, un peu") elif x > 5: print("x a grandi") else: print("x n'a pas grandi") # # Les listes # #### Vite fait, on y reviendra # # * Une liste une structure de données ordonnée # * Une liste peut contenir plusieurs valeurs, variables, listes, objets, ... le tout de types différents # * On accède à un élément de la liste par son indice (de 0 à n-1, n étant le nombre d'éléments) # In[45]: voyelles = [] voyelles = ['a', 'e', 'i', 'o', 'u'] voyelles[0] # # Les dictionnaires # #### Vite fait, on y reviendra # # * Un dictionnaire est une structure de données associative de type 'clé' => 'valeur' # * Les données ne sont pas ordonnées comme dans les listes # * On accède à une valeur par sa clé # * Les clés sont uniques, on ne peut pas associer deux valeurs à une même clé # * `keys()` renvoie la liste des clés, `values()` la liste des valeurs # In[41]: couleurs = {'a':'noir', 'e':'blanc', 'i':'rouge', 'u':'vert', 'o':'bleu'} couleurs['i'] = "pourpre" couleurs # In[50]: couleurs.keys() # # Les boucles # #### Vite fait, on y reviendra # # * Les boucles `while` nécessitent que la valeur utilisée dans la condition d'arrêt soit modifiée dans le corps de la boucle. # * Les boucles `for` s'appliquent aux objets de type "iterables" (liste, chaîne de car., dict.items()) # In[51]: i = 1 while i < 5: print(i) i = i + 1 # In[52]: for item in voyelles: print(item) # In[53]: for item in couleurs.keys(): print(item) # In[56]: for key, value in couleurs.items(): print(key, value) # # Les fonctions # ### Vite fait, on y reviendra # # ```python # def ma_fonction(arg1, arg2): # """ description de la fonction """ # instruction1 # instruction2 # return(resultat) # ``` # * L'ordre des arguments est déterminant # * Il est possible d'outrepasser l'ordre en nommant les arguments lors de l'appel de fonction # # In[61]: def soustraction(arg1, arg2): res = arg1 - arg2 return res # In[62]: diff = soustraction(5, 3) diff # In[63]: diff = soustraction(3, 5) diff # In[65]: diff = soustraction(arg2=5, arg1=3) diff # # Exos # # Vous rendrez des scripts Python3. Avec des commentaires c'est mieux. # # 1. Finir le chifoumi # 2. Faire un jeu un peu sur le modèle du chifoumi où l'utilisateur doit deviner un chiffre entre 1 et 10 (10 inclus). 5 essais possibles. Le jeu doit donner des indications (trop grand, trop petit) à chaque essai. # 3. Résoudre [Power of Thor - Episode 1](https://www.codingame.com/training/easy/power-of-thor-episode-1) sur CodinGame