Programmation Python - Université Grenoble-Alpes -...
Transcript of Programmation Python - Université Grenoble-Alpes -...
Programmation Python
Remy CHOLLET*Cleo BARAS
Lorraine GOEURIOTJerome MARTIN
Mails : [email protected]
IUT Departement Reseaux & Telecommunications, 1ere annee
Version 17/18
CBGM (IUT-RT) Prog 1 Version 2017 1 / 97
Chapitre 1
Introduction
CBGM (IUT-RT) Prog 1 Version 2017 2 / 97
L’informatique en R&T Les modules d’informatique
L’informatique en R&T
Sem. Modules IntituleS1 M1105 Unix
M1103 Architecture des equipements informatiquesM1106 Initiation au developpement WebM1207 Programmation 1
S2 M2104 SGBDM2105 Web dynamiqueM2109 Gestion de projets informatiquesM2207 Programmation 2
S3 M3206 POOS4 M4206C Programmation sur mobiles
M4207 Autres applications informatiques
CBGM (IUT-RT) Prog 1 Version 2017 3 / 97
L’informatique en R&T Planning
M1207 - Programmation 1
ModalitesCours/TD : 1h + 7 × 2hTP : 2h + 6 × 2hEvaluation (semaine 3) : DS papier 1h30 ; DS machine 1h30
Planning des seancesSemaine CM/TD TP46 Introduction, variable, expression46 Prise en main de l’IDE47 Bases de la programmation48 Structures alternatives Structures alternatives49 Structures repetitives Structures alternatives50 Structures repetitives imbriquees Structures repetitives51 Fonctions Structures repetitives imbriquees2 Fonctions Fonctions2 Revision DS Fonctions3 DS le 17/01/18 Examen sur machine le 15/01/18
CBGM (IUT-RT) Prog 1 Version 2017 4 / 97
L’informatique en R&T Outils a disposition
Outils a 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 2017 5 / 97
Definition L’informatique
Informatique
Definition (Informatique (data processing), algorithme)
L’informatique est la science du traitement automatique (software) del’information (data), dont decoule des programmes qui implementent desalgorithmes a l’aide d’un langage de programmation.
DonneesProgramme(software) Resultats
Ordinateur
CBGM (IUT-RT) Prog 1 Version 2017 6 / 97
Definition L’informatique
Algorithme
Definition (Algorithme)
Un algorithme est la mise en œuvre d’une succession finie d’actionselementaires (instructions) pour resoudre un probleme ou obtenir unefonctionnalite.
Exemple (Des algorithmes)
Recette de cuisine, notice de montagePrise d’un medicament contre la touxResolution de ax2 + bx + c = 0Tri de donneesCryptographieRecherche d’un plus court cheminetc.
CBGM (IUT-RT) Prog 1 Version 2017 7 / 97
Definition L’informatique
Un exemple d’algorithme
Exemple (Prise d’un medicament contre la toux)
”En cas de toux, prendre, sauf avis contraire du medecin, uncomprime toutes les 4 heures, jusqu’a disparition des symptomes.Pour les enfants, un comprime toutes les 8 heures suffit.”
SI toux ET PAS d’avis contraire du medecin 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 symptomes FAIRE| | prendre un comprime| | attendre pendant le delai d’attente| FIN DE TANT QUEFIN DE SI
CBGM (IUT-RT) Prog 1 Version 2017 8 / 97
Definition Les langages de programmation
Langage de programmation
Definition (Langage de programmation)
Ensemble de caracteres, symboles, mots-cles et regles d’assemblage(equivalents au vocabulaire et a la grammaire d’une langue), utilise pourdonner des instructions a l’ordinateur.
Evolution des langages1 Langage machine de plus bas niveau puis assembleur (mnemonique,
macros, variables)2 Langage structure :
paradigmes de programmation : procedural, oriente objet, fonctionnel...compile : C, C#, C++, ObjectiveC, Pascal, Java...interprete : Shell, Tcl/Tk, Perl, Python, Ruby, JavaScript, Matlab...
3 Langage naturel SQL, Windev, 4D (BDD)
� wikipedia
CBGM (IUT-RT) Prog 1 Version 2017 9 / 97
Definition Les langages de programmation
Language compile vs interprete
2 approches1 Compilation : traduction d’un code source vers un code cible executable
code executable directement par l’OSBytecode executable par machine virtuelle (cf. Java au S3)
2 Interpretation : langage converti en bytecode ”a la volee” soitlecture et analyse d’une instruction (ou une expression)si correcte, l’executer (ou evaluer l’expression)passer a l’instruction suivante
Pour Python889
tout le code source est verifie syntaxiquementun bytecode est produit automatiquement pour execution dansl’interpreteur Python (via une machine virtuelle)le code peut aussi etre interprete en mode interactif
CBGM (IUT-RT) Prog 1 Version 2017 10 / 97
Definition Le langage Python
Python?
Cree par Guido van Rossum en 19901er objectif : un nouveau shellgrande communaute, usages industrialisesen progression ces dernieres annees (voir tiobe-index)Open source, large communaute, bonne portabiliteplutot haut niveau, plutot pragmatiqueCaracteristiques :
l’indentation comme syntaxetout est objet
CBGM (IUT-RT) Prog 1 Version 2017 11 / 97
Definition Le langage Python
Pourquoi Python?
Tres bonne expressiviteBon langage pour la pedagogieAspects modernes (iterateurs, comprehension, introspection...)Tres bon langage pour l’administration systemebibliotheques tres diverses (systeme, calcul, imagerie, SGBD, Web etc...)
CBGM (IUT-RT) Prog 1 Version 2017 12 / 97
Definition Le langage Python
Some Spam?
Some Spam?
� https://youtu.be/nZG6lQPQKlI
CBGM (IUT-RT) Prog 1 Version 2017 13 / 97
Definition Temoignage
Temoignage
Si un etudiant est comme moi, en difficulte, dans les matiere type� programmation �, il ne faut pas desesperer.
Nous pouvons comparer la progression d’un langageinformatique a l’apprentissage d’une langue etrangere. Les coursm’ont permis de comprendre les concepts generaux. Mais c’est lefait de pratiquer tous les jours qui m’a reellement permis deprogresser.
– Nathan R. 2016
CBGM (IUT-RT) Prog 1 Version 2017 14 / 97
Definition Pour aller plus loin ...
Bonnes pratiques
Qualites d’un logiciel
FiabiliteRobustesseLisibilite du code
PortabiliteMaintenabilitePerformance
Concretement, il faut :Utiliser des nommages pertinents dans le codeStructurer le code par des modules, des fonctions et aussi des classesDocumenter le code, le commenterTester unitairement le codeLimiter les dependances, chercher la simplicite et la clarte
CBGM (IUT-RT) Prog 1 Version 2017 15 / 97
Chapitre 2
Variables et expression
CBGM (IUT-RT) Prog 1 Version 2017 16 / 97
Variables Qu’est ce qu’une variable?
Variables
Definition (Variable)
Une variable designe un objet informatique dans une zone memoire. Elle :1 est designee par un identificateur, appele aussi nom, et lie a une
reference2 memorise une valeur, evoluant avec le flot d’instructions mais unique a
un instant donne3 presente un type, precisant la nature de la valeur qu’elle memorise
� Demo
Remarques : Une variable possede egalement :une duree de vie et une porteedes proprietes en tant qu’objet informatique decrit (dans les langages deprogrammation oriente objet comme Python) par une classe
CBGM (IUT-RT) Prog 1 Version 2017 17 / 97
Variables Qu’est ce qu’une variable?
Complements sur les variables889
Choix de l’identificateurL’identificateur est un nom :Í utilisant des lettres (sensibles a la casse), des chiffres ou _
ë interdisant les caracteres accentues et speciaux (comme #, @, etc.)ë interdisant les noms commencant par un nombreë interdisant les mots-cles de Python
Mots-cles Python interdits :
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 2017 18 / 97
Variables Type d’une variable
Type d’une variable
Definition (Type d’une variable)
Le type est la nature (la classe) de la valeur memorisee par la variable. Ilest :
defini a la creation de la variable ;dynamique, c’est-a-dire qu’il peut evoluer lors de l’execution duprogramme.
Quelques types (simples) de variables en Python
Nom Type (class) Exemple Remarquebooleen bool (boolean) False ; Trueentier int (integer) -2 ; 10 exprime en base 10 (par defaut),
-0b10 ; 0b1010 en binaire avec prefixe 0b,-0x2 ; 0xA en hexa avec prefixe 0x (ou 0X),-0o2 ; 0o12 en octal avec prefixe 0o (ou 0O)
flottant float 1.34 ; -0.6 avec le separateur .chaıne de caracteres str (string) "Spam" en la delimitant par ’ ou "
CBGM (IUT-RT) Prog 1 Version 2017 19 / 97
Variables Type d’une variable
Type d’une variable
Fonctions autour du type
Connaıtre le type d’une variable x : type(x)
type( 0 ) indique <class ’int’>
type( 0. ) indique <class ’float’>
type( ’Spam’ ) indique <class ’str’>
Types numeriques (attention aux problemes de precision !)889
Entiers signes : int de precision illimitee (tant que la memoire estdisponible)Decimaux : float de precision limitee (∈ [sys.float_info.minsys.float_info.max])Complexe : complex base sur les float. Par exemple : c=1+3j avec c.real
la partie reelle flottante et c.imag la partie imaginaire
CBGM (IUT-RT) Prog 1 Version 2017 20 / 97
Variables Affectation d’une variable
Declaration et affectation d’une variable
Variables du contexte de nommage et memoire
Les variables permettent d’acceder a des objets informatiques (une valeurd’un certain type). Python s’appuie donc sur deux ensembles differents : lecontexte (ou espace) de nommage et la memoire (vive). Ces deuxensembles sont liberes a la fin de l’execution d’un programme.
Declaration et affectation d’une variable : x=2
1 cree une zone memoire pour rangerl’objet de type entier 2 (class ’int’),
2 cherche si x existe dans le contexte denommage. Ne le trouvant pas, une entreex est ajoutee a ce contexte,
3 finalise l’affectation en associant x a 2
Contexte
x
Memoire
2
Attention au sens d’une affectation
ë Ecrire 2 = x n’a pas de sens !CBGM (IUT-RT) Prog 1 Version 2017 21 / 97
Variables Conversion de type
Transtypage (casting)
Fonctions de conversion de type
Les fonctions suivantes convertissent (si cela est possible) la valeur passeeen parametre dans le type du meme nom :
Fonction Traitementint(valeur) troncature de la valeur a l’entier le plus proche de zerofloat(valeur) conversion de la valeur en flottantstr(valeur) conversion de la valeur numerique en chaine
Exemple (Conversion de type)
a = int(3.0) ou a = int("3") sont equivalents a a = 3 avec a de type int
chaine = str(3.2) est equivalent a chaine="3.2" de type str
CBGM (IUT-RT) Prog 1 Version 2017 22 / 97
Expression Definitions
Expression
Definition (Expression, operateurs)
Une expression est une serie de calculs ayant pour resultat une valeurd’un certain type.Elle utilise des operateurs (+, -, *, ...) et des operandes (valeurs,variables, expressions).Les expressions exploitent l’espace memoire : la valeur de l’expression,si elle doit etre reutilisee dans la suite du programme, devra etre stockeedans (affectee a) une variable.
Exemple (Des expressions)
recuperation de la valeur de la variable x : xexpression arithmetique : 4/3 ou (x+2) % 5
Remarque : Python autorise des expressions melangeant des types lorsqu’ilssont homogenes uniquement (typage fort).
CBGM (IUT-RT) Prog 1 Version 2017 23 / 97
Expression Operateurs
Operateurs
Principaux operateurs des expressions
Symb. Signification Symb. Signification+ addition pour int, float ;
concatenation pour str* multiplication pour int, float ;
repetition pour str- soustraction pour int, float / division (decimale)% modulo (reste de la division) // division euclidienne** exposant : 3**2 vaut 9 not negation logiqueand intersection logique or union logique
Affectation composee
C’est une operation permettant de realiser en une seule etape une operationnormale et l’affectation de son resultat dans la variable servant de premieroperande. On suit la syntaxe : variable op= valeur .ou op est l’un des operateurs arithmetiques : +, -, *, /, %, //, **. Cette syntaxeest strictement equivalente a : variable = variable op valeur .
� DemoCBGM (IUT-RT) Prog 1 Version 2017 24 / 97
Expression Priorite des operateurs
Priorite des operateurs dans les expressions
Priorite des operateurs, par ordre croissant, avec groupement de gauche adroite si priorites egales
Priorite Operateur DescriptionBasse or ou logique
and et logiquenot non logique<, <=, >, >=, <>, !=, == comparaison| ou bit a bitˆ ou exclusif bit a bit& et bit a bit<<, >> decalage bit a bit+, - addition et soustraction*, /, //, % Multiplication, division, reste+x, -x, ˜x signe positif, signe negatif, non bit a bit** exposant
Haute (expression) expression delimitee par des parentheses
Remarque : en cas de doute, utilisez des parentheses
CBGM (IUT-RT) Prog 1 Version 2017 25 / 97
Instructions
Instructions
Definition (Instructions)
Une instruction est un ordre a executer par le programme; c’est une etapequi dicte a la machine ce qu’elle doit effectuer avant de passer a l’instructionsuivante. Par exemple :
affecter une valeur a une variableafficher une information a l’ecranrecuperer une saisie clavier faite par l’utilisateur
Executer une instruction implique d’evaluer des expressions.
Definition (Programme)
Un programme est une suite d’instructions, qui s’executent les unes apres lesautres - autrement dit sequentiellement.
CBGM (IUT-RT) Prog 1 Version 2017 26 / 97
Instructions Instructions d’affectation
Instructions d’affectation
Exemple (Des instructions d’affectation)
1 a = 32 b = a + 13 b += a4
Contexte Memoire
a 3
b 4
1
7
%
Ligne 1 : a ne faisant pas partie ducontexte, l’instruction declare la variable a
dans le contexte et lui affecte la valeur 3Ligne 2 : incrementation : evaluel’expression a + 1 et, puisque b ne faitpas partie du contexte, declare la variableb dans le contexte, et lui affecte leresultat (ici 4)
Ligne 3 : affectation composee equivalente a b = b + a : evaluel’expression b + a pour obtenir 7 ; procede ensuite a l’affectation : commeb est deja declaree dans le contexte, sa valeur est modifiee pour prendrecelle du resultat 7. L’objet 4 n’est plus reference et est efface par leramasse-miette.
CBGM (IUT-RT) Prog 1 Version 2017 27 / 97
Instructions Instructions de sortie : affichage console
Instruction de sorties : ecriture sur l’ecran
Ecriture vers l’ecran (ou affichage console) avec print
L’instruction qui demande au programme l’affichage (l’ecriture) d’une donneesur la console (l’ecran) est : print( valeur ). Les donnees peuvent etre detous types (int, float, str, etc.). Un retour chariot est ajoute par defaut a lafin de chaque appel a print
Exemple (Affichage de donnees (extrait de code))
1 msg = "Bonjour"2 valeur = 3.143 print( msg )4 print( valeur )5 print( "fin" )
1 print( "Bonjour" )2 print( 3.14 )3 print( "fin" )
donnent a l’affichageconsole :
Bonjour3.14fin
CBGM (IUT-RT) Prog 1 Version 2017 28 / 97
Instructions Instructions de sortie : affichage console
Variantes de print
1 print(donnee1, donnee2, ...) affiche, sur une meme ligne et separee(par defaut) par un espace, toutes les donnees passees en parametres.
Exemple (Affichage de donnees (extrait de code))
1 msg = "Bonjour"2 valeur = 3.143 print( msg, valeur)4 print( "fin" )
1 print( "Bonjour", 3.14)2 print( "fin" )
donnent a l’affichageconsole :
Bonjour 3.14fin
CBGM (IUT-RT) Prog 1 Version 2017 29 / 97
Instructions Instructions de sortie : affichage console
Variantes de print
2 print( donnee1, donnee2, ..., sep=chaine_sep, end=chaine_fin )
affiche les donnees :en les separant par la chaine_sep fournie dans le parametre (optionnel) sep(par defaut sep=" ")en terminant l’affichage par la chaine_fin precisee dans le parametre(optionnel) end (par defaut end="\n")
Exemple (Affichage de donnees (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 a l’affichageconsole :
Bonjour--3.14etBonjour 3.14>>fin
CBGM (IUT-RT) Prog 1 Version 2017 30 / 97
Instructions Instructions de sortie : affichage console
Variantes de print
3 print peut afficher la valeur d’expressions apres les avoir evaluees
Exemple (Affichage de valeurs de variables)
1 nbre_art = 52 prix_unitaire = 19.693 print( "total=", nbre_art*prix_unitaire)4 print( "(-) "*3 )5 print( str(nbre_art) + "x" + str(
prix_unitaire) + "=", "?")
donne a l’affichageconsole :
total= 98.45(-) (-) (-)5x19.69= ?
CBGM (IUT-RT) Prog 1 Version 2017 31 / 97
Instructions Instructions de sortie : affichage console
Formatage de chaıne
Formatage de chaıne
Le formatage permet de creer des chaınes de caracteres incorporant desdonnees (de divers types). Il peut etre fait avec la syntaxe :
1 pour une donnee : "une chaine formatee avec {}".format( donnee )
2 pour plusieurs donnees : "une chaine formatee avec {} et {} ... et {}
".format(donnee1, donnee2, ..., donneeN)"
Exemple (Affichage de valeurs de variables)
1 msg = "Hello"2 val = 3.143 chaine = "Say {}".format( msg )4 print( chaine )5 chaine = "{} Mr {}!".format( msg, val )6 print( chaine )
donne a l’affichageconsole :
Say HelloHello Mr 3.14!
CBGM (IUT-RT) Prog 1 Version 2017 32 / 97
Instructions Instructions de sortie : affichage console
Formatage de donnees au sein d’une chaineLa combinaison de {} et format peut aussi (cf. https://pyformat.info/) :
controler la precision dans l’affichage des variables numeriques (float)controler le nombre de caracteres de la console utilises pour l’affichage
Exemple (Quelques exemples classiques)
Variable Formatage Affichage dans la console
p=3.141592 "{}".format(p) 3 . 1 4 1 5 9 2
"{:.3f}".format(p) 3 . 1 4 1
"{:06.2f}".format(p) 0 0 3 . 1 4
s="test" "{}".format(s) t e s t
"{:>7}".format(s) t e s t
e=666 "{}".format(e) 6 6 6
"{:>5}".format(e) 6 6 6
"{:05d}".format(e) 0 0 6 6 6
CBGM (IUT-RT) Prog 1 Version 2017 33 / 97
Instructions Instructions de sortie : affichage console
Directives de formatage empruntees au C
Formatage de chaıne avec directives du C
Une autre syntaxe pour creer des donnees formatees est celle empruntee duC :I "une chaine formatee %format" % valeur pour une valeur a formaterI "une autre %format1 et %format2" % (valeur1, valeur2) pour deux
valeurs a formaterLes valeurs (ou variables) placees apres l’operateur de conversion % serontinserees dans la chaıne a l’emplacement balise par les specificateurs deconversion.
CBGM (IUT-RT) Prog 1 Version 2017 34 / 97
Instructions Instructions de sortie : affichage console
Exemples
Exemple (Formatage de chaınes)
avec un entier :
1 val = 102 print( "val vaut %d" % val )3 print( "val est affiche %04d" % val )
val vaut 10val est affiche 0010
avec un flottant :
1 print( "%f" % 1. )2 print( "%.3f" % 123. )3 print( "Mais aussi %010.3f" % 123.567 )
1.000000123.000Mais aussi 000123.567
avec deux donnees :
1 TC = 23.52 TF = TC*9./5+323 print( "%5.1f C" % TC, "= %5.1f F" % TF )4 print( "%5.1f C = %5.1f F" % (TC, TF) )
23.5 C = 74.3 F
CBGM (IUT-RT) Prog 1 Version 2017 35 / 97
Instructions Instruction d’entrees : lecture d’une saisie clavier
Instructions d’entree : lecture a partir du clavier
Lecture de caracteres saisis au clavierL’instruction chaine = input("tapez une chaine : ") :
1 affiche sur la console le message tapez une chaine :
2 capture les caracteres saisis au clavier jusqu’a l’appui sur Enter
3 les renvoient dans la variable chaine de type str.
Exemple (Saisie de donnees)
1 chaine = input("Saisir une chaine : ")2 print( chaine, type(chaine) )3 chaine = input("Un entier : ")4 print( chaine, type(chaine) )5 chaine = input("Une valeur : ")6 print( chaine, type(chaine) )
Saisir une chaine :toto
toto <class ’str’>Un entier : 1212 <class ’str’>Une valeur : -3.5-3.5 <class ’str’>
CBGM (IUT-RT) Prog 1 Version 2017 36 / 97
Instructions Instruction d’entrees : lecture d’une saisie clavier
Typage des donnees saisies au clavier
Typer des donnees acquises avec input peut se faire :1 en ajoutant un transtypage (int(), float(), ...) qui convertit les
caracteres renvoyes par input dans le type attendu :
Exemple (Input avec transtypage)
1 chaine = input("Un entier : ")2 nbre = int(chaine)3 print( nbre, type(nbre))4 chaine = input("Une valeur : ")5 val = float(chaine)6 print( val, type(val) )
Un entier : 1212 <type ’int’>Une valeur : -3.5-3.5 <type ’float’>
CBGM (IUT-RT) Prog 1 Version 2017 37 / 97
Instructions Instruction d’entrees : lecture d’une saisie clavier
Typer des donnees saisies au clavier
2 avec la fonction eval qui laisse a Python le choix de decider du type de lavariable le plus adequat en fonction de la saisie clavier
Exemple (Input avec choix d’un type)
1 chaine = input("Un entier : ")2 nbre = eval(chaine)3 print( nbre, type(nbre))4 chaine = input("Une valeur : ")5 val = eval(chaine)6 print( val, type(val) )7 chaine = input("Une autre valeur: ")8 val = eval(chaine)9 print( val, type(val) )
Un entier : 1212 <type ’int’>Une valeur : -3.5-3.5 <type ’float’>Un entier : 1212 <type ’int’>Une autre valeur: 12.12.0 <type ’float’>
Remarque : Si le transtypage ou l’evaluation de l’entree saisie est impossible,alors une exeption est levee.
CBGM (IUT-RT) Prog 1 Version 2017 38 / 97
Instructions Modules et fonctions
Modules et fonctions
Definition (Modules et fonctions)
Python propose un ensemble de fonctions servant a differents calculs ou adifferentes taches utiles et recurrentes dans un programme. Certaines de cesfonctions sont fournies (rangees, declarees) dans des bibliotheques(appelees modules).
Exemple (Quelques modules (cf. documentation))
Module Role Exemples de fonctionsBuilt-in int, float, absmath Calculs mathematiques cos, sin, exprandom Choix aleatoires rand, randomos, sys Interactions systemes chdir, getlogin, getpidturtle Fenetre graphique forward, goto
CBGM (IUT-RT) Prog 1 Version 2017 39 / 97
Instructions Modules et fonctions
Caracteristiques d’une fonction
Definition (Caracteristiques d’une fonction)
En plus d’un nom et d’un eventuel module, les fonctions peuvent :etre dependantes de parametresproduire un resultat, appele valeur de retour (de l’anglais return)
Exemple (Extrait de documentation de fonctions)
CBGM (IUT-RT) Prog 1 Version 2017 40 / 97
Instructions Modules et fonctions
Appel d’une fonction
Definition (Appel d’une fonction)
Pour appeler une fonction, c’est a dire evaluer son resultat pour des valeursde parametres donnees (appeles arguments), il faut :
importer son module (si necessaire) avec l’instruction : import module
appeler la fonction avec la synthaxe :I fonction si la fonction est declaree dans le contexte courantI module.fonction si la fonction appartient a un module importe
suivi de parenthesesindiquer dans les parentheses les arguments : chaque argument donneune valeur a chaque parametre de la fonction, dans le meme ordre quecelui de la declaration des parametres.
Cet appel se finit en renvoyant un resultat (une valeur), qui peut etre affectea une variable.
CBGM (IUT-RT) Prog 1 Version 2017 41 / 97
Instructions Modules et fonctions
Exemples d’appels
Exemple (Appel de fonction)
Pour sqrt( x ) dans le module math :
1 import math
1 res = math.sqrt( 3 )2 print( res )
1.7320508075688772
Pour la fonction max( a, b ) (qui n’appartient a aucun module) :
1 res = max( 1, 10 )2 print( res )
10
Pour la fonction getlogin() du module os, qui n’a pas de parametresmais est appele obligatoirement avec des parentheses :
1 import os
1 log = os.getlogin()2 print( log )
barasc
CBGM (IUT-RT) Prog 1 Version 2017 42 / 97
Programme Python
Programme Python
Definition (Programme Python)
Un programme Python est un fichierd’extension .py contenant des seriesd’instructions. Il possede un pointd’entree, qui est par convention lafonction main.Ce point d’entree permet a Python desavoir ou trouver la premiereinstruction a executer : c’est lapremiere instruction du main.
La structure d’un programme est :
1 #!/usr/bin/env python2 # -*- coding: UTF-8 -*-3 """4 Script: un_programme.py5 Auteur: pycharm6 Date: 01/09/20177 """8
9 # Programme principal10 def main():11 # Les instructions12 print("1er programme")13
14 # Fin du programme15
16 if __name__ == ’__main__’:17 main()
L’art de la tabulationAttention : pour faire partie du main, les instructions du programme doiventtoutes etre tabulees (d’une tabulation ou 4 espaces d’apres le PEP8).
CBGM (IUT-RT) Prog 1 Version 2017 43 / 97
Chapitre 3
Structures alternatives (ou conditionnelles)
CBGM (IUT-RT) Prog 1 Version 2017 44 / 97
Expressions booleennes Le type booleen
Le type booleen
Definition (Le type booleen)
Une variable de type booleen (bool) peut prendre uniquement deux valeurs :True (correspondant a vrai ou a la valeur binaire 1)False (correspondant a faux ou a la valeur binaire 0)
Remarque888
Toute variable peut etre transtypee en booleen avec la fonction bool(valeur) :toute valeur egale a 0 ou vide (ou None) est consideree comme False
tout le reste est vu comme True.Par defaut, b=bool() donne b=False
CBGM (IUT-RT) Prog 1 Version 2017 45 / 97
Expressions booleennes Expressions booleennes
Expressions booleennes
Operateurs de comparaison
Les expressions booleennes mettent en œuvre des operateurs decomparaison qui comparent deux donnees du meme type (numerique,chaıne) et s’evaluent en un booleen.
Les principaux operateurs de comparaison
Op. Signification Op. Signification== egal (meme valeur) != different> strictement superieur < strictement inferieur>= superieur ou egal <= inferieur ou egalb<x<B x est compris entre b et Bin appartenance a une liste
d’elementsnot in non appartenance a une
liste d’elementsisinstance(x, t) x est du type t? is egal (meme objet en
memoire)
CBGM (IUT-RT) Prog 1 Version 2017 46 / 97
Expressions booleennes Expressions booleennes
Exemples d’expressions booleennes
Exemple (Des expressions booleennes avec operateurs de comparaison)Condition Expression PythonLa variable prog1 est-elle egale a 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 superieure a 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 different 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)
TABLE – Des exemples d’expressions booleennes
Remarque : Les expressions booleennes peuvent bien sur servir a affecterune variable. Par exemple, l’instruction reponse = (x == 5) affecte reponse auresultat de la comparaison ”x est-il egal a 5?”
CBGM (IUT-RT) Prog 1 Version 2017 47 / 97
Expressions booleennes Expressions booleennes
Expressions booleennes
Operateurs booleens
Les expressions booleennes peuvent egalement mettre en oeuvre desoperateurs booleens entre expressions booleennes (souvent obtenuescomme resultat d’une comparaison entre deux valeurs).
Principaux operateurs booleens
Symb. Signification Symb. Significationor union logique pour les boolean and intersection logique pour les
boolean
not negation logique pour lesboolean
Remarque : Attention aux priorites des operateurs . Dans le doute, abuserdes parentheses qui ameliorent souvent la lisibilite !
CBGM (IUT-RT) Prog 1 Version 2017 48 / 97
Expressions booleennes Expressions booleennes
Operateurs booleens
Rappel : Table de verite des operateurs
and True False
True True False
False False False
or True False
True True True
False True False
not True False
False True
Exemple (Des conditions booleennes)Condition Expression PythonLa variable jour est-elle egale a ”lundi” et la variable annee (jour == "lundi") and (annee > 2000)
est-elle superieure a 2000?Le jour est-il dans le WE? (jour == "samedi") or (jour == "dimanche")
jour in ["samedi", "dimanche"]
La variable x est-elle differente 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 2017 49 / 97
Structure alternative elementaire : Si sinon Principe et syntaxe
Structure alternative ”Si ... sinon”
Structure alternative ”Si ... sinon”
# Debut 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 deroulement sequentiel
teste la condition_booleenne en evaluant si elle est True ou False.Si elle est True, alors le bloc d’instructions qui suit le if est execute ;Sinon , alors le bloc d’instruction qui suit le else est execute .
Une fois les instructions de la structure if/else executee, le programmecontinue ensuite son deroulement avec la premiere instruction suivante.
CBGM (IUT-RT) Prog 1 Version 2017 50 / 97
Structure alternative elementaire : Si sinon Principe et syntaxe
L’art de la tabulation
La tabulation comme identifiant des blocs d’instructions
C’est l’indentation (tabulation avec la touche −−→−−→ ) qui definit les blocsd’instructions en Python :
vue d’une structure alternativeseule :
if condition_booleenne:# Instructions si# la condition est vraie# ...
else:# Instructions si# la condition est fausse# ...
# suite_du_programme
−−→−−→
vue du programme principal :
def main():#...if condition_booleenne:
# Instructions si# la condition est vraie# ...
else:# Instructions si# la condition est fausse# ...
# suite_du_programme
−−→−−→
−−→−−→
CBGM (IUT-RT) Prog 1 Version 2017 51 / 97
Structure alternative elementaire : Si sinon Exemple
Exemple
Exemple (Alternative 1, si sinon)
Les instructions :
1 chaine_var = input("Saisir un entier: ")2 var = int(chaine_var)3 if var > 4:4 # Instructions si la condition est vraie5 print("oui: {} est superieur a 4".format(var))6 else:7 # Instructions si la condition est fausse8 print("non: {} est inferieur ou egal a 4".format(var))9 # Fin du si/sinon et suite du programme
10 print("fin")
donnent a l’execution :Cas 1 :
Saisir un entier: 5oui: 5 est superieur a4
fin
Cas 2 :
Saisir un entier: 3non: 3 est inferieur ou egal a 4fin
CBGM (IUT-RT) Prog 1 Version 2017 52 / 97
Structure conditionnelle elementaire : Si Principe et syntaxe
Structure conditionnelle SiLa structure conditionnelle ”si” peut etre vue comme un cas particulier del’alternative si ... sinon lorsqu’il n’y a pas d’instructions dans le cas sinon.
Structure conditionnelle ”Si”
if condition_booleenne:# Instructions si la condition est vraiinstruction...instruction
# Fin de la condition et suite du programmesuite_du_programme
uniquement si la condition est vraie
”omis” sila conditionest fausse
suite du deroulement sequentiel
teste la condition_booleenne en evaluant si elle est True ou False.Si elle est True alors le bloc d’instructions qui suit le if est execute.Sinon (si la condition est False) le bloc d’instructions qui suit le if n’est pasexecute.Dans les deux cas, le programme se poursuit avec la premiere instruction dela suite_du_programme.
CBGM (IUT-RT) Prog 1 Version 2017 53 / 97
Structure conditionnelle elementaire : Si Exemple
Exemple
Exemple (Alternative 2, si)
Les instructions :
1 chaine_var = input("Saisir un nombre: ")2 var = float(chaine_var)3 if var < 0:4 # Instructions si la condition est vrai5 var = -var6 # Fin de la condition et suite du programme7 print("Sa valeur absolue est {}".format(var))8 print("fin")
donnent a l’execution :Cas 1 :
Saisir un nombre: 5Sa valeur absolue est 5fin
Cas 2 :
Saisir un nombre: -2Sa valeur absolue est 2fin
CBGM (IUT-RT) Prog 1 Version 2017 54 / 97
Structure alternative multiple : si ... ou si ... sinon Principe et syntaxe
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’execute si la condition 1 est True
s’execute si la condition 1 est Falseet la condition 2 est True
s’execute si les conditions 1 et 2sont False
Remarques :Le bloc elif peut apparaıtre autant de fois que l’on souhaite tester deconditions alternativesDes que l’une des conditions booleennes est True alors les conditionstestees dans les elif qui suivent ne sont plus evaluees et le programmepasse a la suite du programmeLe bloc else est optionnelCBGM (IUT-RT) Prog 1 Version 2017 55 / 97
Structure alternative multiple : si ... ou si ... sinon Exemple
Alternative Si ... ou si ... sinon
Exemple (Alternative 3, si ... ou si ... sinon)
1 chaine_nombre = input("Un nombre: ")2 nombre = float(chaine_nombre)3 if nombre < 0:4 print(nombre, "est negatif")5 elif nombre > 0:6 print(nombre, "est positif")7 else:8 print(nombre, "est nul")9 print("fin")
donnent a l’execution :Cas 1 :
Un nombre: 22 est positiffin
Cas 2 :
Un nombre: -3-3 est negatiffin
Cas 3 :
Un nombre: 00 est nulfin
CBGM (IUT-RT) Prog 1 Version 2017 56 / 97
Structures alternatives imbriquees
Structures alternatives imbriqueesLes structures alternatives peuvent etre imbriquees les unes dans les autresautant de fois qu’on le souhaite.
Exemple (Alternative 4, le meme test du signe avec des structuresalternatives imbriquees)
1 chaine_nombre = input("Un nombre: ")2 nombre = float(chaine_nombre)3 if nombre >= 0:4 if nombre > 0:5 print(nombre, "est positif")6 else:7 print(nombre, "est_nul")8 # fin du test nombre >09 else: # nombre <0
10 print(nombre, "est negatif")11 # fin du test nombre >= 0:12 print("fin")
Remarque : La encore, c’est l’indentation qui permet d’interpreter les blocsd’instructions.
CBGM (IUT-RT) Prog 1 Version 2017 57 / 97
Structures alternatives imbriquees Bilan
Une meme programme, differentes structuresalternatives
Exemple (Algo)
Une UE contient 2 modules : M1 et M2.L’UE est valide si les notes aux deux modules sont superieures a 10Il y a rattrapage si un seul des modules a une note superieure a 10Si les deux notes sont inferieures a 10, l’UE n’est pas validee
Ici, les variables m1 et m2 representent la note obtenue a chaque module
CBGM (IUT-RT) Prog 1 Version 2017 58 / 97
Structures alternatives imbriquees Bilan
Une meme programme, differentes structuresalternatives
Les trois implementations suivantes sont equivalentes :1 Avec 2 structures si sinon imbriquees :
1 if m1 >= 10 and m2 >= 10:2 print("valide")3 else: # Donc si (m1<10 or m2<10)4 if m1 >= 10 or m2 >= 10:5 print("rattrapage")6 else: # Donc si (m1<10 and m2<10)7 print("refuse")
2 Avec une structure si ou si sinon :
1 if m1 >= 10 and m2 >= 10:2 print("valide")3 elif m1 >= 10 or m2 >= 10: # et si (m1<10 or m2<10)4 print("rattrapage")5 else: # donc si (m1<10 and m2<10)6 print("refuse")
CBGM (IUT-RT) Prog 1 Version 2017 59 / 97
Structures alternatives imbriquees Bilan
Une meme programme, differentes structuresalternatives
3 Avec des conditions simples :
1 if m1 >= 10:2 if m2 >= 10: # et m1>=103 print("valide")4 else: # donc si m1>=10 et m2<105 print("rattrapage")6 else: # donc si m1<107 if m2 >= 10: # et m1<108 print("rattrapage")9 else: # donc si m1<10 et m2<10
10 print("refuse")
CBGM (IUT-RT) Prog 1 Version 2017 60 / 97
Chapitre 4
Structures repetitives
CBGM (IUT-RT) Prog 1 Version 2017 61 / 97
Principes des structures repetitives
Structure repetitive
Definition (Structure repetitive)
Une structure repetitive est un bloc d’instructions parcouru un certainnombre de fois (de 0 a une infinite).
Boucle while
Les boucles while/tant que repetent une serie d’instructions tant qu’unecondition est verifiee ; la condition est une expression booleenne quis’ecrit de la meme facon que dans les structures alternatives.
Boucle for
En pratique, le nombre de repetitions est tres souvent connu par leprogrammeur (parcours des elements d’une liste, repetition d’une memeaction, ...) ; on leur prefere une syntaxe plus simple appelee boucle for.
CBGM (IUT-RT) Prog 1 Version 2017 62 / 97
Boucle for Le compteur d’iteration
Boucle for
Definition (Boucle for)
Pour repeter un bloc d’instructions N fois, une boucle for utilise un compteurd’iteration :
for compteur in range( N ) :instruction # Debut du bloc a repeter...instruction
# Fin du forsuite_du_programme
Une iteration est une execution (ou une repetition) du bloc d’instructionsLe compteur s’initialise a 0 ; apres chaque iteration, il augmente de 1.Lorsqu’il atteint N, le bloc d’instructions a ete execute N fois - il n’est plusexecute et le programme passe aux instructions qui suivent le bloc
CBGM (IUT-RT) Prog 1 Version 2017 63 / 97
Boucle for Repetition
Une repetition simple
Exemple (Boucle 1, iterant le meme affichage 3 fois)
Les instructions suivantes :
1 for i in range(3):2 print("*", end=" ")3 print("fin")
iterent 3 fois l’affichage de * etdonnent :
* * * fin
� Demo PyCharm, PythonTutor
Ligne i Affichage Commentaire1 0 Initialisation du compteur a 02 0 * Fin de la 1ere iter. de boucle1 1 *
2 1 * * Fin de la 2eme iter. de boucle1 2 * *
2 2 * * * Fin de la 3eme iter. de boucle1 2 * * * Le compteur atteint le nbre d’iter. voulu3 2 * * * fin
CBGM (IUT-RT) Prog 1 Version 2017 64 / 97
Boucle for Repetition en utilisant le compteur de boucle
Une repetition utilisant le compteur de boucle
Le compteur de boucle, une variable comme une autre ...
Le compteur peut etre utilise dans les instructions de la boucle pour fairevarier leurs resultats d’une iteration a une autre
Exemple (Boucle 2, affichage des nombres de 2 jusqu’a 6 (exclu))
1 for i in range(4):2 print(i + 2, end=" ")3 print("fin")
donnent � Demo PyCharm,PythonTutor :
2 3 4 5 fin
Ligne i i+2 Affichage Commentaire1 0 Initialisation du compteur a 02 0 2 2 Fin de la 1ere iter. de boucle1 1 2
2 1 3 2 3 Fin de la 2eme iter. de boucle1 2 2 3
2 2 4 2 3 4 Fin de la 3eme iter. de boucle1 3 2 3 4
2 3 5 2 3 4 5 Fin de la 4eme iter. de boucle1 3 2 3 4 5 Le compteur a atteint le nbre d’iter. voulu3 3 2 3 4 5 fin
CBGM (IUT-RT) Prog 1 Version 2017 65 / 97
Boucle for Repetition en utilisant le compteur de boucle
Une repetition modifiant le compteur de boucle
... mais ë attention : le compteur de boucle ne doit en general pas etremodifie par les instructions de la boucle
Les valeurs du compteur sont pre-calculees au 1ere passage dans la bouclepour aller de 0 a N. Quelque soient les modifications faites sur le compteurdans le bloc d’instruction, chaque nouvelle iteration donne au compteur laprochaine valeur pre-calculee.
CBGM (IUT-RT) Prog 1 Version 2017 66 / 97
Boucle for Repetition en utilisant le compteur de boucle
Exemple
Exemple (Boucle 3, ne pas modifier le compteur dans la boucle)
Les instructions :
1 for i in range(2):2 print(i, end=" ") # affichage3 i = 0 # raz du compteur4 print("fin")
donnent � Demo PyCharm,PythonTutor :
0 1 fin
Ligne i Affichage1 0 Initialisation du compteur a 02 0 0
3 0 0 Fin de la 1ere iter. de boucle1 1 0
2 1 0 1
3 0 0 1 Fin de la 2eme iter. de boucle1 0 0 1 Le compteur atteint le nbre d’iter. voulu4 0 0 1 fin
CBGM (IUT-RT) Prog 1 Version 2017 67 / 97
Boucle for Valeur initiale du compteur
Boucle for avec valeur initiale differente de 0
Definition (Boucle for avec valeur initiale non nulle)
1 for compteur in range(val_ini, val_fin_exclue) :2 instructions
Le nombre d’iterations est alors de val_fin_exclue - val_ini ; la boucles’arrete lorsque le compteur atteint la valeur val_fin_exclue.
Exemple (Boucle 4, affichage des nombres de 2 jusqu’a 5 (exclu))
1 for i in range(2, 5):2 print(i, end=" ")3 print("fin")
donnent � Demo PyCharm,Demo PythonTutor :
2 3 4 fin
Ligne i Affichage Commentaire1 2 Initialisation du compteur a 22 2 2 Fin de la 1ere iter. de boucle1 3 2
2 3 2 3 Fin de la 2eme iter. de boucle1 4 2 3
2 4 2 3 4 Fin de la 3eme iter. de boucle1 4 2 3 4 Le compteur a atteint sa valeur finale3 4 2 3 4 fin
CBGM (IUT-RT) Prog 1 Version 2017 68 / 97
Boucle for Increment du compteur
Boucle for avec increment different de 1
Definition (Boucle for avec un increment du compteur different de 1)
1 for compteur in range(val_ini, val_fin_exclue, increment) :2 instructions
initialise le compteur a la val_ini et a chaque iteration augmente la valeur ducompteur de increment jusqu’a ce qu’il egale ou depasse val_fin_exclue
Exemple (Boucle 5, affichage des nombres pairs de 2 jusqu’a 8 (exclu))
1 for i in range(2, 8, 2):2 print(i, end=" ")3 print("fin")
donne � Demo PyCharm,PythonTutor :
2 4 6 fin
Ligne i Affichage Commentaire1 2 Initialisation du compteur a 22 2 2 Fin de la 1ere iter. de boucle1 4 2
2 4 2 4 Fin de la 2eme iter. de boucle1 6 2 4
2 6 2 4 6 Fin de la 3eme iter. de boucle1 6 2 4 6 Le compteur atteint sa valeur max.3 6 2 4 6 fin
CBGM (IUT-RT) Prog 1 Version 2017 69 / 97
Boucle while La condition de boucle
Boucle while
Definition (Boucle while)
Une boucle while repete un bloc d’instructions tant qu’une conditionbooleenne est verifiee :
1 initialisation_condition2 while condition [== True] :3 instruction4 ...5 modification_condition6 suite_du_programme
Y 3 etapes fondamentales :1 Initialisation de la condition2 Test de la condition a chaque
iteration de la boucle3 Modification du contexte (de la
condition) a chaque iteration
Des que la condition n’est plus vraie, le programme se poursuit avec lesinstructions qui suivent le bloc repetitif
Ces boucles sont particulierement utiles lorsque le nombre d’iterations n’estpas connu a l’avance comme par exemple lorsqu’elles dependent d’une actionde l’utilisateur ou du resultat d’un calcul fait par les instructions de boucle.
CBGM (IUT-RT) Prog 1 Version 2017 70 / 97
Boucle while Repetition dependant d’une saisie utilisateur
Verification d’une saisie clavier
Exemple (Verification d’une saisie clavier)
Les programmes suivants imposent a un utilisateur une saisie clavier valant’O’ ou ’N’ a.Ils utilisent pour condition de boucle la variable rep, donnant le resultat de lasaisie utilisateur, comparee aux valeurs attendues.Deux types d’initialisation peuvent etre envisagees :
1 rep = input("Tapez O/N ") qui realise une premiere saisie avant test2 rep = "" qui affecte une valeur garantissant l’entree dans la boucle.
a. Rappel : Python est sensible a la casse ; ’O’ n’est donc pas le meme caractereque ’o’
CBGM (IUT-RT) Prog 1 Version 2017 71 / 97
Boucle while Repetition dependant d’une saisie utilisateur
Verification d’une saisie clavier
Exemple (Boucle 1&2, verification d’une saisie clavier)
Variante 1 :
1 rep = input("Tapez O/N ? ") # Initialisation2 while not (rep == "O" or rep == "N"): # Condition de boucle3 rep = input("O/N svp; recommencez : ") # Modif. de la variable4 print("fin")
Variante 2 :
1 rep = "" # Autre initialisation2 while not (rep == "O" or rep == "N"): # Meme condition3 rep = input("Tapez O/N ? ") # Modif. de la variable4 print("fin")
donnent a l’execution pour les meme saisies de l’utilisateur :pour la variante 1 (2 passagesdans la boucle) :
Tapez O/N iO/N svp; recommencez : pO/N svp; recommencez : Ofin
pour la variante 2 (3 passagesdans la boucle) :
Tapez O/N ? iTapez O/N ? pTapez O/N ? Ofin
� Demo PyCharm
CBGM (IUT-RT) Prog 1 Version 2017 72 / 97
Equivalence boucles for/while
Equivalence for/while
L’art du compteur d’iteration
Lorsque le nombre d’iterations est connu et qu’on peut le denombrer avec uncompteur d’iteration allant d’une valeur ini a une valeur fin ens’incrementant a chaque iteration de inc, les structures repetitives peuventfinalement s’ecrire indifferemment avec une boucle for ou une boucle while :
for compteur in range(ini, fin, inc) :
instruction...
suite_du_programme
compteur = iniwhile compteur < fin :
instruction...compteur += inc
suite_du_programme
CBGM (IUT-RT) Prog 1 Version 2017 73 / 97
Equivalence boucles for/while
Nombres impairs avec for et while
Exemple (Boucle 6&3, affichage des nombres impairs de 0 a 20)
Avec une boucle for :
1 for i in range(1, 20, 2):2 print(i, end=" ")3 print("fin")
Avec une boucle while :
1 i = 12 while i < 20:3 print(i, end=" ")4 i = i + 25 print("fin")
Ils donnent tous les deux a l’execution :
1 3 5 7 9 11 13 15 17 19 fin
avec 10 iterations pour chaque boucle
� (for) Demo PyCharm, PythonTutor� (while) Demo PyCharm, PythonTutor
CBGM (IUT-RT) Prog 1 Version 2017 74 / 97
Boucles et structures alternatives
Boucles et structures alternativesY Les instructions d’une boucle peuvent contenir des structuresalternatives... C’est toujours l’indentation qui permet d’identifier les blocsd’instructions : ici les instructions du if sont indentees 1 fois par rapport au if
qui lui-meme est indente 1 fois par rapport au for.
Exemple (Boucle 7, affichage des nombres impairs de 0 a 10)
1 for i in range(20):2 if (i % 2) != 0:3 print(i, end=" ")4 else:5 print("-", end=" ")6 print("fin")
donne a l’execution :
- 1 - 3 - 5 - 7 - 9 - 11 - 13 - 15 - 17 - 19 fin
avec 20 iterations
� Demo PyCharm, PythonTutor
CBGM (IUT-RT) Prog 1 Version 2017 75 / 97
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 a chaque iteration dans le bloc d’instruction dela boucle.L’actualisation peut etre : l’ajout a la variable d’une valeur (nombre ouchaine de caracteres), la multiplication de la variable par une valeur, ...Le choix du type de boucle (for ou while) depend de l’application viseetoujours dans l’idee qu’elle conduit (ou non) a un nombre d’iterationsconnu
CBGM (IUT-RT) Prog 1 Version 2017 76 / 97
Boucle avec variable d’accumulation Accumulation additive
Exemple 1 : une variable d’accumulation additive
Exemple (Boucle 1, solde d’un compte bancaire apres un nombre fixe demois)
Application : afficher le solde d’un compte bancaire initialement egal a 0, surlequel est verse un montant fixe de 50 euros tous les mois, apres 4 ans defonctionnement :
Variable d’accumulation : le soldeBoucle : for car le nombre de mois (ici 4*12) est connu
1 solde = 0 # Initialisation2 for mois in range(1, 4 * 12):3 solde = solde + 504 print("solde final :", solde)5 print("fin")
donne a l’execution � Demo PyCharm, PythonTutor :
solde final : 2350
Y Il n’y a pas trace des valeurs intermediaires du solde (cf. listes en Prog2)CBGM (IUT-RT) Prog 1 Version 2017 77 / 97
Boucle avec variable d’accumulation Accumulation additive
Exemple 2 : une variable d’accumulation additive
Exemple (Boucle 2, quand pourrais-je avoir un iPhone?)
Application : partant d’un livret de 50 euros, sur lequel est vire 200 euroschaque annee et avec 0.75% d’interet, combien d’annee faut-il a son titulairepour acheter un iPhone?
Variable d’accumulation : le solde avec ajout des interets et du versementa chaque iterationLa boucle : while avec un compteur d’annees
1 solde = 502 annee = 03 while solde < 700:4 solde = solde*(1+0.75/100)+2005 annee = annee + 16 print("Nombre d’annees :", annee)7 print("Solde :", solde)
donne a l’execution :
Nbre d’annees : 4Solde : 860.5620439082031
� Demo PyCharm,PythonTutor
Le nombre d’annees est d’ailleurs le nombre d’iterations de la boucle while.
CBGM (IUT-RT) Prog 1 Version 2017 78 / 97
Boucle avec variable d’accumulation Accumulation additive
Exemple 3 : avec variable d’accumulation additive
Exemple (Boucle 3, calcul de la somme de tous les entiers de 1 jusqu’a 36(inclus))
1 somme = 0 # Initialisation2 for i in range(1, 36 + 1):3 somme = somme + i4 print("somme finale :", somme)
donne :
somme finale : 666
� Demo PyCharm, PythonTutor
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 repetitive qui actualise la valeur de la variable
d’accumulation.La valeur finale de la variable est obtenue en sortie de boucle.
CBGM (IUT-RT) Prog 1 Version 2017 79 / 97
Boucle avec variable d’accumulation Accumulation multiplicative
Exemple avec variable d’accumulation multiplicative
Exemple (Boucle 4, calcul iteratif d’une puissance)
Le programme suivant calcule24 dans res en utilisant le faitque 24 = 2× 2× 2× 2 ; resetant modifiee paraccumulation de multiplication,sa valeur initiale sera donc 1.
1 res = 12 i = 13 while i <= 4:4 res = res * 25 i = i + 16 print("2ˆ4 vaut", res)
� Demo PyCharm,PythonTutor
Ligne i i<=4? res calcul commentaire1-2 1 13 1 True 1 1er iteration
4-5 2 True 2 1*23 2 True 2 1*2 2eme iteration
4-5 3 True 4 1*2*23 3 True 4 1*2*2 3eme iteration
4-5 4 True 8 1*2*2*23 4 True 8 1*2*2*2 4eme iteration
4-5 5 True 16 1*2*2*2*23 5 False 16 1*2*2*2*26 5 False 16 1*2*2*2*2
CBGM (IUT-RT) Prog 1 Version 2017 80 / 97
Boucles imbriquees
Boucles imbriquees
Exemple (Trace d’un triangle d’etoiles)
1 for i in range(2, 4):2 for j in range(1, i):3 print("*", end=" ")4 print("")
donne :
** *
� Demo PyCharm, PythonTutor
Ligne i j Aff. Commentaire1 2 i initialise a 22 2 1 j initialise a 13 2 1 * Fin de la 1ere iter. de la boucle sur j2 2 1 j atteint sa valeur max.4 2 1 \n Fin de la 1ere iter. de la boucle sur i1 3 1 increment sur i2 3 1 j initialise a 13 3 1 * Fin de la 1ere iter. de la boucle sur j2 3 2 increment sur j3 3 2 * Fin de la 2eme iter. de la boucle sur j2 3 2 j atteint sa valeur maximale4 3 2 \n Fin de la 2eme iter. de la boucle sur i1 3 2 i atteint sa valeur max.
CBGM (IUT-RT) Prog 1 Version 2017 81 / 97
Chapitre 5
Fonctions
CBGM (IUT-RT) Prog 1 Version 2017 82 / 97
Fonctions Definition
Fonction I
Definition (Fonction)
Une fonction est un bloc/une suite d’instructions autonome qui decrit unetache dans le but de structurer le programme en taches simples.Elle :
1 possede un nom pour etre appelee plusieurs fois,2 des parametres d’entree a servant a faire varier les calculs ; ses
parametres sont identifies par un nom et un ordre,3 renvoie une unique valeur (dependante ou non des parametres) servant
de resultat a la fonction.Elle se decrit par une signature de la formenom_de_fonction(param1, param2, ..., paramN)
a. Python gere des parametres optionnels (hors du cadre de ce cours)
CBGM (IUT-RT) Prog 1 Version 2017 83 / 97
Fonctions Definition
Fonction II
Exemple (Des fonctions)
cos(x) est la fonction dont le nom est cos ; elle a un parametre x etretourne la valeur de cos(x).max(a,b) est la fonction dont le nom est max ; elle a deux parametres a et bet retourne la valeur la plus grande parmi a et b.
CBGM (IUT-RT) Prog 1 Version 2017 84 / 97
Fonctions Syntaxe de declaration d’une fonction
Declaration d’une fonction
Elements pour la declaration d’une fonction1 Nom de la fonction : identificateur explicite2 Parametres : liste de parametres d’entree-sortie de l’algorithme3 Preconditions (optionnel) : des expressions booleennes qui precisent les
conditions d’application de l’algorithme (888)4 Description (optionnel mais d’usage obligatoire) : une documentation de
l’algorithme5 Code : sequence d’instruction necessaire a la resolution du probleme6 Retour (ou renvoi) : la valeur renvoyee
CBGM (IUT-RT) Prog 1 Version 2017 85 / 97
Fonctions Syntaxe de declaration d’une fonction
Syntaxe de declaration
Syntaxe de declaration
def nom(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 definit le bloc d’instructions de la fonctionl’execution de return stoppe le flux d’instructions dans une fonction etforce la sortie de la fonctionsi return n’est suivi d’aucune valeur, alors la fonction renvoie None
CBGM (IUT-RT) Prog 1 Version 2017 86 / 97
Exemples de fonctions Fonction a un parametre
Exemple d’une fonction a un parametre
Exemple (Declaration de la fonction factorielle)
La fonction factorielle (avec son unique parametre) est declaree par :
1 def factorielle(n):2 """Calcule et renvoie la factorielle du parametre entier positif n,
valant n!"""3 res = 14 for i in range(1, n+1):5 res *= i6 return res # Valeur de retour
et peut etre appellee avec :
1 res = factorielle(4)2 print("4! vaut :", res)3 res = factorielle(3)4 print("3! vaut :", res)
ce qui donne� Demo PyCharm,PythonTutor :
4! vaut : 243! vaut : 6
CBGM (IUT-RT) Prog 1 Version 2017 87 / 97
Exemples de fonctions Fonction a deux parametres
Exemple d’une fonction a deux parametres
Exemple (La fonction somme2)
La fonction somme2 (avec ses deux parametres a et b) est declaree par :
1 def somme2(a, b):2 """Calcule et renvoie la somme de deux nombres (ou de deux chaines)
a et b"""3 total = a + b4 return total
Elle peut etre appelee avec :
1 res = somme2(10, 2)2 print("10+2 vaut :", res)3 res = somme2(’a’, ’b’)4 print("a+b vaut :", res)
ce qui donne� DemoPyCharm,PythonTutor :
10+2 vaut : 12a+b vaut : ab
Remarque FFF : cette fonction est un exemple de genericite puisqu’ellepeut etre utilisee avec n’importe quel type d’objets tant que l’addition + estdefinie.
CBGM (IUT-RT) Prog 1 Version 2017 88 / 97
Exemples de fonctions Fonction a plusieurs valeurs de retour
Exemple d’une fonction a plusieurs return
L’instruction return peut apparaıtre plusieurs fois, mais une seule seraevaluee.
Exemple (La fonction strctmax avec differentes instructions return)
1 def strctmax(a, b):2 """Retourne le parametre strictement le plus grand, None sinon"""3 if a > b:4 return a5 elif b > a:6 return b7 else: # si a == b8 return
Elle peut etre appelee avec :
1 res = strctmax(1, 2)2 print("strctmax de 1 et 2 :", res)3 res = strctmax(3, 1)4 print("strctmax de 3 et 1 :", res)5 res = strctmax(4, 4)6 print("strctmax de 4 et 4 :", res)
ce qui donne� DemoPyCharm, PythonTutor :
strctmax de 1 et 2 : 2strctmax de 3 et 1 : 3strctmax de 4 et 4 :None
CBGM (IUT-RT) Prog 1 Version 2017 89 / 97
Portee des variables dans une fonction Notion de portee locale
Rappel : Contexte de nommage et memoire
1 L’execution d’un programme s’appuie sur un contexte (de nommage) desvariables et sur la memoire (vive) qui stocke leur valeur.
2 Le programme principal utilise le contexte principal3 Un appel a une fonction cree un contexte local (qui lui est propre), dans
lequel sont declares les parametres et les variables de la fonction :Ce contexte local est efface (n’existe plus) au retour (return) de la fonctionIl est recree (”a neuf”) a chaque nouvel appel de la fonctionLes parametres recoivent une copie de la reference des arguments
4 Les contextes principal et local sont completement separes, de sortequ’il n’y a pas d’interferences entre eux : on dit alors que la portee desvariables d’une fonction est locale a la fonction (c’est a dire lesvariables n’existent que lors de l’appel a la fonction - elles peuvent doncavoir le meme nom que des variables du programme principal sansconflit)
5 La memoire est partagee par le programme principal et la (les)fonction(s)
CBGM (IUT-RT) Prog 1 Version 2017 90 / 97
Portee des variables dans une fonction Contexte local d’une fonction
Contexte local d’une fonction sans parametre
Exemple
Soit la fonction :
1 def puissance() :2 nbr = 33 puiss = 24 res = nbr ** puiss5 return res
appellee dans le programmeprincipal avec :
1 nbr = 12 res = puissance()
Contexteprincipal Memoire
nbr 1
Contextelocal
Appel : puissance()
nbr3
puiss2
res9res
return res
Le contexte de la fonction n’existe qu’au moment de son evaluation : lavariable locale nbr differe de nbr, au meme titre que res differe de res.L’objet en memoire, renvoye par la fonction, est celui recupere dans leprogramme principal (et donc ici affecte a res)
CBGM (IUT-RT) Prog 1 Version 2017 91 / 97
Portee des variables dans une fonction Cas des parametres
Contexte local d’une fonction avec parametres
Exemple
Soit :
1 def somme( a, b ) :2 a = 33 res = a + b4 return res
appelee avec :
1 a = 12 b = 23 res = somme( a, b )4 mais = a + b
Contexteprincipal Memoire
Contextelocal
3
a 1 a
b 2 b
res5res
3mais
%
Appel : somme()
return res
Lors de l’appel, les parametres a et b (n’existant que dans le contextelocal) referencent les meme objets que a et btoute reaffectation des objets designes par les parametres n’aurad’impact que dans la fonction
CBGM (IUT-RT) Prog 1 Version 2017 92 / 97
Chaınage de fonctions
Chainage de fonctionsUne fonction peut en appeler une autre : toutes deux auront leur proprereturn.
Exemple (La fonction somme4)
La fonction somme4 utilise somme2 pour sommer ses 4 parametres :
1 def somme4(a, b, c, d):2 """Calcule la somme des 4
parametres en utilisantsomme2"""
3 res1 = somme2(a, b)4 res2 = somme2(c, d)5 res = somme2(res1, res2)6 return res
1 def somme2(a, b):2 """Calcule et renvoie la
somme de deux nombres (ou dedeux chaines) a et b"""
3 total = a + b4 return total
Elle peut etre appelee pour differents calculsavec :
1 res = somme4(1, 2, 3, 4)2 print("1+2+3+4 :", res)3 res = somme4(’a’, ’b’, ’c’, ’d’)4 print("a+b+c+d :", res)
ce qui donne� DemoPyCharm, PythonTutor :
1+2+3+4 : 10a+b+c+d : abcd
CBGM (IUT-RT) Prog 1 Version 2017 93 / 97
Les prototypages classiques de fonctions
Les prototypages classiques de fonctions
Les fonctions forment trois grandes categories (prototypages) :1 Les fonctions dediees aux saisies clavier de l’utilisateur, qui :
n’ont en general pas de parametrerenvoient la valeur saisie
2 Les fonctions dediees a l’affichage, qui :peuvent avoir en parametres des donnees a afficher,s’occupent de l’affichage console avec print,ont pour valeur de retour None
3 Les fonctions dediees aux calculs/traitements, qui :ont des parametres,ont une valeur de retour, renvoyee par return et dependante du traitement,n’ont pas de saisie-clavier avec input car ce sont les arguments d’appel quidirigent l’evaluation de la fonctionne font pas d’affichage avec print (sauf pour aider au deboggage duprogramme)
L’affichage du resultat est alors faite, soit par le programme principal, soitpar une fonction dediee a l’affichage.
CBGM (IUT-RT) Prog 1 Version 2017 94 / 97
Les prototypages classiques de fonctions
Exemple des 3 prototypages de fonctions
Exemple (Termes d’une suite)
Pour un programme qui calcule les termes de la suite un+1 = 2un + 1 avecu0 = 1 et affiche la valeur du terme de rang N, N etant choisi par l’utilisateur,on peut trouver :
1 la fonction dediee a la saisie clavier de N :
1 def saisie():2 """Demande un rang et le renvoie en verifiant la saisie"""3 nbre = eval(input("Un nbre: "))4 while not(isinstance(nbre, int) and nbre >= 0):5 nbre = eval(input("Un nbre svp; recommencez: "))6 return nbre
2 la fonction dediee a l’affichage du terme un :
1 def affichage(u, n):2 """Affichage du terme u et de son rang n"""3 print("u_{} vaut {}".format(n, u))4 return
CBGM (IUT-RT) Prog 1 Version 2017 95 / 97
Les prototypages classiques de fonctions
Exemple des 3 prototypages de fonctions
Exemple (Termes d’une suite (suite))3 la fonction dediee au calcul du terme un de la suite :
1 def terme_np1(n):2 """Calcule le terme de rang n de la suite"""3 u = 1 # Terme initial u04 for i in range(1, n+1):5 u = 2*u + 1 # Calcul du terme un+1 en fonction de un6 return u
4 les instructions du programme principal :
1 n = saisie() # Rang souhaite par l’utilisateur ?2 u = terme_np1(n) # Calcul du terme de rang N3 affichage(u, n) # Affichage
L’execution donne par exemple :
Un nbre: 5u_5 vaut 63
CBGM (IUT-RT) Prog 1 Version 2017 96 / 97
Ou declarer une fonction?
Ou declarer une fonction?Python etant un langage interprete, il est imperatif, dans un script, de definirune fonction avant de l’utiliser.
Exemple (Script demoTriangle.py)
1 # -*- coding: UTF-8 -*-2 """3 Script: td_sphinx/demoTriangle4 Auteur: pycharm5 Date: 01/09/20176 """7
8 # Fonctions9 def ligne(nb):
10 """Renvoie une ligne de nb etoiles (type str)"""11 chaine = ’*’*nb12 return chaine13
14 def triangle(nb):15 """Renvoie un triangle d’etoiles dont la derniere ligne contient nb
etoiles (type str)"""16 res = ""17 for n in range(1, nb+1):18 res += ligne(n) + ’\n’19 return res20
21
22 # Programme principal23 def main():24 tr = triangle(5)25 print(tr)26
27 if __name__ == ’__main__’:28 main()
CBGM (IUT-RT) Prog 1 Version 2017 97 / 97