% Programmation avec Python (chapitre 2) % Dimitri Merejkowsky # \center \huge Rappels # Variables ```python score = 2 # un entier taille = 1.85 # un flottant message = "bonjour!" # une string ``` # Opérations mathématiques * `+`, `*`, `-`, `/` ```python x = 3 y = 5 x + y # 8 ``` * `//` et `%` ```python 14 // 3 # 4 14 % 3 # 2 ``` # Opérations avec les strings * Concaténation: ```python nom = "Bob" message = "Bonjour " + nom "Bonjour Bob" ``` * Conversions: ```python score = 42 message = "votre score est: " + str(score) ``` ```python print("Entrez votre age") réponse = input() age = int(réponse) ``` # Booléens et tests ```python a = 3 b = 4 a > b # False c = 3 a == b # True ``` # Tester une condtion avec if ```python a = 3 b = 4 if a == b: print("a et b sont égaux") print("on continue") ``` # Tester une condition avec if et else ```python a = 3 b = 4 if a == b: print("a et b sont égaux") else: print("a et b sont différents") print("on continue") ``` # Tester des conditions avec if, else et elif ```python if age < 10: print("inférieur à dix") elif 10 <= age < 20: print("âge entre 10 et 20") elif 20 <= age < 40: print("âge entre 20 et 40") else: print("âge supérieur à 40") ``` # Boucler sur une condition avec while ```python i = 0 while i < 3: print(i) i = i + 1 ``` ``` 0 1 2 ``` # Sortir d'une boucle avec if et break ```python i = 0 while True: i = i + 1 print(i) if i > 3: break ``` # \center \huge Compléments # Combiner assignation et opérations `a += b` est équivalent à `a = a +b` ```python >>> a = 3 >>> a = a + 1 >>> a 4 >>> a = 3 >>> a += 1 >>> a 4 ``` # Gérer les retours à la ligne `\n` sert à échapper les retours à la ligne: ```python >>> texte = "Je suis un message\nsur deux lignes" >>> print(texte) Je suis un message sur deux lignes >>> ``` # Concaténation de littéraux Pas besoin de `+` pour concaténer des "littéraux". ```python >>> text = "Je suis une " "longue" " string" >>> text 'Je suis une longue string' ``` # Répétition ```python >>> "argh " * 3 'argh argh argh' ``` # Une longue string sur plusieurs lignes ```python poème = """ Ceci est un poème Qui contient "des quotes" Et parle d'autre choses ... """ ``` # \center \huge Fonctions # Fonction sans argument Définition: ```python def dire_bonjour(): print("Bonjour") ``` * avec `def` * avec un `:` à la fin et un _bloc indenté_ (appelé le "corps") \vfill Appel: ``` >>> dire_bonjour() Bonjour ``` * avec le nom de la fonction et des parenthèses # Le pouvoir des fonctions Ici on vient de créer une nouvelle fonctionnalité à Python. Avant qu'on définisse la fonction `dire_bonjour()`, il ne savait pas dire bonjour, il savait uniquement afficher des messages à l'écran. On dit qu'on a _créé une abstraction_. Et c'est une technique extrêmement utile en programmation. # Fonction avec un argument Définition: avec l'argument à l'intérieur des parenthèses ```python def dire_bonjour(prénom): print("Bonjour " + prénom) ``` \vfill Appel: en passant une variable ou une valeur dans les parenthèses ```python >>> dire_bonjour("Germaine") Bonjour Germaine >>> prénom_de_charlotte = "Charlotte" >>> dire_bonjour(prénom_de_charlotte) Bonjour Charlotte ``` # Exécution d'une fonction C'est exatement comme si on assignait les arguments de la fonction avant d'éxécuter le code dans le corps ```python # Ceci: dire_bonjour("Dimitri") # Est équivalent à cela: prénom_de_dimitri = "Dimitri" print("Bonjour " + prénom_de_dimitri) # Lui-même équivalent à: print("Bonjour " + "Dimitri") ``` # Portée des variables - 1 Les arguments d'une fonction n'existent que dans le corps de celle-ci ```python def dire_bonjour(prénom): print("Bonjour " + prénom) dire_bonjour("Dimitri") # Ok print(prénom) # Erreur ``` # Portée des variables - 2 Les variables en dehors des fonctions sont disponibles partout: ```python salutation = "Bonjour " def dire_bonjour(prénom): print(salutation + prénom) dire_bonjour("Dimitri") ``` # Portée des variables - 3 Une variable peut avoir en "cacher" une autre si elle a une portée différente ```python def dire_bonjour(prénom): print("Bonjour " + prénom) # portée: uniquement dans # le corps dire_bonjour prénom = "Dimitri" # portée: dans tout le programme dire_bonjour(prénom) # Ok ``` # Fonction avec plusieurs arguments On peut mettre autant d'arguments qu'on veut, séparés par des virgules: ```python def afficher_addition(x, y): résultat = x + y print(résultat) ``` \vfill ```python >>> a = 4 >>> b = 5 >>> afficher_addition(a, b) 9 ``` # Arguments nommés En Python, on peut aussi utiliser le *nom* des arguments au lieu de leur position: ```python def dire_bonjour(prénom): print("Bonjour " + prénom) ``` ```python >>> dire_bonjour(prénom="Gertrude") Bonjour Gertrude >>> afficher_addition(y=3, x=4) 7 ``` # Arguments par défaut On peut aussi mettre des valeurs par défaut: Définition: ```python def dire_bonjour(prénom, enthousiaste=False): message = "Bonjour " + prénom if enthousiaste: message += "!" print(message) ``` \vfill Appel: ```python >>> dire_bonjour("Thomas", enthousiaste=True) Bonjour Thomas! >>> dire_bonjour("Thomas", enthousiaste=False) Bonjour Thomas >>> dire_bonjour("Thomas") Bonjour Thomas ``` # Fonctions natives Fonctions qui sont toujours présentes dans l'interpréteur. On en a déjà vu quelques unes: * `print`, `input`: écrire et lire sur la ligne de commande * `str`, `int`: convertir des entiers en strings et vice-versa Il y en a tout un tas! La liste ici: https://docs.python.org/fr/3/library/functions.html#built-in-funcs # Retour sur print On peut passer autant d'arguments qu'on veut à `print` et: * Il les sépare par des espaces * Ajoute un retour à la ligne à la fin: ```python >>> prénom = "Charlotte" print("Bonjour", pŕenom) Bonjour Charlotte ``` # Retour sur print On peut demander à `print` de changer son séparateur: ```python >>> a = "chauve" >>> b = "souris" >>> print(a, b, sep="-") chauve-souris ``` Ou de changer le caractère de fin: ```python >>> print("Ceci tient", end="") >>> print("sur une seule ligne") Ceci tient sur une seule ligne ``` # Retourner des valeurs Définition avec le mot `return` ```python def additionner(x, y): return x + y ``` \vfill Récupérer la valeur de retour ```python >>> a = 3 >>> b = 4 >>> c = additionner(a, b) # encore une assignation >>> c 7 ``` # Sortir d'une fonction avec return `return` interrompt également l'éxécution du corps de la fonction: ```python def dire_bonjour(prénom, première_fois=False): print("Bonjour", prénom) if not première_fois: return print("Heureux de faire votre connaissance") ``` \vfill ```python >>> dire_bonjour("Dimitri", première_fois=True) Bonjour Dimitri Heureux de faire votre connaissance >>> dire_bonjour("Dimitri", première_fois=False) Bonjour Dimitri ``` # \center \huge Listes # Définition Une liste est une _suite ordonée_ d'éléments. # Créer une liste Avec `[]`, et les élements séparés par des virgules: ```python liste_vide = [] trois_entiers = [1, 2, 3] ``` # Listes hétérogènes On peut mettre des types différents dans la même liste ```python ma_liste = [True, 2, "trois"] ``` \vfill On peut aussi mettre des listes dans des listes: ```python liste_de_listes = [[1, 2], ["Germaine", "Gertrude"]] ``` # Connaître la taille d'une liste Avec `len()` - encore une fonction native ```python >>> liste_vide = [] >>> len(liste_vide) 0 >>> trois_entiers = [1, 2, 3] >>> len(trois_entiers) 3 ``` # Concaténation de listes Avec `+` ```python >>> prénoms = ["Alice", "Bob"] >>> prénoms += ["Charlie", "Eve"] >>> prénoms ['Alice', 'Bob', "Charlie", 'Eve'] ``` \vfill On ne peut concaténer des listes que avec d'autres listes: ```python >>> scores = [1, 2, 3] >>> scores += 4 # TypeError >>> scores += [4] # OK ``` # Test d'appartenance Avec `in`: ```python >>> prénoms = ["Alice", "Bob"] >>> "Alice" in prénoms True ``` \vfill ```python >>> prénoms = ["Alice", "Bob"] >>> "Charlie" in prénoms False ``` # Itérer sur les élements d'une liste Avec `for ... in` ```python prénoms = ["Alice", "Bob", "Charlie"] for prénom in prénoms: # La variable 'prénom" est assignée à chaque # élément de la liste print("Bonjour", prénom) Bonjour Alice Bonjour Bob Bonjour Charlie ``` # Indéxer une liste * Avec `[]` et un entier * Les index valides vont de 0 à `n-1` où `n` est la taille de la liste. ```python >>> fruits = ["pomme", "orange", "poire"] >>> fruits[0] "pomme" >>> fruits[1] "orange" >>> list[2] "poire" >>> fruits[3] # IndexError ``` # Modifier une liste Encore une assignation: ```python >>> fruits = ["pomme", "orange", "poire"] >>> fruits[0] = "abricot" >>> fruits ["abricot", "orange", "poire"] ``` # Les strings sont aussi des listes (presque) - 1 On peut itérer sur les caractères d'une string: ```python for c in "vache": print(c) v a c h e ``` # Les strings sont aussi des listes (presque) - 2 On peut tester si un caractère est présent: ```python >>> "e" in "vache" True >>> "x" in "vache" False ``` # Les strings sont aussi des listes (presque) - 3 Mais on neut peut pas modifier une string ```python >>> prénom = "Charlotte" >>> prénom[0] "C" >>> prénom[3] "r" >>> prénom[0] = "X" # TypeError ``` # \huge \center Atelier # Jeu du pendu Squellete: ```python def choisir_mot_au_hasard(): .... def main(): mot = choisir_mot_au_hasard() ... main() ```