Programmation Python...L’informatique en R&T Les modules d’informatique L’informatique en R&T...
Transcript of Programmation Python...L’informatique en R&T Les modules d’informatique L’informatique en R&T...
Programmation Python
Rémy CHOLLET*Cléo BARAS
Lorraine GOEURIOTJérôme MARTIN
Mails : [email protected]
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 InformatiquesM1106 Initiation au développement WebM1207 Programmation 1
S2 M2104 SGBDM2105 Web DynamiqueM2109 Gestion de Projets informatiquesM2207 Programmation 2
S3 RCPI01 POOM3206 Scripts
S4 M4206C Programmation sur MobilesRCPD02 SGBD Avancés
CBGM (IUT-RT) Prog 1 Version 20/21 3 / 96
L’informatique en R&T Planning
M1207 - Programmation 1
ModalitésCours/TD : 1h + 7 × 2hTP : 2h + 6 × 2hÉvaluation : DS papier 1h30 ; DS machine 1h30
Planning des séancesSemaine CM/TD TP45 Accueil46 Introduction, variable, expression Prise en main de l’IDE47 Bases de la programmation48 Structures alternatives Structures alternatives49 Structures répétitives Structures alternatives50 Structures répétitives imbriquées Structures répétitives51 Fonctions Structures répétitives imbriquées1 Fonctions Fonctions1 Révision DS Fonctions2 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.phpIDE 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) del’information (data), dont découle des programmes qui implémentent desalgorithmes à l’aide d’un langage de programmation.
DonnéesProgramme(software) Résultats
Ordinateur
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 unefonctionnalité.
Exemple (Des algorithmes)
Recette de cuisine, notice de montageRésolution de ax2 + bx + c = 0Tri de donnéesCryptographieRecherche d’un plus court cheminetc.
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, uncomprimé 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 QUEFIN 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é pourdonner des instructions à l’ordinateur.
Évolution des langages1 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 approches1 Compilation : traduction d’un code source vers un code cible exécutable
code exécutable directement par l’OSBytecode exécutable par machine virtuelle (cf. Java au S3)
2 Interprétation : code source converti en bytecode "à la volée" soitlecture et analyse d’une instruction (ou une expression)si correcte, l’exécuter (ou évaluer l’expression)passer à l’instruction suivante
Pour Python889
tout le code source est vérifié syntaxiquementun bytecode est produit automatiquement pour exécution dansl’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 19901er objectif : un nouveau shellgrande communauté, usages industrialisésen 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 rapideAspects modernes (itérateurs, compréhension, introspection...)Très bon langage pour l’administration systèmeBibliothèques très diverses : système, calcul, imagerie, web, machinelearning, 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/x2hwqlwCBGM (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 langageinformatique à l’apprentissage d’une langue étrangère. Les coursm’ont permis de comprendre les concepts généraux. Mais c’est lefait de pratiquer tous les jours qui m’a réellement permis deprogresser.
– 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
PerformanceFiabilitéRobustesse
PortabilitéLisibilité du codeMaintenabilité
Concrètement, il faut :Tester unitairement le codeDocumenter le code, le commenterUtiliser des nommages pertinents dans le codeStructurer le code par des modules, des fonctions et aussi des classesLimiter 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érence2 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 doncde type entier
Remarques
Une variable possède également :une durée de vieune portéedes propriétés en tant qu’objet informatique décrit par une classe
CBGM (IUT-RT) Prog 1 Version 20/21 17 / 96
Variables Qu’est ce qu’une variable?
Choix de l’identificateur889
Choix de l’identificateurL’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) <class ’int’>
type( 0. ) renvoie <class ’float’>
type( ’Spam’ ) renvoie <class ’str’>
CBGM (IUT-RT) Prog 1 Version 20/21 19 / 96
Variables Type d’une variable
Types principaux (simples)
Nom Type (class) Exemples devaleurs
Remarque Précision
entier int -2 exprimé en base 10
illimitée (tant que lamémoire le permet)
(integer ) 10 (expression par défaut)-0b10 exprimé en binaire0b1010 avec préfixe 0b
-0x2 exprimé en hexadécimal0xA avec préfixe 0x (ou 0X)-0o2 exprimé en octal0o12 avec préfixe 0o (ou 0O)
flottant float 1.34 avec le séparateur . limitée, allant desys.float_info.min àsys.float_info.max
-0.6
3.1462
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 entierdé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 valeurd’un certain type). Python s’appuie donc sur deux ensembles différents : lecontexte (ou espace) de nommage et la mémoire (vive). Ces deuxensembles 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 (<class ’int’>),2 cherche si x existe dans le contexte de
nommage. Ne le trouvant pas, une entréex est ajoutée à ce contexte,
3 finalise l’affectation en associant x à 2
Contexte
x
Mémoire
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’uncertain 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 pythonRé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. Significationor union logique and intersection logiquenot négation logique
Remarque : Python autorise des expressions mélangeant des types lorsqu’ilssont homogènes uniquement (typage fort).
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 DescriptionBasse 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 parune affectation après l’évaluation de l’expression.
Exemple (Affectation du résultat d’une expression)
res = (x ** 2) / 5
Modifier une variableLa valeur d’une expression utilisant une variable peut être affectée à cettemê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 deson résultat dans la variable servant de premier opérande, avec la syntaxe :
var op= valeur
où op est un opérateur ∈ { +, -, *, /, \%, //, **, <<, >> }. Cette syntaxe eststrictement équivalente à :
var = var op valeur
Exemple (Modification de variable et affectation composée)
1 chaine = "hel"2 chaine = chaine + "lo"
1 chaine = "hel"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 étapequi dicte à la machine ce qu’elle doit effectuer avant de passer à l’instructionsuivante. Par exemple :
affecter une valeur à une variableafficher une information à l’écranré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 lesautres - 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 = 32 b = a + 13 b = b + a
Contexte Mémoire
a 3
b 4
1
7
%
Ligne 1 : déclaration et affectation de a.Ligne 2 : déclaration et affectation de b .Ligne 3 : ré-affectation de b (équivalent àb += a). L’objet 4 n’étant plus référencé, ilest effacé par le ramasse-miette.
CBGM (IUT-RT) Prog 1 Version 20/21 29 / 96
Chapitre 3
Structure d’un programme : modules etfonctions
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 cesfonctions sont fournies (rangées, déclarées) dans des bibliothèques(appelées modules).
Exemple (Quelques modules )
Module Rôle Exemples de fonctionsBuilt-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 avecl’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 .pycontenant des fonctions) et l’importer avec pour nom de module le nom dufichier 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 d’une fonction indique toujours le nom du module danslaquelle elle est déclarée.
CBGM (IUT-RT) Prog 1 Version 20/21 33 / 96
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 donneune valeur à chaque paramètre de la fonction, dans le même ordre quecelui de la déclaration.
L’appel de la fonction fournit une valeur de retour, utilisable dans uneexpression, 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.7320508075688772Ligne 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 5Ligne 2 : var reçoit la valeur 6Ligne 3 : évalue max(3, 2) pour produire 3 puis évalue max( 3, 1) pourproduire 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éveloppeurpeut déclarer ses propres fonctions. La conception s’effectue avec leséléments suivants :
Éléments pour la déclaration d’une fonction1 Nom de la fonction : identificateur explicite2 Paramètres : liste de paramètres (et de leurs noms) utilisés3 Code : séquence d’instruction4 Retour (ou renvoi) : la valeur renvoyée5 Description (optionnel mais d’usage obligatoire) : une documentation !6 Préconditions (optionnel) : des expressions booléennes qui précisent les
conditions d’application du code (888)
CBGM (IUT-RT) Prog 1 Version 20/21 36 / 96
Modules et fonctions Fonctions
Syntaxe de déclarationQuelque soit le module dans lequel la fonction est déclarée, sa syntaxe dedéclaration est :
Syntaxe de déclaration
def nom_fonction(param1, param2, ..., paramN ) :[""" commentaires """] # documentation[assert type(param) is ...] # pre-conditions
instruction # codeinstruction...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 fonctionl’exécution de return stoppe le flux d’instructions dans une fonction etforce la sortie de la fonction avec la valeur indiquéesi 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ètresa et b) est déclarée par :
1 def somme2(a, b):2 """Calcule et renvoie la somme de deux
nombres a et b"""3 total = a + b4 return total
Elle peut être appeléeavec :
1 res1 = somme2( 10, 2 )2 res2 = somme2( -3, 4 )
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’ellepeut être utilisée avec n’importe quel type d’objets tant que l’addition + estdé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 desdéclarations de fonctions avec/et des instructions. Il possède un pointd’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 leursinstructions soient exécutées.
L’art de la tabulationAttention : pour faire partie du main, les instructions du programme doiventtoutes être tabulées ).
CBGM (IUT-RT) Prog 1 Version 20/21 39 / 96
Programme/Script Python Structure d’un programme
Structure d’un programmeLa structure d’un programme est :
1 #!/usr/bin/env python2 # -*- coding: UTF-8 -*-3 """4 Script: un_programme.py5 Auteur: pycharm6 """7 # Import des modules8 import math9
10 # Fonctions11 def une_fonction(a):12 # instructions de la fonction13 return ...14
15 # Programme principal16 def main():17 # Les instructions du main18 var = une_fonction(2)19 res = math.sqrt(3)20 ...21 # Fin du programme22
23 if __name__ == ’__main__’: # Point d’entrée24 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 variablessur 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 fonctionqui est propre à la fonction et à son appelqui 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érencesentre eux : la portée des variables d’une fonction est locale à lafonction ; les variables d’une fonction n’existent que lors de l’appel à lafonction.
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
Exemple (Appel d’une fonction àparamètres)
1 def somme(pA, pB) :2 res = pA + pB3 return res4
5 def main():6 a = 17 b = 28 resultat = somme(a, b)
Contextedu main
MémoireContextede somme
a 1 pA
b 2 pB
res5resultat
Appel : somme()
return res
Les contextes de main et de somme n’existent qu’au moment de leurexé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 quea 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 valeurpar 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 signaturepeut 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 signaturepeut mentionner des valeurs pour (tout ou partie) des paramètresnommés, et dans ce cas, utilise les valeurs indiquées au moment del’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 lesdroits 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 valeur0o777 (la valeur par défaut)os.mkdir("tps", mode=0o700), avec pour paramètre path valant "tps" etle 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 retourchariot est ajouté par défaut à la fin de chaque appel à print. La fonctionprint renvoie la valeur None.
Exemple (Affichage de données (extrait de code))
1 msg = "Bonjour"2 valeur = 3.143 print(msg)4 print(valeur)5 print("xO" * 2)6 print("fin")
donnent à l’affichageconsole :
Bonjour3.14xOxOfin
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))
1 msg = "Bonjour"2 valeur = 3.143 print(msg, valeur, "dit Pi")4 print("fin")
donnent à l’affichageconsole :
Bonjour 3.14 dit Pifin
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"2 valeur = 3.143 print(msg, valeur, sep="--")4 print("et" )5 print(msg, valeur, end=">>")6 print("fin" )
donne à l’affichageconsole :
Bonjour--3.14etBonjour 3.14>>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 programmepeut être utile au développeur pour suivre le bon déroulement de sonprogramme même si rien ne vaut l’exécution en mode debug avec un IDEmais n’est pas exploitable par le code : o ne pas confondre :
le return d’une fonction qui renvoie un objet informatique exploitable en lestockant dans une variableet 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 (doncayant 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 ouFalse . 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 comparaisonle résultat d’une opération logique (opérateurs booléens et/ou/non) entreplusieurs comparaisons.
Remarque : Les expressions booléennes peuvent bien sûr servir à affecterune 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 <= inférieur ou égalb<x<B x est compris entre b et Bin appartenance à une liste
d’élementsnot in non appartenance à une
liste d’élémentsisinstance(x, t) x est du type t? is égal (même objet en mé-
moire)
Exemple (Des expressions booléennes avec opérateurs de comparaison )Condition Expression PythonLa variable prog1 est-elle égale à 10? prog1 == 10
La variable prog2 est-elle comprise entre 10 et 20? 10 < prog2 < 20
La moyenne des notes prog1 et prog2 est-elle supérieure à 10? (prog1+prog2)/2 > 10
La note prog1 est-elle divisible par 3? prog1 % 3 == 0
Le jour est-il "lundi", "mardi" ou "mercredi"? jour in ["lundi", "mardi", "mercredi"]
x est-il différent de 2.2, 3.3 et de 4.4? x not in [2.2, 3.3, 4.4]
x est-il du type int? isinstance(x, int)
CBGM (IUT-RT) Prog 1 Version 20/21 51 / 96
Expressions booléennes Opérateurs booléens
Opérateurs booléennes
Principaux opérateurs booléens
Symb. Signification Symb. Significationor union logique and intersection logiquenot négation logique
Remarque : o aux priorités des opérateurs
Exemple (Des conditions booléennes )Condition Expression PythonLa 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 <= x < 1.5
CBGM (IUT-RT) Prog 1 Version 20/21 52 / 96
Structures alternatives Structures alternatives élémentaire : Si sinon
Structure alternative "Si ... sinon"
Structure alternative "Si ... sinon"
# Début du si/sinonif condition_booleenne:
# Instructions si la condition est vraieinstructioninstruction
else:# Instructions si la condition est fausseinstructioninstruction
# Fin du si/sinonsuite_du_programme
uniquement si la condition est True
uniquement si la condition est False
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 programmecontinue 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 blocsd’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 vraieres = "oui"
else:# Instructions si la condition est fausseres = "non"
return res
donnent pour différents contextes d’appel :Cas 1 : l’appel (extrait du main)
print("Est-ce que 5 > 4 ?")res = est_sup_a_4( 5 )print(res)
donne :
Est-ce que 5 > 4 ?oui
Cas 2 : l’appel (extrait du main)
print("Est-ce que 3 > 4 ?")res = est_sup_a_4( 3 )print(res)
donne :
Est-ce que 3 > 4 ?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 vraieinstruction...instruction
# Fin de la condition et suite du programmesuite_du_programme
uniquement si la condition est vraie
"omis" sila conditionest fausse
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 lasuite_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 = varif res < 0:
# Instructions si la condition est vraires = -res
# Fin de la condition et suite du programmereturn res
Cas 1 : l’appel (extrait du main)
print("Val. abs. de 5 =")res = valeur_absolue(5)print(res)
donne :
Val. abs. de 5 =5
Cas 2 : l’appel (extrait du main)
print("Val. abs. de -3 =")res = valeur_absolue(-3)print(res)
donne :
Val. abs. de -3 =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:instructioninstruction
elif condition_booleenne_2:instructioninstruction
else:instructioninstruction
suite_du_programme
s’exécute si la condition 1 est True
s’exécute si la condition 1 est Falseet la condition 2 est True
s’exécute si les conditions 1 et 2sont False
Le bloc elif peut apparaître autant de fois que l’on souhaite deconditions alternativesDès que l’une des conditions booléennes est True, les conditions testéesdans les elif qui suivent ne sont plus évaluées et le programme passe àla suite du programmeLe 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 :
res = signe(2)print("2 est", res)
donne :
2 est positif
Cas 2 : avec l’appel :
res = signe(-3)print("-3 est", res)
donne :
-3 est negatif
Cas 3 : avec l’appel :
res = signe(0)print("0 est", res)
donne :
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 autresautant de fois qu’on le souhaite.
Exemple (La fonction signe avec des structures alternatives imbriquées)
def signe( var ):# test 1if 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 1return res
CBGM (IUT-RT) Prog 1 Version 20/21 60 / 96
Structures alternatives imbriquées
Un même programme, différentes structuresalternatives
Pour un même programme, le code peut s’écrire de manière équivalente enutilisant l’une ou l’autre des structures alternatives : si/sinon si/sinon ou desstructures 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ésultatdé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 3L’appel signe(-4) s’arrête à la ligne 5L’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 valeursobtenues dans deux cas opposés (dépendant d’une condition, elle peuts’écrire avec une syntaxe ternaire :
1 valeur_si_vrai if condition else valeur_si_faux
Exemple (Une structure ternaire)
Etant donnée unenote :
if note >= 10:res = "validé"
else:res = "non validé"
est équivalent à :
res = "validé" if note >= 10 else "non validé"
voire même à :
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 certainnombre de fois (de 0 à une infinité).
Boucle for
En pratique, le nombre de répétitions est très souvent connu par leprogrammeur (parcours des éléments d’une liste, répétition d’une mêmeaction 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 serépètent tant qu’une condition est vérifiée, avec pour condition uneexpression booléenne. On utilise alors une syntaxe while/tant que (vue enprog 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 surun compteur d’itération :
for compteur in range( N ) :instruction # Début du bloc à répéter...instruction
# Fin du forsuite_du_programme
Une itération est l’une des N exécutions (ou N répétitions) du blocd’instructions de la boucleLe 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 plusexé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)
1 for i in range(3):2 print("*", end=" ")3 # fin de la boucle for4 print("fin")
donne : � PythonTutor
* * * fin
Ligne i Affichage Iter. Commentaire1 0 1e Initialisation du compteur à 02 0 * Fin de la 1ère itér. de boucle1 1 * 2e2 1 * * Fin de la 2ème itér. de boucle1 2 * * 3e2 2 * * * Fin de la 3ème itér. de boucle1 2 * * * o Le compteur atteint le nbre d’itér. voulu ; fin de la boucle3 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 fairevarier leurs résultats d’une itération à une autre
Exemple (Boucle affichage des nombres de 2 jusqu’à 6 (exclu))
1 for i in range(4):2 print(i + 2, end=" ")3 # fin de la boucle for4 print("fin")
donne : � PythonTutor :
2 3 4 5 fin
... o le compteur de boucle ne doit en général pas être modifié par lesinstructions de la boucle
Les valeurs du compteur sont pré-calculées au 1e passage dans la bouclepour 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 boucles’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=" ")3 # fin de la boucle for4 print("fin")
donnent � PythonTutor :
2 3 4 fin
Ligne i Affichage Iter Commentaire1 2 1e Initialisation du compteur à 22 2 2 Fin de la 1ère itér. de boucle1 3 2 2e2 3 2 3 Fin de la 2ème itér. de boucle1 4 2 3 3e2 4 2 3 4 Fin de la 3ème itér. de boucle1 4 2 3 4 Le compteur a atteint sa valeur finale3 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 instructions3 ...4 # fin de la boucle for
initialise le compteur à la val_ini et à chaque itération augmente la valeur ducompteur 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):2 print(i, end=" ")3 # fin de la boucle for4 print("fin")
donne � PythonTutor :
2 4 6 fin
Ligne i Affichage Iter Commentaire1 2 1e Initialisation du compteur à 22 2 2 Fin de la 1ère itér. de boucle1 4 2 2e2 4 2 4 Fin de la 2ème itér. de boucle1 6 2 4 3e2 6 2 4 6 Fin de la 3ème itér. de boucle1 6 2 4 6 Le compteur atteint sa valeur max.3 6 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 (detype 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 :
liste = [elm0, elm1, ..., elmN_1]
La variable liste référence alors leséléments elm0, elm1, ..., elmN_1 enmémoire, en leur attribuant un ordre : elm0est le 1e, elm1 le 2d... et elmN_1 le dernier.
Contexte Mémoire
liste [0] elm0
[1] elm1
[2] elm2
. . . . . .
[N-1] elmN_1
Nombre d’éléments d’une listeLe 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 del’élément dans la liste : 0 pour elm0, 1 pour elm1, ... et len(liste)-1 pour ledernier élément elmN_1.
Accès aux éléments d’une listePour un indice i donné, la syntaxe liste[i] accède à l’élément d’indice i dela 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]2 print("liste =", liste)3 print("type =>", type(liste))4 print("liste[1] =>", liste[1])5 print("liste[2] =>", liste[2])6 print("longueur =>", len(liste))
Contexte Mémoire
liste [0] 1
[1] 15
[2] ’bob’
[3] 2
donne sur la console :
liste = [1, 15, ’bob’, 2]type => <class ’list’>liste[1] => 15liste[2] => boblongueur => 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 onpeut 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 boucle6 print("fin")
donne :Lignes Iter. i ligne[i] Affichage2/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 atteinte5 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 listesans 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 for5 print("fin")
donne :Lignes Iter. elm Affichage2/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 atteint4 "ciseau" papier -> caillou -> ciseau -> fin
Remarque : la boucle for i in range(n) cache un parcours itératif : lafonction range renvoie un objet (de type range) correspondant à la collectionordonné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’] :
1 Parcours par indices :
for i in range(len(liste)):print(i, ":", end="")print(liste[i], "//", end="")
# fin de la boucleprint("fin")
2 Parcours par éléments :
i = 0for elm in liste:
print(i, ":", end="")print(elm, "//", end="")i = i+1
# fin de la boucleprint("fin")
donnent à l’exécution :
0 : a // 1 : 1 // 2 : b // fin
Remarques : Le parcours par indices est à privilégier si le programme doitaccéder aux indices. Sinon, le parcours par éléments est plus efficace.
CBGM (IUT-RT) Prog 1 Version 20/21 78 / 96
Boucle avec variable d’accumulation Principe
La variable d’accumulation
Principe de la variable d’accumulation
Les boucles s’utilisent couramment avec une variable d’accumulation,dont la valeur s’actualise à chaque itération dans le bloc d’instructionsde la boucle.L’actualisation peut être :
l’ajout à la variable d’une valeur numérique : nbre += increment
l’ajout d’une chaîne de caractères à une autre : chaine += chaine_ajoutee
la multiplication de la variable par une valeur : nbre = nbre*increment
CBGM (IUT-RT) Prog 1 Version 20/21 79 / 96
Boucle avec variable d’accumulation Accumulation additive
Exemple d’accumulation additive
Exemple (Solde d’un compte bancaire après certain nombre de mois)
Partant d’un compte bancaire initialement à 0, sur lequel est versé un montantfixe de 50 e tous les mois, après 4 ans de fonctionnement :
1 solde = 0 # Initialisation2 for mois in range(1, 4 * 12):3 solde = solde + 504 # fin de la boucle5 print("solde final :", solde)
donne à l’exécution � PythonTutor :
solde final : 2350
Y Il n’y a pas trace des valeurs intermédiaires du solde (cf. listes en Prog2)
CBGM (IUT-RT) Prog 1 Version 20/21 80 / 96
Boucle avec variable d’accumulation Accumulation additive
Exemples d’accumulation additive
Exemple (Somme des entiers de 1 à 36 (inclus))
La variable d’accumulation peut utiliser le compteur de boucle :
1 somme = 0 # Initialisation2 for i in range(1, 36 + 1):3 somme = somme + i4 # fin de la boucle5 print("somme finale :", somme)
donne :
somme finale : 666
� PythonTutor
Exemple (Nombre binaire sur 8 bits choisis au hasard)
La variable d’accumulation peut exploiter la concaténation de chaîne decaractères :
1 chaine = ""2 for i in range(8):3 chaine += random.choice( [’0’, ’1’]
)4 # fin de la boucle5 print("binaire :", chaine)
peut donner :
binaire : 01101001
CBGM (IUT-RT) Prog 1 Version 20/21 81 / 96
Boucle avec variable d’accumulation Accumulation multiplicative
Exemple d’accumulation multiplicative
Exemple (Calcul itératif d’une puissance)
La fonction puissance2 calcule 2n dans res en utilisant le fait que2n = 2× 2× ...× 2 (avec n multiplications) ; res étant modifiée paraccumulation de multiplication, sa valeur initiale sera donc 1.
1 def puissance2(pN):2 res = 13 for i in range(pN):4 res = res * 25 # fin de la boucle for6 return res
� PythonTutor
Ligne i Iter res détail du calcul2 1 res = 1
3/4 0 1e 2 res=1×23/4 1 2e 4 res=1×2×23/4 2 3e 8 res=1×2×2×23/4 3 4e 16 res=1×2×2×2×23 3 o i a atteint sa dernière valeur5 3 16
CBGM (IUT-RT) Prog 1 Version 20/21 82 / 96
Boucle avec variable d’accumulation Accumulation multiplicative
Bilan
Conclusion : structure des programmes avec une variable d’accumulation
Un programme utilisant une variable d’accumulation doit toujours :1 initialiser la variable d’accumulation,2 programmer une structure répétitive qui actualise sa valeur.
La valeur finale de la variable est obtenue en sortie de boucle.
CBGM (IUT-RT) Prog 1 Version 20/21 83 / 96
Structures imbriquées Boucles et structures alternatives
Boucles et structures alternatives
Y Les instructions d’une boucle peuvent contenir des structures alternatives,avec l’indentation pour identifier les blocs d’instructions.
Exemple (Affichage des nombres impairs de 0 à 20)
1 for i in range(20):2 if i % 2 != 0:3 print(i, end=" ")4 else:5 print("-", end=" ")6 print("fin")
donne à l’exécution (20 itérations) :
- 1 - 3 - 5 - 7 - 9 - 11 - 13 - 15 - 17 - 19 fin
� PythonTutor
CBGM (IUT-RT) Prog 1 Version 20/21 84 / 96
Structures imbriquées Boucles imbriquées
Boucles imbriquées
Les instructions d’une boucle peuvent en contenir une autre : on parle deboucles imbriquées.
Exemple (Tracé d’un triangle d’étoiles)
1 for i in range(0, 3):2 ligne = ""3 for j in range(0, i+1):4 ligne += "* "5 # fin de la boucle sur j6 print(ligne)7 # fin de la boucle sur i
donne :
** ** * *
� Démo PyCharm, PythonTutor
Ligne Iter. sur i i Iter. sur j j ligne Commentaire1/2
1e 0
’’ i initialisé à 03/4 1e 0 ’* ’ j initialisé à 03 o j a atteint sa valeur max < 0+16 0 ’* ’ affichage1/2
2e 1
’’ i s’incrémente3/4 1e 0 ’* ’ j ré-initialisé à 03/4 2e 1 ’* * ’ j s’incrémente3 o j a atteint sa valeur max < 1+16 0 ’* * ’ affichage1/2
2e 3
’’ i s’incrémente3/4 1e 0 ’* ’ j ré-initialisé à 03/4 2e 1 ’* * ’ j s’incrémente3/4 3e 2 ’* * * ’ j s’incrémente3 o j a atteint sa valeur max < 2+16 0 ’* * * ’ affichage3 o i a atteint sa valeur max : fin de la boucle
CBGM (IUT-RT) Prog 1 Version 20/21 85 / 96
Chapitre 6
Fonctions
CBGM (IUT-RT) Prog 1 Version 20/21 86 / 96
Rappel : Fonction
Définition (Fonction)
Une fonction est un bloc d’instructions autonome décrit par une signature :
nom_module.nom_de_fonction(param1, param2, ..., paramN,param_nomme1=val1, ... param_nommeN=valN)
indiquant son nom (d’appel), son (éventuel) module, ses paramètresd’entrée obligatoires (positionnels) ou optionnels (nommés).Elle renvoie une unique valeur servant de résultat à la fonction. En l’absencede return, la fonction renvoie None.La déclaration d’une fonction s’appuie sur la syntaxe :
1 def nom_fonction(param1, ...):2 """Documentation"""3 instructions4 ...5 return valeur_retour | None
CBGM (IUT-RT) Prog 1 Version 20/21 87 / 96
Portée des variables dans une fonction Notion de portée locale
Rappel : contexte de nommage et mémoire
1 L’exécution d’un programme s’appuie sur :un contexte des paramètres/variables, propre à chaque fonctionla mémoire (stockant les valeurs) partagée par l’ensemble des fonctions.
2 Chaque appel à une fonction crée un contexte local :temporaire : il est recréé ("à neuf") à chaque nouvel appel à la fonction et esteffacé au retour (return) de la fonctionétanche : il n’y a pas d’interférences entre les contextes locaux de deuxappels (même si c’est la même fonction)économe en mémoire : les paramètres reçoivent une copie des référencesdes arguments (et non une copie des arguments)
3 On dit que la portée des variables d’une fonction est locale à lafonction : les variables n’existent que lors de l’appel à la fonction etpeuvent donc avoir le même nom que les variables d’une autre fonction(main compris) sans conflit
CBGM (IUT-RT) Prog 1 Version 20/21 88 / 96
Portée des variables dans une fonction Contexte local d’une fonction
Contexte local d’une fonction avec paramètres
Exemple (Contexte local d’une fonction avec paramètres)
1 def illustration(a, b):2 a = 33 res = a + b4 return res5
6 def main():7 a = 18 b = 29 res = illustration(a, b)
10 mais = a + b
Contextedu main
MémoireContexte deillustration
3
a 1 a
b 2 b
res5res
3mais
%
Appel : illustration()
return res
res diffère de res ;L’objet en mémoire, crée et renvoyé par la fonction, est celui récupérédans le res du main
Les paramètres a et b référencent les même objets que a et bToute réaffectation des objets désignés par les paramètres n’aurad’impact que dans la fonction
CBGM (IUT-RT) Prog 1 Version 20/21 89 / 96
Appel de fonctions Chaînage de fonctions
Chaînage de fonctions
Une fonction peut en appeler une autre : toutes deux auront leur proprereturn et leur propre contexte de nommage étanche.
Exemple (somme4, utilisant somme2, pour sommer ses 4 paramètres)
1 def somme2(a, b):2 total = a + b3 return total4
5 def somme4(a, b, c, d):6 res1 = somme2(a, b)7 res2 = somme2(c, d)8 res = res1 + res29 return res
somme4( , , , )a b c d
1 2 3 4
res1 3
res2 7
res 10
somme2( , )a
1
b
2
total 3
appel
return
somme2( , )a
3
b
4
total 7
appel
return
créant, lors d’un appel à somme4, 3 contexteslocaux. � PythonTutor
CBGM (IUT-RT) Prog 1 Version 20/21 90 / 96
Appel de fonctions Fonctions récursives
RécursivitéUne fonction peut s’appeler elle-même : elle est dit récursive ; o son codedoit obligatoirement prévoir une condition d’arrêt des récursions.
Exemple (Somme s(N) de tous les entiers de 0 jusqu’à N)
s(N) = 1 + 2 + ...+ (N − 1)︸ ︷︷ ︸s(N−1)
+N avec l’état
initial s(0) = 0 s’implémenterécursivement avec, par ex. pour l’appel àsommeN(4), 4 contextes locaux (dont 3appels récursifs à sommeN).
1 def sommeN( N ):2 if N == 0: # arrêt
recursion3 res = 0 # valeur4 else:5 sN_1 = sommeN( N-1 )6 res = sN_1 + N7 return res
sommeN( )N
3
res 7
sommeN( )N
2
res 3
sommeN( )N
1
res 1
sommeN( )N
0
res 0
appel appel appel
return return return
CBGM (IUT-RT) Prog 1 Version 20/21 91 / 96
Structure modulaire Modules fait-maison
Module
Définition (Module)
Un module est un fichier .py regroupant :des fonctionsun (éventuel) programme principal (fonction main)des constantes (variables globales au module) dont la valeur n’est pascensée être modifiée
Exécution vs import d’un module
Un module nom_module.py peut être :exécuté, avec la ligne de commande python nom_module.py, déclenchantl’exécution du main si le module inclut la directive :
1 if __name__=="__main__":2 main()
importé avec la syntaxe import nom_module, pour utiliser les fonctions qu’ildécrit
CBGM (IUT-RT) Prog 1 Version 20/21 92 / 96
Structure modulaire Constantes de module
Constantes de module
Définition (Constantes de module)
Une constante de module est une variable déclarée en dehors d’une fonctionet dont le nom est (par convention) en majuscule. Elle est accessible enlecture avec la syntaxe [nom_module.]NOM_CONSTANTE
Définition (LGI)
Python résout/trouve la valeur d’une variable en la cherchant, dans l’ordre :1 localement dans le bloc d’instructions de la fonction où elle est utilisée ;
s’il ne la trouve pas :2 globalement dans le fichier/module (hors fonctions et main), où elle est
utilisée ; s’il ne la trouve pas :3 en interne, parmi les objets standards Python (built-in).
On parle de résolution de nom par recherche LGI.
CBGM (IUT-RT) Prog 1 Version 20/21 93 / 96
Structure modulaire Constantes de module
Exemple
Exemple (Pi et ses arrondis)
1 import math2
3 # Constante de module4 PI_ARRONDI = 3.145
6 # Fonctions7 def degre2radian_imprecis( angle ):8 pi = 3 # variable locale9 return pi / 180 * angle
10
11 def degre2radian_arrondi( angle ):12 return PI_ARRONDI / 180 * angle13
14 def degre2radian_exact( angle ):15 return math.pi / 180 * angle
pi est locale à la fonctiondegre2radian_imprecis etn’existe que pour l’appel àcette fonctionPI_ARRONDI n’est pas locale àla fonctiondegre2radian_arrondi, maisest globale au module courant(c’est une constante demodule)math.pi fait référence à uneconstante de module déclaréedans math
CBGM (IUT-RT) Prog 1 Version 20/21 94 / 96
Les prototypages classiques de fonctions
Prototypages classiques des fonctions d’un module
Les fonctions forment trois grandes catégories (prototypages) :1 Les fonctions dédiées aux saisies clavier de l’utilisateur (cf. prog 2) :
qui n’ont en général pas de paramètrequi renvoient la valeur saisie
2 Les fonctions dédiées à l’affichage :qui peuvent avoir en paramètres des données à afficher,qui s’occupent de l’affichage console avec print,qui ont pour valeur de retour (return) None
3 Les fonctions dédiées aux calculs/traitements :qui ont des paramètres,qui ont une valeur de retour (return) et dépendante du traitement,qui n’ont pas de saisie-clavier avec input car ce sont les arguments d’appelqui dirigent l’évaluation de la fonctionne font pas d’affichage avec print (sauf pour aider au déboggage duprogramme)
L’affichage du résultat est alors fait, soit par le programme principal, soitpar une fonction dédiée à l’affichage.
CBGM (IUT-RT) Prog 1 Version 20/21 95 / 96
Les prototypages classiques de fonctions
Exemple des prototypages de fonctions
Exemple (Scipt qui, pour la suite un+1 = 2un + 1 avec u0 = 1, affiche la valeurdu terme de rang N donné en constante de module)
1 # Constante2 N = 5 # Rang choisi pour les calculs3
4 # Fonction dédiée à l’affichage de u_n et de n5 def affichage(u_n, n):6 print("u_", n, " vaut ", u_n, sep="")7
8 # Fonction dédiée au calcul du terme u_n, connaissant n9 def calcul_u_n( n ):
10 u = 1 # Valeur initiale u_011 for i in range(n):12 u = 2*u + 113 return u14
15 # Programme principal16 def main():17 u_N = calcul_u_n(N)18 affichage(u_N, N)
L’exécution donne par exemple :
u_5 vaut 63
CBGM (IUT-RT) Prog 1 Version 20/21 96 / 96