Programmation Python Rémy CHOLLET* Cléo BARAS Lorraine GOEURIOT Jérôme MARTIN Version 2020/2021 - Chamilo
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Programmation Python Rémy CHOLLET* Cléo BARAS Lorraine GOEURIOT Jérôme MARTIN Mails : prenom.nom@univ-grenoble-alpes.fr IUT Département Réseaux & Télécommunications, 1ère année Version 2020/2021 CBGM (IUT-RT) Prog 1 Version 20/21 1 / 96
Chapitre 1 Introduction CBGM (IUT-RT) Prog 1 Version 20/21 2 / 96
L’informatique en R&T Les modules d’informatique L’informatique en R&T Sem. Modules Intitulé S1 M1105 Unix M1103 Architecture des équipements Informatiques M1106 Initiation au développement Web M1207 Programmation 1 S2 M2104 SGBD M2105 Web Dynamique M2109 Gestion de Projets informatiques M2207 Programmation 2 S3 RCPI01 POO M3206 Scripts S4 M4206C Programmation sur Mobiles RCPD02 SGBD Avancés CBGM (IUT-RT) Prog 1 Version 20/21 3 / 96
L’informatique en R&T Planning M1207 - Programmation 1 Modalités Cours/TD : 1h + 7 × 2h TP : 2h + 6 × 2h Évaluation : DS papier 1h30 ; DS machine 1h30 Planning des séances Semaine CM/TD TP 45 Accueil 46 Introduction, variable, expression Prise en main de l’IDE 47 Bases de la programmation 48 Structures alternatives Structures alternatives 49 Structures répétitives Structures alternatives 50 Structures répétitives imbriquées Structures répétitives 51 Fonctions Structures répétitives imbriquées 1 Fonctions Fonctions 1 Révision DS Fonctions 2 DS le 13/01/21 Examen sur machine le 13 ou 15/01/21 CBGM (IUT-RT) Prog 1 Version 20/21 4 / 96
L’informatique en R&T Outils à disposition Outils à disposition Poly, slides, sujets de TD et de TP sur Chamilo : http://chamilo.univ-grenoble-alpes.fr/courses/IUT1RT1M1207/index.php IDE PyCharm Community Edition de JetBrains CBGM (IUT-RT) Prog 1 Version 20/21 5 / 96
Définition L’informatique Informatique Définition (Informatique (data processing), algorithme) L’informatique est la science du traitement automatique (software) de l’information (data), dont découle des programmes qui implémentent des algorithmes à l’aide d’un langage de programmation. Ordinateur Programme Données (software) Résultats CBGM (IUT-RT) Prog 1 Version 20/21 6 / 96
Définition L’informatique Algorithme Définition (Algorithme) Un algorithme est la mise en œuvre d’une succession finie d’actions élémentaires (instructions) pour résoudre un problème ou obtenir une fonctionnalité. Exemple (Des algorithmes) Recette de cuisine, notice de montage Résolution de ax 2 + bx + c = 0 Tri de données Cryptographie Recherche d’un plus court chemin etc. CBGM (IUT-RT) Prog 1 Version 20/21 7 / 96
Définition L’informatique Un exemple d’algorithme Exemple (Prise d’un médicament contre la toux) "En cas de toux, prendre, sauf avis contraire du médecin, un comprimé toutes les 4 heures, jusqu’à disparition des symptômes. Pour les enfants, un comprimé toutes les 8 heures suffit." SI toux ET PAS d’avis contraire du médecin ALORS | SI enfant ALORS | | delai d’attente VAUT 8 heures | SINON | | delai d’attente VAUT 4 heures | FIN DE SI | TANT QUE PAS disparition des symptômes FAIRE | | prendre un comprimé | | attendre pendant le delai d’attente | FIN DE TANT QUE FIN DE SI CBGM (IUT-RT) Prog 1 Version 20/21 8 / 96
Définition Les langages de programmation Langage de programmation Définition (Langage de programmation) Ensemble de caractères, symboles, mots-clés et règles d’assemblage (équivalents au vocabulaire et à la grammaire d’une langue), utilisé pour donner des instructions à l’ordinateur. Évolution des langages 1 Langage machine (de plus bas niveau) puis assembleur (mnémonique, macros, variables) 2 Langage structuré : C, C#, C++, ObjectiveC, Pascal, Java ... (compilé) Shell, Tcl/Tk, Perl, Python, Ruby, JavaScript, Matlab... (interprété) paradigmes de programmation : procédural, orienté objet, fonctionnel... 3 Langage naturel : SQL, Windev, 4D (BDD) wikipedia CBGM (IUT-RT) Prog 1 Version 20/21 9 / 96
Définition Les langages de programmation Language compilé vs interprété 2 approches 1 Compilation : traduction d’un code source vers un code cible exécutable code exécutable directement par l’OS Bytecode exécutable par machine virtuelle (cf. Java au S3) 2 Interprétation : code source converti en bytecode "à la volée" soit lecture et analyse d’une instruction (ou une expression) si correcte, l’exécuter (ou évaluer l’expression) passer à l’instruction suivante Pour Python 889 tout le code source est vérifié syntaxiquement un bytecode est produit automatiquement pour exécution dans l’interpréteur Python (via une machine virtuelle) le code peut aussi être interprété en mode interactif CBGM (IUT-RT) Prog 1 Version 20/21 10 / 96
Définition Le langage Python Python ? Créé par Guido van Rossum en 1990 1er objectif : un nouveau shell grande communauté, usages industrialisés en progression ces dernières années (voir tiobe-index) Open source, large communauté, bonne portabilité plutôt haut niveau, plutôt pragmatique Caractéristiques : w l’indentation comme syntaxe w tout est objet w typage fort et dynamique CBGM (IUT-RT) Prog 1 Version 20/21 11 / 96
Définition Le langage Python Pourquoi Python ? Très bonne expressivité Prototypage rapide Aspects modernes (itérateurs, compréhension, introspection...) Très bon langage pour l’administration système Bibliothèques très diverses : système, calcul, imagerie, web, machine learning, big data, etc... Cibles diverses CBGM (IUT-RT) Prog 1 Version 20/21 12 / 96
Définition Le langage Python Some Spam ? https://www.dailymotion.com/video/x2hwqlw CBGM (IUT-RT) Prog 1 Version 20/21 13 / 96
Définition Témoignage Témoignage Si un étudiant est comme moi, en difficulté, dans les matière type « programmation », il ne faut pas désespérer. Nous pouvons comparer la progression d’un langage informatique à l’apprentissage d’une langue étrangère. Les cours m’ont permis de comprendre les concepts généraux. Mais c’est le fait de pratiquer tous les jours qui m’a réellement permis de progresser. – Nathan R. 2016 CBGM (IUT-RT) Prog 1 Version 20/21 14 / 96
Définition Pour aller plus loin ... Bonnes pratiques Qualités d’un logiciel Performance Portabilité Fiabilité Lisibilité du code Robustesse Maintenabilité Concrètement, il faut : Tester unitairement le code Documenter le code, le commenter Utiliser des nommages pertinents dans le code Structurer le code par des modules, des fonctions et aussi des classes Limiter les dépendances, chercher la simplicité et la clarté CBGM (IUT-RT) Prog 1 Version 20/21 15 / 96
Chapitre 2 Variables et expressions CBGM (IUT-RT) Prog 1 Version 20/21 16 / 96
Variables Qu’est ce qu’une variable ? Variables Définition (Variable) Une variable désigne un objet informatique dans une zone mémoire. Elle : 1 est désignée par un identificateur (un nom) et liée à une référence 2 mémorise une valeur unique à un instant donné 3 présente un type, précisant la nature de la valeur qu’elle mémorise Exemple (Une variable) L’instruction var = 3 utilise une variable var, mémorisant la valeur 3, et donc de type entier Remarques Une variable possède également : une durée de vie une portée des propriétés en tant qu’objet informatique décrit par une classe CBGM (IUT-RT) Prog 1 Version 20/21 17 / 96
889 Variables Qu’est ce qu’une variable ? Choix de l’identificateur Choix de l’identificateur L’identificateur est un nom : Í utilisant des lettres (sensibles à la casse), des chiffres ou _ ë interdisant les caractères spéciaux (comme #, @, -, etc.) ë interdisant les noms commençant par un nombre ë interdisant les mots-clés du langage Python : and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try CBGM (IUT-RT) Prog 1 Version 20/21 18 / 96
Variables Type d’une variable Type d’une variable Définition (Type d’une variable) Le type est la nature (la classe) de la valeur mémorisée par la variable. Il : est défini à la création de la variable ; est dynamique, c’est-à-dire qu’il peut évoluer lors du programme ; 889 impose des limites de précision à une valeur. Comment connaître le type d’une variable x ? Avec le résultat de la fonction type(x) : type( 0 ) renvoie (indique) type( 0. ) renvoie type( ’Spam’ ) renvoie CBGM (IUT-RT) Prog 1 Version 20/21 19 / 96
Variables Type d’une variable Types principaux (simples) Nom Type (class) Exemples de Remarque Précision valeurs entier int -2 exprimé en base 10 (integer ) 10 (expression par défaut) -0b10 exprimé en binaire 0b1010 avec préfixe 0b illimitée (tant que la -0x2 exprimé en hexadécimal mémoire le permet) 0xA avec préfixe 0x (ou 0X) -0o2 exprimé en octal 0o12 avec préfixe 0o (ou 0O) flottant float 1.34 avec le séparateur . limitée, allant de -0.6 sys.float_info.min à 3.1462 sys.float_info.max chaîne de str "Spam" délimitée par ’ ou " caractères (string) ’Egg’ booléen bool False Etat faux (boolean) True Etat vrai non défini NoneType None exprime l’état non défini CBGM (IUT-RT) Prog 1 Version 20/21 20 / 96
Variables Type d’une variable Le type list Type liste list Le type list est associé à des collections ordonnées (ou séquences) d’éléments (c’est à dire d’objets). Chaque élément d’une liste peut être de type quelconque (int, str, ...). Chaque élément d’une liste est associé à un indice, numéro entier décrivant la position de l’élément dans la liste. Les indices débutent à 0. Exemple (Des listes) Liste de 4 entiers : [1, 2, 5, -7] Liste d’entiers et de flottants : [0.2, 4, -1, 3.14, 20] Dans la liste de 3 chaînes de caractères ["unix", "python", "projet"], "unix" est l’élément d’indice 0 ; "python" est l’élément d’indice 1 ; "projet" est l’élément d’indice 2. CBGM (IUT-RT) Prog 1 Version 20/21 21 / 96
Variables Affectation d’une variable Déclaration et affectation d’une variable Variables du contexte de nommage et mémoire Les variables permettent d’accéder à des objets informatiques (une valeur d’un certain type). Python s’appuie donc sur deux ensembles différents : le contexte (ou espace) de nommage et la mémoire (vive). Ces deux ensembles sont libérés à la fin de l’exécution d’un programme. Exemple (Déclaration et affectation d’une variable) L’instruction x=2 : 1 alloue une zone mémoire pour ranger l’objet de type entier 2 (), Contexte Mémoire 2 cherche si x existe dans le contexte de nommage. Ne le trouvant pas, une entrée x 2 x est ajoutée à ce contexte, 3 finalise l’affectation en associant x à 2 Attention au sens d’une affectation : ë Écrire 2 = x n’a pas de sens ! CBGM (IUT-RT) Prog 1 Version 20/21 22 / 96
Expression Expressions et opérateurs Expression Définition (Expression, opérateurs) Une expression est une série de calculs ayant pour résultat une valeur d’un certain type. Elle utilise des opérateurs (+, -, *, ...) et des opérandes (valeurs, variables, expressions) et s’évalue au regard de priorités de calcul. Exemple (Des expressions) Expression python Récupération de la valeur de la variable x x Expression arithmétique sur des valeurs 4/3 Expression arithmétique avec des variables (x+2) % 5 CBGM (IUT-RT) Prog 1 Version 20/21 23 / 96
Expression Expressions et opérateurs Principaux opérateurs Opérateurs des expressions impliquant des nombres (int ou float) Symb. Signification Symb. Signification + addition * multiplication - soustraction / division (décimale) // division euclidienne % modulo (reste de la division) ** exposant : 3**2 vaut 9 Opérateurs des expressions impliquant des chaînes de caractères (str) Symb. Signification Symb. Signification + concaténation * répétition Opérateurs des expressions impliquant des booléens (bool) Symb. Signification Symb. Signification or union logique and intersection logique not négation logique CBGM (IUT-RT) Prog 1 Version 20/21 24 / 96
Expression Expressions et opérateurs Priorité des opérateurs dans les expressions Priorité des opérateurs, par ordre croissant, avec groupement de gauche à droite si priorités égales Priorité Opérateur Description Basse or ou logique (en dernier ) and et logique not non logique =, , !=, == comparaison | ou bit à bit ^ ou exclusif bit à bit & et bit à bit décalage bit à bit +, - addition et soustraction *, /, //, % Multiplication, division, reste +x, -x, ~x signe positif, signe négatif, non bit à bit Haute ** exposant (en premier) (expression) expression délimitée par des parenthèses Remarque : en cas de doute, utilisez des parenthèses CBGM (IUT-RT) Prog 1 Version 20/21 25 / 96
Expression Expressions et affectations Expressions et affectations Stocker le résultat d’une expression Les expressions exploitent l’espace mémoire : on mémorise la valeur par une affectation après l’évaluation de l’expression. Exemple (Affectation du résultat d’une expression) res = (x ** 2) / 5 Modifier une variable La valeur d’une expression utilisant une variable peut être affectée à cette même variable. Exemple (Affectation du résultat d’une expression) var = 2*(var + 1) CBGM (IUT-RT) Prog 1 Version 20/21 26 / 96
Expression Expressions et affectations Expressions et affectations Affectation composée Elle permet de réaliser en une seule étape une expression et l’affectation de son résultat dans la variable servant de premier opérande, avec la syntaxe : var op= valeur où op est un opérateur ∈ { +, -, *, /, \%, //, **, }. Cette syntaxe est strictement équivalente à : var = var op valeur Exemple (Modification de variable et affectation composée) 1 chaine = "hel" 1 chaine = "hel" 2 chaine = chaine + "lo" 2 chaine += "lo" conduisent à chaine valant "hello". Démo CBGM (IUT-RT) Prog 1 Version 20/21 27 / 96
Instructions Qu’est ce qu’une instruction ? Instructions Définition (Instructions) Une instruction est un ordre à exécuter par le programme ; c’est une étape qui dicte à la machine ce qu’elle doit effectuer avant de passer à l’instruction suivante. Par exemple : affecter une valeur à une variable afficher une information à l’écran récupérer une saisie clavier faite par l’utilisateur (Prog 2) Exécuter une instruction implique d’évaluer des expressions. Définition (Programme) Un programme est une suite d’instructions, qui s’exécutent les unes après les autres - autrement dit séquentiellement. CBGM (IUT-RT) Prog 1 Version 20/21 28 / 96
Instructions Instructions de (ré)-affectation Instructions d’affectation Exemple (Des instructions d’affectation) 1 a = 3 2 b = a + 1 3 b = b + a Contexte Mémoire Ligne 1 : déclaration et affectation de a. a 3 1 Ligne 2 : déclaration et affectation de b . Ligne 3 : ré-affectation de b (équivalent à b % 4 b += a). L’objet 4 n’étant plus référencé, il 7 est effacé par le ramasse-miette. CBGM (IUT-RT) Prog 1 Version 20/21 29 / 96
Chapitre 3 Structure d’un programme : modules et fonctions CBGM (IUT-RT) Prog 1 Version 20/21 30 / 96
Modules et fonctions Modules Modules et fonctions Définition (Modules et fonctions) Python propose un ensemble de fonctions servant à différents calculs ou à différentes tâches utiles et récurrentes dans un programme. Certaines de ces fonctions sont fournies (rangées, déclarées) dans des bibliothèques (appelées modules). Exemple (Quelques modules ) Module Rôle Exemples de fonctions Built-in int, float, list, abs, min, max, len, ... math Calculs mathématiques cos, sin, exp, ... random Choix aléatoires rand, random, ... os, sys Interactions systèmes chdir, getlogin, getpid, ... turtle Fenêtre graphique forward, goto, ... CBGM (IUT-RT) Prog 1 Version 20/21 31 / 96
Modules et fonctions Modules Import de modules Définition (Directive d’import) Pour pouvoir utiliser les fonctions d’un module, il faut l’importer avec l’instruction : import nom_module Exemple (Des imports) import math importe toutes les fonctions du module math import os importe toutes les fonctions du module os Remarque : le développeur peut créer son propre module (un fichier .py contenant des fonctions) et l’importer avec pour nom de module le nom du fichier choisi. CBGM (IUT-RT) Prog 1 Version 20/21 32 / 96
Modules et fonctions Fonctions Caractéristiques d’une fonction Définition (Caractéristiques d’une fonction) Une fonction : est identifiée par un nom et est déclarée dans un éventuel module ; peut avoir des paramètres (obligatoires ou optionnels) produit un résultat, appelé valeur de retour (return) Elle se décrit par une signature de la forme [nom_module.]nom_fonction(param1, param2, ..., paramN) Exemple (Extrait de documentation de fonctions) La fonction sqrt du module math : La fonction randint du module random : o La documentation CBGM (IUT-RT) d’une fonction indique Prog 1 toujours le nom du module dans33 / 96 Version 20/21
Modules et fonctions Fonctions Appel d’une fonction Définition (Appel d’une fonction) Pour appeler une fonction il faut : 1 nommer la fonction avec l’une des syntaxes : si la fonction est déclarée dans le contexte courant : nom_fonction( ... ) si la fonction a été importée avec import nom_module : nom_module.nom_fonction( ... ) 2 indiquer dans les parenthèses les arguments : chaque argument donne une valeur à chaque paramètre de la fonction, dans le même ordre que celui de la déclaration. L’appel de la fonction fournit une valeur de retour, utilisable dans une expression, une affectation. CBGM (IUT-RT) Prog 1 Version 20/21 34 / 96
Modules et fonctions Fonctions Exemples d’appels Exemple (Appels à math.sqrt(x)) Avec l’instruction import math qui importe toutes les fonctions de math : 1 var = math.sqrt(3) 2 res = math.sqrt(4) Ligne 1 : var reçoit la valeur 1.7320508075688772 Ligne 2 : res reçoit la valeur 2.0 Exemple (Appels à max(a,b ) (qui n’appartient à aucun module)) 1 temp = max(1, 5 ) 2 var = max(6, temp ) 3 res = max(max(3, 2), 1) Ligne 1 : temp reçoit la valeur 5 Ligne 2 : var reçoit la valeur 6 Ligne 3 : évalue max(3, 2) pour produire 3 puis évalue max( 3, 1) pour produire 3 et le stocker dans res CBGM (IUT-RT) Prog 1 Version 20/21 35 / 96
Modules et fonctions Fonctions Déclaration d’une fonction Pour du code propre, modulaire ou pour factoriser du code, le développeur peut déclarer ses propres fonctions. La conception s’effectue avec les éléments suivants : Éléments pour la déclaration d’une fonction 1 Nom de la fonction : identificateur explicite 2 Paramètres : liste de paramètres (et de leurs noms) utilisés 3 Code : séquence d’instruction 4 Retour (ou renvoi) : la valeur renvoyée 5 Description (optionnel mais d’usage obligatoire) : une documentation ! 888 6 Préconditions (optionnel) : des expressions booléennes qui précisent les conditions d’application du code ( ) CBGM (IUT-RT) Prog 1 Version 20/21 36 / 96
Modules et fonctions Fonctions Syntaxe de déclaration Quelque soit le module dans lequel la fonction est déclarée, sa syntaxe de déclaration est : Syntaxe de déclaration def nom_fonction(param1, param2, ..., paramN ) : [""" commentaires """] # documentation [assert type(param) is ...] # pre-conditions instruction # code instruction ... return [valeur] # renvoie de la valeur de retour # avec sortie de la fonction # fin de la fonction Remarques : l’indentation définit le bloc d’instructions de la fonction l’exécution de return stoppe le flux d’instructions dans une fonction et force la sortie de la fonction avec la valeur indiquée si return n’est suivi d’aucune valeur, alors la fonction renvoie None CBGM (IUT-RT) Prog 1 Version 20/21 37 / 96
Modules et fonctions Fonctions Exemple d’une fonction à deux paramètres Exemple (La fonction somme2) La fonction somme2 (avec ses deux paramètres a et b) est déclarée par : Elle peut être appelée 1 def somme2(a, b): avec : 2 """Calcule et renvoie la somme de deux 1 res1 = somme2( 10, 2 ) nombres a et b""" 2 res2 = somme2( -3, 4 ) 3 total = a + b 4 return total Ligne 1 : évalue les instructions avec a=10 et b=2, renvoie le résultat 12 (valeur de total avant le return) puis affecte 12 à res1 Ligne 2 : ré- évalue les instructions avec a=-3 et b=4, renvoie le résultat 1 (valeur de total avant le return) puis affecte 1 à res2 Remarque FFF : cette fonction est un exemple de généricité puisqu’elle peut être utilisée avec n’importe quel type d’objets tant que l’addition + est définie. CBGM (IUT-RT) Prog 1 Version 20/21 38 / 96
Programme/Script Python Programme et sa fonction main Programme Python et fonction main Définition (Programme Python) Un programme Python est un fichier d’extension .py contenant des déclarations de fonctions avec/et des instructions. Il possède un point d’entrée, qui est par convention la fonction main (sans paramètre). Ce point d’entrée permet à Python de savoir où trouver la 1e instruction à exécuter : c’est la 1e du main. La fonction main doit/peut appeler les fonctions déclarées pour que leurs instructions soient exécutées. L’art de la tabulation Attention : pour faire partie du main, les instructions du programme doivent toutes être tabulées ). CBGM (IUT-RT) Prog 1 Version 20/21 39 / 96
Programme/Script Python Structure d’un programme Structure d’un programme La structure d’un programme est : 1 #!/usr/bin/env python 2 # -*- coding: UTF-8 -*- 3 """ 4 Script: un_programme.py 5 Auteur: pycharm 6 """ 7 # Import des modules 8 import math 9 10 # Fonctions 11 def une_fonction(a): 12 # instructions de la fonction 13 return ... 14 15 # Programme principal 16 def main(): 17 # Les instructions du main 18 var = une_fonction(2) 19 res = math.sqrt(3) 20 ... 21 # Fin du programme 22 23 if __name__ == ’__main__’: # Point d’entrée 24 main() # avec appel à main CBGM (IUT-RT) Prog 1 Version 20/21 40 / 96
Fonctions Notion de portée locale Contexte de nommage et mémoire 1 L’exécution d’un programme s’appuie sur : des contextes (de nommage) des variables sur la mémoire (vive) qui stocke les valeurs des variables 2 Un appel à une fonction crée un contexte local : pour y déclarer les paramètres et les variables de la fonction qui est propre à la fonction et à son appel qui est effacé au retour de la fonction (return) est recréé ("à neuf") à chaque nouvel appel de la fonction 3 Les contextes sont complètement séparés, donc sans interférences entre eux : la portée des variables d’une fonction est locale à la fonction ; les variables d’une fonction n’existent que lors de l’appel à la fonction. 4 Par contre, la mémoire est partagée par toutes les fonctions CBGM (IUT-RT) Prog 1 Version 20/21 41 / 96
Fonctions Contexte local d’une fonction Contexte local d’une fonction avec paramètres Appel : somme() Exemple (Appel d’une fonction à paramètres) Contexte Contexte du main Mémoire de somme 1 def somme(pA, pB) : 2 res = pA + pB 3 return res a 1 pA 4 b 2 pB 5 def main(): 6 a = 1 resultat 5 res 7 b = 2 8 resultat = somme(a, b) return res Les contextes de main et de somme n’existent qu’au moment de leur exécution : les variables (a, b, resultat et res) sont locales. Lors de l’appel, les paramètres pA et pB référencent les même objets que a et b, mais dans le contexte local. L’objet res, créé et renvoyé par la fonction, est celui récupéré dans main (et affecté à resultat) CBGM (IUT-RT) Prog 1 Version 20/21 42 / 96
Fonctions Contexte local d’une fonction Fonction à paramètres nommés Définition (Fonction à paramètres nommés) Une fonction peut proposer des paramètres nommés disposant d’une valeur par défaut ; sa signature est alors : nom_fonction(param1, param2, ... , paramN, param_nomme1=val1, ..., param_nommeN=valN) L’appel à la fonction : utilise obligatoirement des arguments pour les paramètres non nommés (positionnels) (param1, ..., paramN), dans le même ordre dans la signature peut ne pas mentionner les paramètres nommés (param_nomme1, ..., param_nommeN), et utilise alors les valeurs par défaut (val1, ..., valN) attribuées dans la signature peut mentionner des valeurs pour (tout ou partie) des paramètres nommés, et dans ce cas, utilise les valeurs indiquées au moment de l’appel CBGM (IUT-RT) Prog 1 Version 20/21 43 / 96
Fonctions Fonctions à paramètres nommés Fonction à paramètres nommés Exemple (Une fonction à paramètre nommé) La fonction os.mkdir(path, mode=0o777) crée un répertoire path, dont les droits d’accès sont donnés par umask & mode. Des appels peuvent être : os.mkdir("mon_repertoire"), avec pour paramètre path valant "mon_repertoire" et sans paramètre nommé, donc avec mode de valeur 0o777 (la valeur par défaut) os.mkdir("tps", mode=0o700), avec pour paramètre path valant "tps" et le paramètre nommé mode valant 0o700 CBGM (IUT-RT) Prog 1 Version 20/21 44 / 96
Fonctions Instructions de sortie : affichage console Instruction de sorties : affichage console Écriture vers l’écran (ou affichage console) avec print La fonction qui réalise l’affichage d’une donnée sur la console est : 1 print(donnee) Les données peuvent être de tous types (int, float, str, etc.). Un retour chariot est ajouté par défaut à la fin de chaque appel à print. La fonction print renvoie la valeur None. Exemple (Affichage de données (extrait de code)) donnent à l’affichage 1 msg = "Bonjour" console : 2 valeur = 3.14 3 print(msg) Bonjour 4 print(valeur) 3.14 5 print("xO" * 2) xOxO 6 print("fin") fin CBGM (IUT-RT) Prog 1 Version 20/21 45 / 96
Fonctions Instructions de sortie : affichage console Variantes de print 1 Avec plusieurs paramètres à afficher : print(donnee1, donnee2, ...) affiche, sur une même ligne et séparée (par défaut) par un espace, toutes les données passées en paramètres. Exemple (Affichage de données (extrait de code)) donnent à l’affichage 1 msg = "Bonjour" console : 2 valeur = 3.14 3 print(msg, valeur, "dit Pi") Bonjour 3.14 dit Pi 4 print("fin") fin CBGM (IUT-RT) Prog 1 Version 20/21 46 / 96
Fonctions Instructions de sortie : affichage console Variantes de print 2 Avec paramètres nommés : print( donnee1, donnee2, ..., sep=chaine_sep, end=chaine_fin ) affiche les données : en les séparant par la chaine_sep fournie dans le paramètre (optionnel) sep (par défaut sep=" ") en terminant l’affichage par la chaine_fin précisée dans le paramètre (optionnel) end (par défaut end="\n") Exemple (Affichage de données (extrait de code)) 1 msg = "Bonjour" donne à l’affichage 2 valeur = 3.14 console : 3 print(msg, valeur, sep="--") Bonjour--3.14 4 print("et" ) et 5 print(msg, valeur, end=">>") Bonjour 3.14>>fin 6 print("fin" ) CBGM (IUT-RT) Prog 1 Version 20/21 47 / 96
Fonctions Instructions de sortie : affichage console Bonne pratique pour l’affichage console print peut être utilisé partout dans le code (fonctions, programme principal, ...) ; il produit un affichage "instantané" d’une donnée mémoire qui : est destiné à l’utilisateur pour voir le résultat attendu du programme peut être utile au développeur pour suivre le bon déroulement de son programme même si rien ne vaut l’exécution en mode debug avec un IDE mais n’est pas exploitable par le code : o ne pas confondre : le return d’une fonction qui renvoie un objet informatique exploitable en le stockant dans une variable et l’affichage avec print de la valeur de cet objet Bonnes pratiques du print Une bonne pratique consiste à coder les instructions d’affichage : soit dans le main soit dans des fonctions spécifiquement dédiées à l’affichage (donc ayant pour valeur de retour None) CBGM (IUT-RT) Prog 1 Version 20/21 48 / 96
Chapitre 4 Structures alternatives CBGM (IUT-RT) Prog 1 Version 20/21 49 / 96
Expressions booléennes Type booléen et expressions booléennes Expressions booléennes Définition (Le type booléen, expression booléenne) Une variable de type booléen (bool) ne peut prendre que 2 valeurs : True ou False . Une expression est booléenne si elle s’évalue par un booléen. Opérateurs de comparaison et opérateurs booléens Les booléens sont souvent : le résultat d’une comparaison entre deux données du même type (numérique, chaîne), utilisant les opérateurs de comparaison le résultat d’une opération logique (opérateurs booléens et/ou/non) entre plusieurs comparaisons. Remarque : Les expressions booléennes peuvent bien sûr servir à affecter une variable. Exemple (Une instruction avec expression booléenne) reponse = (x == 5) # résultat de "x est-il égal à 5 ?" CBGM (IUT-RT) Prog 1 Version 20/21 50 / 96
Expressions booléennes Opérateurs de comparaison Principaux opérateurs de comparaison Les principaux opérateurs de comparaison Op. Signification Op. Signification == égal (même valeur) != différent > strictement supérieur < strictement inférieur >= supérieur ou égal
Expressions booléennes Opérateurs booléens Opérateurs booléennes Principaux opérateurs booléens Symb. Signification Symb. Signification or union logique and intersection logique not négation logique Remarque : o aux priorités des opérateurs Exemple (Des conditions booléennes ) Condition Expression Python La variable jour est-elle égale à "lundi" et la variable annee (jour == "lundi") and (annee > 2000) est-elle supérieure à 2000 ? Le jour est-il dans le WE ? (jour == "samedi") or (jour == "dimanche") jour in ["samedi", "dimanche"] La variable x est-elle différente de 0 ? x != 0 (x > 0) or (x < 0) La variable x est-elle comprise entre 0.5 inclu et 1.5 ? (x >= 0.5) and (x < 1.5) 0.5
Structures alternatives Structures alternatives élémentaire : Si sinon Structure alternative "Si ... sinon" Structure alternative "Si ... sinon" # Début du si/sinon if condition_booleenne: # Instructions si la condition est vraie instruction instruction uniquement si la condition est True else: # Instructions si la condition est fausse instruction instruction uniquement si la condition est False # Fin du si/sinon suite_du_programme suite du déroulement séquentiel teste la condition_booleenne : Si elle s’évalue True, le bloc d’instructions qui suit le if est exécuté ; Sinon, le bloc d’instructions qui suit le else est exécuté. Une fois les instructions de la structure if/else exécutées, le programme continue son déroulement avec la 1e instruction de suite_du_programme. CBGM (IUT-RT) Prog 1 Version 20/21 53 / 96
Structures alternatives Structures alternatives élémentaire : Si sinon L’art de la tabulation Identifiant des blocs d’instructions C’est l’indentation (tabulation avec la touche − → −− →− ) qui définit les blocs d’instructions en Python. Une structure alternative dans une fonction def une_fonction( ... ): #... → − − −−→ if condition_booleenne: # Instructions si la condition est vraie → − −− →− # ... else: # Instructions si la condition est fausse # ... # suite du programme # ... # fin de une_fonction CBGM (IUT-RT) Prog 1 Version 20/21 54 / 96
Structures alternatives Structures alternatives élémentaire : Si sinon Exemple Exemple (Alternative si sinon) def est_sup_a_4( var ): if var > 4: # Instructions si la condition est vraie res = "oui" else: # Instructions si la condition est fausse res = "non" return res donnent pour différents contextes d’appel : Cas 1 : l’appel (extrait du main) Cas 2 : l’appel (extrait du main) print("Est-ce que 5 > 4 ?") print("Est-ce que 3 > 4 ?") res = est_sup_a_4( 5 ) res = est_sup_a_4( 3 ) print(res) print(res) donne : donne : Est-ce que 5 > 4 ? Est-ce que 3 > 4 ? oui non CBGM (IUT-RT) Prog 1 Version 20/21 55 / 96
Structures alternatives Structure conditionnelle élémentaire : Si Structure conditionnelle Si Structure conditionnelle "Si" if condition_booleenne: # Instructions si la condition est vraie "omis" si instruction ... uniquement si la condition est vraie la condition instruction est fausse # Fin de la condition et suite du programme suite_du_programme suite du déroulement séquentiel teste la condition_booleenne : Si elle s’évalue True, le bloc d’instructions qui suit le if est exécuté. Sinon, le bloc d’instructions qui suit le if n’est pas exécuté. Dans les deux cas, le programme se poursuit avec la 1e instruction de la suite_du_programme. CBGM (IUT-RT) Prog 1 Version 20/21 56 / 96
Structures alternatives Structure conditionnelle élémentaire : Si Exemple Exemple (La fonction valeur absolue avec un "si") def valeur_absolue( var ): res = var if res < 0: # Instructions si la condition est vrai res = -res # Fin de la condition et suite du programme return res Cas 1 : l’appel (extrait du main) Cas 2 : l’appel (extrait du main) print("Val. abs. de 5 =") print("Val. abs. de -3 =") res = valeur_absolue(5) res = valeur_absolue(-3) print(res) print(res) donne : donne : Val. abs. de 5 = Val. abs. de -3 = 5 3 CBGM (IUT-RT) Prog 1 Version 20/21 57 / 96
Structures alternatives Structure alternative multiple : si ... ou si ... sinon Alternative Si ... ou si ... sinon Structure alternative Si ... ou si ... sinon if condition_booleenne_1: s’exécute si la condition 1 est True instruction instruction elif condition_booleenne_2: s’exécute si la condition 1 est False instruction et la condition 2 est True instruction else: s’exécute si les conditions 1 et 2 instruction sont False instruction suite_du_programme Le bloc elif peut apparaître autant de fois que l’on souhaite de conditions alternatives Dès que l’une des conditions booléennes est True, les conditions testées dans les elif qui suivent ne sont plus évaluées et le programme passe à la suite du programme Le bloc else est optionnel CBGM (IUT-RT) Prog 1 Version 20/21 58 / 96
Structures alternatives Structure alternative multiple : si ... ou si ... sinon Alternative Si ... ou si ... sinon Exemple (La fonction signe avec un si ... ou si ... sinon) def signe( var ) : if var < 0: res = "negatif" elif var > 0: res = "positif" else: res = "nul" return res Cas 1 : avec l’appel : Cas 2 : avec l’appel : Cas 3 : avec l’appel : res = signe(2) res = signe(-3) res = signe(0) print("2 est", res) print("-3 est", res) print("0 est", res) donne : donne : donne : 2 est positif -3 est negatif 0 est nul CBGM (IUT-RT) Prog 1 Version 20/21 59 / 96
Structures alternatives imbriquées Structures alternatives imbriquées Les structures alternatives peuvent être imbriquées les unes dans les autres autant de fois qu’on le souhaite. Exemple (La fonction signe avec des structures alternatives imbriquées) def signe( var ): # test 1 if var >= 0: # test 2 (sachant var >=0) if var > 0: res = "positif" else: res = "nul" # fin du test 2 else: # (sachant var >= 0 faux) res = "negatif" # fin du test 1 return res CBGM (IUT-RT) Prog 1 Version 20/21 60 / 96
Structures alternatives imbriquées Un même programme, différentes structures alternatives Pour un même programme, le code peut s’écrire de manière équivalente en utilisant l’une ou l’autre des structures alternatives : si/sinon si/sinon ou des structures imbriquées. Une bonne pratique pour les structures alternatives Le choix de la structure se fera souvent de sorte : à avoir une expression des conditions faciles à relire à ne pas oublier de cas de figure CBGM (IUT-RT) Prog 1 Version 20/21 61 / 96
Structures alternatives imbriquées Structures alternatives et fonctions : les return multiples Des return multiples sont souvent utilisés dans les fonctions dont le résultat dépend d’un test (avec sortie de la fonction dès le return rencontré). Exemple (La fonction signe avec des return multiples) 1 def signe( var ): 2 if var > 0: 3 return "positif" 4 elif var < 0: 5 return "negatif" 6 else: 7 return "nul" L’appel signe(3) s’arrête à la ligne 3 L’appel signe(-4) s’arrête à la ligne 5 L’appel signe(0) s’arrête ligne 7 CBGM (IUT-RT) Prog 1 Version 20/21 62 / 96
Structures alternatives ternaires Syntaxe ternaire de l’alternative Définition (Syntaxe ternaire) Lorsque la structure alternative if ... else sert à choisir parmi deux valeurs obtenues dans deux cas opposés (dépendant d’une condition, elle peut s’écrire avec une syntaxe ternaire : 1 valeur_si_vrai if condition else valeur_si_faux Exemple (Une structure ternaire) Etant donnée une est équivalent à : note : res = "validé" if note >= 10 else "non validé" if note >= 10: res = "validé" voire même à : else: res = "non validé" res = ("" if note >= 10 else "non ") + "validé" CBGM (IUT-RT) Prog 1 Version 20/21 63 / 96
Chapitre 5 Structures répétitives CBGM (IUT-RT) Prog 1 Version 20/21 64 / 96
Structure répétitive Définition (Structure répétitive) Une structure répétitive est un bloc d’instructions parcouru un certain nombre de fois (de 0 à une infinité). Boucle for En pratique, le nombre de répétitions est très souvent connu par le programmeur (parcours des éléments d’une liste, répétition d’une même action N fois, ...) ; on utilise une syntaxe simple appelée boucle for. Remarque : dans certains cas, le nombre de répétitions n’est pas connu à l’avance (cas d’une saisie utilisateur ou boucle de jeu) : les instructions se répètent tant qu’une condition est vérifiée, avec pour condition une expression booléenne. On utilise alors une syntaxe while/tant que (vue en prog 2). CBGM (IUT-RT) Prog 1 Version 20/21 65 / 96
Boucle for Boucle avec compteur d’itération Boucle for Définition (Boucle for) La boucle for, pour répéter un bloc d’instructions N fois, peut s’appuyer sur un compteur d’itération : for compteur in range( N ) : instruction # Début du bloc à répéter ... instruction # Fin du for suite_du_programme Une itération est l’une des N exécutions (ou N répétitions) du bloc d’instructions de la boucle Le compteur s’initialise à 0 ; après chaque itération, il augmente de 1. Lorsqu’il atteint N, le bloc d’instructions a été exécuté N fois ; il n’est plus exécuté et le programme passe aux instructions qui suivent le bloc. CBGM (IUT-RT) Prog 1 Version 20/21 66 / 96
Boucle for Boucle avec compteur d’itération Une répétition simple Exemple (Boucle itérant le même affichage 3 fois) donne : PythonTutor 1 for i in range(3): * * * fin 2 print("*", end=" ") 3 # fin de la boucle for 4 print("fin") Ligne i Affichage Iter. Commentaire 1 0 Initialisation du compteur à 0 1e 2 0 * Fin de la 1ère itér. de boucle 1 1 * 2e 2 1 * * Fin de la 2ème itér. de boucle 1 2 * * 3e 2 2 * * * Fin de la 3ème itér. de boucle 1 2 * * * o Le compteur atteint le nbre d’itér. voulu ; fin de la boucle 3 2 * * * fin CBGM (IUT-RT) Prog 1 Version 20/21 67 / 96
Boucle for Boucle avec compteur d’itération Une répétition utilisant le compteur de boucle Le compteur de boucle, une variable comme une autre ... Le compteur peut être utilisé dans les instructions de la boucle pour faire varier leurs résultats d’une itération à une autre Exemple (Boucle affichage des nombres de 2 jusqu’à 6 (exclu)) 1 2 for i in range(4): print(i + 2, end=" ") donne : PythonTutor : 3 # fin de la boucle for 2 3 4 5 fin 4 print("fin") ... o le compteur de boucle ne doit en général pas être modifié par les instructions de la boucle Les valeurs du compteur sont pré-calculées au 1e passage dans la boucle pour aller de 0 à N-1. CBGM (IUT-RT) Prog 1 Version 20/21 68 / 96
Boucle for Plage de valeurs du compteur : la fonction range Boucle for avec valeur initiale différente de 0 Définition (Boucle for avec valeur initiale non nulle) for compteur in range(val_ini, val_fin_exclue) : instructions ... # fin de la boucle for Le nombre d’itérations est alors de val_fin_exclue - val_ini ; la boucle s’arrête lorsque le compteur atteint la valeur val_fin_exclue. Exemple (Boucle d’affichage des nombres de 2 jusqu’à 5 (exclu)) 1 for i in range(2, 5): 2 print(i, end=" ") Ligne i Affichage Iter Commentaire 1 2 Initialisation du compteur à 2 3 # fin de la boucle for 2 2 2 1e Fin de la 1ère itér. de boucle 4 print("fin") 1 3 2 PythonTutor : 2e 2 3 2 3 Fin de la 2ème itér. de boucle 1 4 donnent 2 4 2 3 2 3 4 3e Fin de la 3ème itér. de boucle 1 4 2 3 4 Le compteur a atteint sa valeur finale 2 3 4 fin 3 4 2 3 4 fin CBGM (IUT-RT) Prog 1 Version 20/21 69 / 96
Boucle for Plage de valeurs du compteur : la fonction range Boucle for avec incrément différent de 1 Définition (Boucle for avec un incrément du compteur différent de 1) 1 for compteur in range(val_ini, val_fin_exclue, increment) : 2 instructions 3 ... 4 # fin de la boucle for initialise le compteur à la val_ini et à chaque itération augmente la valeur du compteur de increment jusqu’à ce qu’il égale ou dépasse val_fin_exclue Exemple (Boucle 5, affichage des nombres pairs de 2 jusqu’à 8 (exclu)) 1 for i in range(2, 8, 2): Ligne i Affichage Iter Commentaire 2 print(i, end=" ") 1 2 1e Initialisation du compteur à 2 3 # fin de la boucle for 2 2 2 Fin de la 1ère itér. de boucle 1 4 2 4 print("fin") 2e 2 4 Fin de la 2ème itér. de boucle PythonTutor : 2 4 1 6 2 4 3e donne 2 6 2 4 6 Fin de la 3ème itér. de boucle 1 6 2 4 6 Le compteur atteint sa valeur max. 3 6 2 4 6 fin 2 4 6 fin CBGM (IUT-RT) Prog 1 Version 20/21 70 / 96
Boucle for sur une collection ordonnée Les listes Listes Définition (Listes) Les listes (classe list) sont des collections ordonnées d’éléments (de type quelconque) identifiées par une référence (stockée dans une variable). Définition (Déclaration d’une liste) Une liste de N élements se déclare par : Contexte Mémoire liste = [elm0, elm1, ..., elmN_1] liste [0] elm0 La variable liste référence alors les [1] elm1 éléments elm0, elm1, ..., elmN_1 en [2] elm2 ... ... mémoire, en leur attribuant un ordre : elm0 [N-1] elmN_1 est le 1e, elm1 le 2d... et elmN_1 le dernier. Nombre d’éléments d’une liste Le nombre d’éléments d’une liste est renvoyé par la fonction len(liste). CBGM (IUT-RT) Prog 1 Version 20/21 71 / 96
Boucle for sur une collection ordonnée Les listes Accès élémentaires aux éléments d’une liste Définition (Indices des éléments d’une liste) Les éléments d’une liste liste = [elm0, elm1, ..., elmN_1] étant ordonnés, chaque élément de la liste est lié à un indice ; cet indice est la position de l’élément dans la liste : 0 pour elm0, 1 pour elm1, ... et len(liste)-1 pour le dernier élément elmN_1. Accès aux éléments d’une liste Pour un indice i donné, la syntaxe liste[i] accède à l’élément d’indice i de la liste (en lecture comme en écriture). Remarque : Si l’indice n’est pas entre 0 et len(liste)-1, l’expression liste[i] peut provoquer une erreur de type IndexError: list index out of range. CBGM (IUT-RT) Prog 1 Version 20/21 72 / 96
Boucle for sur une collection ordonnée Les listes Exemple Exemple (Une liste) 1 liste = [1, 15, "bob", 2] Contexte Mémoire 2 print("liste =", liste) 3 print("type =>", type(liste)) liste [0] 1 4 print("liste[1] =>", liste[1]) [1] 15 5 print("liste[2] =>", liste[2]) [2] ’bob’ 6 print("longueur =>", len(liste)) [3] 2 donne sur la console : liste = [1, 15, ’bob’, 2] type => liste[1] => 15 liste[2] => bob longueur => 4 CBGM (IUT-RT) Prog 1 Version 20/21 73 / 96
Boucle for sur une collection ordonnée Parcours de listes Parcours itératif de tous les éléments d’une liste Définition (Objet itérable) La liste est un objet itérable, c’est à dire une collection d’éléments dont on peut prendre (ou parcourir) les éléments un à un. Parcours naturel d’une liste par le biais des indices Le parcours naturel consiste à prendre les éléments d’une liste, un par un, via leur indice dans l’ordre croissant (indices allant de 0 à len(liste)-1) : for i in range(0, len(liste)): # instruction portant sur liste[i] # ... # fin du parcours # suite_du_programme CBGM (IUT-RT) Prog 1 Version 20/21 74 / 96
Boucle for sur une collection ordonnée Parcours de listes Exemple de parcours par indices Exemple (Affichage des éléments d’une liste séparés par des ’/’) 1 liste = ["un", 2, "trois", "soleil"] 2 for i in range(0, len(liste)): 3 elm = liste[i] 4 print(elm, "/", end="") 5 # fin de la boucle 6 print("fin") donne : Lignes Iter. i ligne[i] Affichage 2/3/4 1e 0 "un" un / 2/3/4 2e 1 2 un /2 / 2/3/4 3e 2 "trois" un /2 /trois / 2/3/4 4e 3 "soleil" un /2 /trois /soleil / 2 o Dernière valeur de i atteinte 5 3 "soleil" un /2 /trois /soleil /fin d’où l’affichage final : un /2 /trois /soleil /fin CBGM (IUT-RT) Prog 1 Version 20/21 75 / 96
Boucle for sur une collection ordonnée Parcours de listes Parcours d’une liste par éléments La boucle for est prévue pour parcourir directement les éléments d’une liste sans passer par leur indice : Parcours itératif d’une liste par éléments for elm in liste: # instruction sur elm # ... # fin du parcours # suite_du_programme A chaque itération, elm prend pour valeur l’un des éléments de la liste (du 1e au dernier) et exécute les instructions. CBGM (IUT-RT) Prog 1 Version 20/21 76 / 96
Boucle for sur une collection ordonnée Parcours de listes Exemple de parcours par élément Exemple (Un parcours par élément) 1 liste = ["papier", "caillou", "ciseau"] 2 for elm in liste: 3 print(elm, " -> ", end="") 4 # fin de la boucle for 5 print("fin") donne : Lignes Iter. elm Affichage 2/3 1e "papier" papier -> 2/3 2e "caillou" papier -> caillou -> 2/3 3e "ciseau" papier -> caillou -> ciseau -> 2 o Dernier élément de la liste atteint 4 "ciseau" papier -> caillou -> ciseau -> fin Remarque : la boucle for i in range(n) cache un parcours itératif : la fonction range renvoie un objet (de type range) correspondant à la collection ordonnée itérable 0, 1, 2, ..., n-1 (o ce n’est pas une liste). CBGM (IUT-RT) Prog 1 Version 20/21 77 / 96
Boucle for sur une collection ordonnée Parcours de listes Des parcours équivalents Exemple (Affichage des éléments d’une liste précédés de leur indice) Pour une même liste liste = [’a’, 1, ’b’] : 2 Parcours par éléments : 1 Parcours par indices : i = 0 for i in range(len(liste)): for elm in liste: print(i, ":", end="") print(i, ":", end="") print(liste[i], "//", end="") print(elm, "//", end="") # fin de la boucle i = i+1 print("fin") # fin de la boucle print("fin") donnent à l’exécution : 0 : a // 1 : 1 // 2 : b // fin Remarques : Le parcours par indices est à privilégier si le programme doit accéder aux indices. Sinon, le parcours par éléments est plus efficace. CBGM (IUT-RT) Prog 1 Version 20/21 78 / 96
Vous pouvez aussi lire