Date post: | 13-Sep-2018 |
Category: |
Documents |
Upload: | trinhtuyen |
View: | 214 times |
Download: | 1 times |
Module M1207
Programmation PythonRemy CHOLLET*, [email protected] BARAS, [email protected] GOEURIOT, [email protected] MARTIN, [email protected]
Version 2016
Table des matieres
Chapitre 1 Introduction 3
1 L’informatique en R&T 31.1 Les modules d’informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Definition 42.1 L’informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Les langages de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Chapitre 2 Variables et expression 6
3 Variables 63.1 Qu’est ce qu’une variable? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2 Type d’une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.3 Affectation d’une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.4 Conversion de type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4 Expression 84.1 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.2 Operateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.3 Priorite des operateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5 Instructions 95.1 Instructions d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.2 Instructions d’entrees/Sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1
Chapitre 3 Structures alternatives 13
6 Structure conditionnelle elementaire : Si 136.1 Principe et syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7 Structure alternative elementaire : Si sinon 137.1 Principe et syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
8 Conditions booleennes 148.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148.2 Operateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148.3 Operateurs booleens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
9 Structure alternative multiple : si ... ou si ... sinon 159.1 Principe et syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169.3 Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Chapitre 4 Structures repetitives 17
10 Principes des structures repetitives 17
11 Boucle for 1711.1 Le compteur d’iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1711.2 Repetition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1711.3 Repetition en utiisant le compteur de boucle . . . . . . . . . . . . . . . . . . . . . . . . . . 1811.4 Valeur initiale du compteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1911.5 Increment du compteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
12 Boucle while 2012.1 La condition de boucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2012.2 Repetition dependant d’une saisie utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . 20
13 Equivalence boucles for/while 21
14 Boucle avec variable d’accumulation 2214.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2214.2 Boucles imbriquees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Chapitre 5 Fonctions 25
15 Fonctions 2515.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2515.2 Appel d’une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2515.3 Syntaxe de declaration d’une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2615.4 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2615.5 Ou declarer une fonction? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2715.6 Portee des variables dans une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Tr. 1
2
Chapitre 1 — Introduction
Tr. 2
1 L’informatique en R&T
1.1 Les modules d’informatique
Sem. Modules IntituleS1 M1105 Linux utilisateur
M1103 Architecture des equipements informatiquesM1106 Initiation au developpement WebM1207 Programmation 1
S2 M2105 Web dynamiqueM2104 SGBDM2207 Programmation 2M2109 Gestion de projets informatiques
S3 M3206 POOS4 M4206C Programmation sur mobiles
M4207 DSPTr. 3
1.2 Planning
Modalites— Cours/TD : 1h + 7 × 2h— TP : 2h + 6 × 2h— Evaluation (semaine 3) : DS papier 1h30 ; DS machine 1h30
Planning des seances
Semaine CM/TD TP46 Introduction, variable, expression47 Bases du langage48 Structures alternatives TD machine : prise en main de l’IDE49 Structures alternatives suite TP1 : Types, test50 Structure repetitive TP2 : Boucles simples51 Structure repetitive suite TP3 : Boucles imbriquees1 Fonctions TP4 : Fonctions2 Fonctions suite TP5 : Fonctions suite3 TP6 : Fonctions avancees
Tr. 4
3
2 Definition
2.1 L’informatique
Definition 1 (Informatique (data processing), algorithme). L’informatique est la science du traitementautomatique (software) de l’information (data), dont decoule des programmes qui implementent desalgorithmes a l’aide d’un langage de programmation.
DonneesProgramme(software) Resultats
Ordinateur
Tr. 5
Definition 2 (Algorithme). Un algorithme est la mise en œuvre d’une succession finie d’actionselementaires (instructions) pour resoudre un probleme ou obtenir une fonctionnalite.
Exemple 3 (Des algorithmes).— Recette de cuisine, notice de montage— Prise d’un medicament contre la toux : ”En cas de toux, prendre, sauf avis contraire du medecin,
un comprime toutes les 4 heures, jusqu’a disparition des symptomes. Pour les enfants, uncomprime toutes les 8 heures suffit.”
— Resolution de ax2 + bx+ c = 0 : par dichotomie, solution exacte ...Tr. 6
Exemple 4 (Prise d’un medicament contre la toux).
”En cas de toux, prendre, sauf avis contraire du medecin, un comprime toutes les 4heures, jusqu’a disparition des symptomes. Pour les enfants, un comprime toutes les 8heures 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 SITr. 7
2.2 Les langages de programmation
Definition 5 (Langage de programmation). C’est un ensemble de caracteres, symboles, mots-cles etregles d’assemblage (equivalents au vocabulaire et a la grammaire d’une langue), utilise pour donnerdes instructions a l’ordinateur.
Evolution des langages
1. Langage machine de plus bas niveau
2. Langage assembleur (mnemonique, macros, variables)
3. Langage structure :— paradigmes de programmation : procedural, oriente objet, fonctionnel...— compile : C, C#, C++, ObjectiveC, Pascal, Java— interprete : Tcl/Tk, Perl, Python, Ruby, JavaScript, Matlab
4. Langage naturel SQL, Windev, 4D (BDD)Tr. 8
2 approches
4
1. Compilation : traduction d’un code source vers un code cible executable— code executable directement par l’OS— Bytecode executable par machine virtuelle (cf. Java au S3)
2. Interpretation : langage converti en bytecode au fur et a mesure de l’execution— lire et analyser une instruction (ou une expression)— si l’instruction est syntaxiquement correcte, l’executer (ou evaluer l’expression)— passer a l’instruction suivante
Pour Python889— tout le code source est verifie syntaxiquement— un bytecode est produit automatiquement pour execution dans l’interpreteur Python (via une
machine virtuelle)— est vu comme un langage interprete
Tr. 9
Python?— Cree par Guido van Rossum en 1990— 1er objectif : un nouveau shell— usages industrialises, forte progression ces dernieres annees— Open source, large communaute, bonne portabilite— plutot haut niveau, plutot pragmatique— Caracteristiques :
— l’indentation comme syntaxe— tout est objet— bibliotheques tres diverses (systeme, calcul, imagerie, SGBD, Web etc...)
Pourquoi Python?— Bon langage pour la pedagogie— Tres bon langage pour l’administration— Aspects modernes (iterateurs, comprehension, introspection...)
Tr. 10
Qualites d’un logiciel
— Fiabilite— Robustesse— Lisibilite du code
— Portabilite— Maintenabilite— Performance
Concretement :— Nommage pertinent— Structurer sous forme de ”boites noires” : modules et les fonctions et aussi classes— Documenter l’interface des boıtes noires, commenter— Tests unitaires— Limiter les dependances, chercher la simplicite et la clarte
Tr. 11
5
Chapitre 2 — Variables et expression
Tr. 12
3 Variables
3.1 Qu’est ce qu’une variable?
Definition 6 (Variable). Une variable designe un espace memoire dont on peut modifier le contenuavec un acces simple et lisible. Elle :
1. est designee par un identificateur (ou nom)
2. memorise une valeur, evoluant avec le flot d’instructions mais unique a un instant donne
3. presente un type, precisant la nature de la valeur qu’elle memorise
Remarque : Une variable possede egalement :— une duree de vie, qui debute a la declaration de la variable et s’acheve lorsque l’espace
memoire occupe par la variable est libere— une portee, zone du programme dans laquelle la variable est accessibleTr. 13
Choix de l’identificateur— L’identificateur est un nom :
Í utilisant des lettres (sensibles a la casse), des chiffres ou _
ë interdisant les caracteres accentues et speciaux (comme $, #, etc) ; les mots-cles dePython ; les noms commencant par un nombre.
— Mots-cles Python interdits :
and del from not whileas elif global or with
assert else if pass yieldbreak except import printclass exec in raisecontinue finally is returndef for lambda try
— L’usage (nommage lowerCamelCase) veut que les noms de variables soient en minuscule etn’utilisent une majuscule que pour la 1ere lettre de chaque mot, comme danstableDesMatieres.
Allocation memoirePython offre un systeme de gestion automatique de la memoire, disposant d’un ramasse-miette(garbage collector ) qui efface automatiquement toutes les donnees non referencees par des variables.
Tr. 14
3.2 Type d’une variable
Definition 7 (Type d’une variable). Le type est la nature de la valeur memorisee par la variable. Il estdefini a la creation de la variable et est dynamique, c’est a dire determine lors de l’execution duprogramme 1.
Quelques types (simples) de variables en PythonCf. tableau 1.
Tr. 15
Fonctions autour du typeI Connaıtre le type d’une variable x : type(x)I Verifier si une variable x est du type t : isinstance(x, t)
1. contrairement a d’autres languages comme Java ou le type est statique c’est a dire declare dans le code par le programmeur
6
Nom Type 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 " ou """
TABLE 1 – Quelques types de variables
Types numeriques (attention aux problemes de precision !)888— Entiers (signe) : int de precision limitee (entre ≈ [-sys.maxint, sys.maxint]), long de
precision illimitee au dela— Decimaux : float de precision limitee (entre [sys.float\_info.min sys.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 imaginaireTr. 16
3.3 Affectation d’une variable
Definition 8 (Declaration/affectation). En Python, une valeur est declaree et affectee en memetemps 2 :
— la declaration consiste a choisir l’identificateur de la variable— l’affectation lui associe une valeur, dont le type determine celui de la valeur. Elle utilise le
symbole = et se fait dans le sens droite vers gauche.
Attention au sens d’une affectation
Í x = 3 affecte a la variable x la valeur 3.ë Ecrire 3 = x n’a pas de sens !
Tr. 17
Exemple 9 (Des affectations).I x = 2 declare la variable x, lui donne la valeur entiere 2 et lui confere le type intI y = 3.14 declare la variable y, lui donne la valeur flottante 3.14 et lui confere le type floatI chaine = "Eggs" declare la variable chaine, lui donne pour valeur la chaine de caracteres
"Eggs" et lui confere le type strI chaine = "3.14" re-declare la variable chaine, lui donne cette fois pour valeur la chaine de
caracteres "3.14" et le type str
Remarque : Python a un typage fort mais :— les types numeriques peuvent etre melanges dans les expressions— 888 lorsqu’on travaille sur les booleens, toute valeur (ou objet) egale a 0 (ou vide ou None)
est consideree comme False ; tout le reste est vue comme True. Tr. 18
3.4 Conversion de type
Fonctions de conversion de typeLes fonctions suivantes convertissent (si cela est possible) la valeur passee en parametre dans le typedu meme nom : cf. tableau 2.
Exemple 10 (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
Tr. 19
Remarque888 : Les fonctions de transtypage servent aussi a obtenir des valeurs par defaut :
2. on parle de declaration implicite, contrairement a Java qui impose de declarer une variable et son type avant de lui donnerune valeur
7
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 chainebool(valeur) False si valeur vaut 0 ou True
TABLE 2 – Les fonctions de conversion de type
— i=int() donne i=0
— f=float() donne f=0.0
— s=str() donne s=""
— b=bool() donne b=FalseTr. 20
4 Expression
4.1 Definitions
Definition 11 (Expression, operateurs).— Une expression est une suite de symboles qui sera interpretee comme un calcul ayant pour
resultat une valeur d’un certain type.— Elle utilise des operateurs (+, *, ...) et des operandes (valeurs, variables, expressions).— La valeur de l’expression, si elle doit etre reutilisee dans la suite du programme, devra etre
stockee dans (affectee a) une variable.
Exemple 12 (Des expressions).— recuperation de la valeur de la variable x : x— expression arithmetique : 4/3 ou (x+2)\%5
— expression booleenne : x==5 (x est-il egal a 5?)Tr. 21
4.2 Operateurs
Principaux operateurs des expressionsCf. tableau 3.
Symb. Signification Symb. Signification+ addition pour int, float ;
concatenation pour str* multiplication pour int, float ;
repetition pour str- soustraction pour int, float / division euclidienne pour int
; division decimale pour float(propre a Python 2 pas vrai en3)
% modulo (ou reste de la divisionentiere) pour int
** exposant, par exemple 3**2
vaut 9or union logique pour les boolean and intersection logique pour les
boolean
not negation logique pour lesboolean
// 888 division euclidiennequels que soient les operandes
TABLE 3 – Operateurs des expressions
Tr. 22
4.3 Priorite des operateurs
Priorite des operateurs, par ordre croissant, avec groupement de gauche a droite si prioritesegales
8
Cf. tableau 4.
Priorite Operateur DescriptionBasse or ou logique
and et logiquenot non logique<, <=, >, >=, <>, !=, == comparaison| ou bit a bitˆ et 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
TABLE 4 – Les priorites des operateurs
Remarque : en cas de doute 3, utilisez des parentheses Tr. 23
5 Instructions
Definition 13 (Instructions). Une instruction est un ordre a executer par le programme; c’est uneetape qui dicte a la machine ce qu’elle doit effectuer avant de passer a l’instruction suivante. Parexemple :
— affecter une valeur a une variable— afficher une information a l’ecran— recuperer une saisie clavier faite par l’utilisateur
Executer une instruction implique d’evaluer des expressions.
Definition 14 (Programme). Un programme est une suite d’instructions, qui s’executent les unes apresles autres - autrement dit sequentiellement.
Tr. 24
5.1 Instructions d’affectation
Exemple 15 (Des instructions d’affectation). Voici un programme (script) de 3 instructions :
1 toto = 32 titi = toto + 13 titi += toto
Les instructions d’affectation et leurs effets sur l’espace des variables et des valeurs sont representeesfigure 1.
— Ligne 1 : declare la variable toto et lui affecte la valeur 3— Ligne 2 : incrementation : evalue l’expression toto + 1 et affecte le resultat (ici 4) a la
variable (declaree par la meme occasion) titi— Ligne 3 : affectation composee : est equivalente a titi = titi + toto. Evalue l’expression
titi + toto et modifie la valeur de titi en lui affectant le resultat (ici 4+3, soit 7)Tr. 25
5.2 Instructions d’entrees/Sorties
5.2.1 Ecriture sur l’ecran
Ecriture vers l’ecran3. Liste detaillee sur https://docs.python.org/2/reference/expressions.html#operator-precedence
9
Variables
toto
titi
Valeurs/donnees
31
4
7
%
FIGURE 1 – L’affectation dans l’espace des variables et des valeurs
L’instruction qui demande au programme l’affichage (l’ecriture) de donnees de differentes natures surla console (l’ecran) est : print expression[, expression]
Exemple 16 (Affichage de chaınes de caracteres dans un interpreteur python).
>>>msg1 = "Bonjour">>>msg2 = "Au revoir">>>print msg1Bonjour>>>print msg2Au revoir>>>print msg1, msg2Bonjour Au revoir>>>print msg1 + msg2BonjourAu revoir
Tr. 26
Exemple 17 (Affichage de valeurs de variables).
>>>EUR = 1>>>CAD = 1.4>>>print EUR, "euro vaut", CAD, "dollar canadien"1 euro vaut 1.4 dollar canadien
Pour faire une impression sans retour a la ligne on termine l’instruction par la virgule (sans effets enmode interactif)Tr. 27
5.2.2 Formatage de chaine
Formatage de chaıne et specification de conversionLe formatage permet de creer des chaınes de caracteres incorporant des donnees (de divers types)avec la syntaxe :
"ceci est une chaine formatee %format" % valeur|variable
La valeur (ou variable) placee apres l’operateur de conversion % sera inseree dans la chaıne al’emplacement balise par le specificateur de conversion. Cf. tableau 5.
Tr. 28
Exemple 18 (Fomatage d’une chaıne avec un entier).
>>>val = 10>>>"%d" % val’10’>>>print "La valeur est : %d" % valLa valeur est : 10>>>"%04d" % (val+5)’0015’
Exemple 19 (Formatage d’une chaıne avec un flottant).
10
Specif. Format Specif. Format%d Entier %nd Entier sur n caracteres
min%0nd Entier sur n caracteres min et des 0 non significatifs%f Flottant avec 6 decimales %.mf Flottant avec m decimales%nf Flottant dans un champ
de n caracteres (’.’ in-clus)
%n.mf Flottant dans un champde n caracteres avec mdecimales
TABLE 5 – Les formats d’affichage
Specif. Format Specif. Format%b Entier en binaire (Python
> 3.0)%o Entier en Octal
%x Entier en Hexadecimal %X Entier en Hexadecimalavec lettres capitales
%s Une chaıne (a incluredans une chaıne)
%ns Une chaıne sur n ca-racteres minimum
TABLE 6 – Quelques specifications de format
>>>"%f" % 1.’1.000000’>>>"%.3f" % 123.’123.000’>>>print "La valeur est : %010.3f" % 123.567La valeur est : 000123.567
Tr. 29
Exemple 20 (Affichage de chaınes plus complexes).
>>> choux = 2>>> carottes = 6>>> print "%d choux" % choux , "et %d carottes" % carottes2 choux et 6 carottes>>> print "%d choux" % choux + " et %d carottes" % carottes2 choux et 6 carottes>>> print "%d choux et %d carottes" % (choux, carottes)2 choux et 6 carottes
>>> TC = 23.5 # temperature en degres Celcius>>> print "%5.1f C" % TC +" vaut %5.1f F" % (TC*9./5+32)23.5 C vaut 74.3 F>>> print "%5.1f C vaut %5.1f F" % (TC, TC*9./5+32)23.5 C vaut 74.3 F
Tr. 30
Autres specifications de conversion888Cf. tableau 6.
Exemple 21 (Quelques exemples).
>>>"Un octal : %o, " % 10 + "Un hexa : %X" % 0o12’Un octal : 12, Un hexa : A’>>> chaine = "toto">>> "%s" % chaine # Renvoie une chaine de caractere’toto’>>> "%6s" % chaine # Renvoie une chaine de caractere’ toto’
Tr. 31
11
5.2.3 Lecture d’une saisie clavier
Lecture de caracteres saisis au clavierL’instruction chaine = raw_input("tapez une chaine") :
1. affiche a l’ecran 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
Le type de chaine est obligatoirement str.
Exemple 22 (Saisie d’une chaine de caracteres).
>>>var = raw_input("Saisir une chaine : ")Saisir une chaine : toto>>>print var, type(var)’toto’ <type ’str’>
Lecture des nombres saisis au clavierL’instruction nbre = input("Tapez un nombre") :
1. affiche a l’ecran le message Tapez un nombre
2. capture le nombre saisi au clavier jusqu’a l’appui sur Enter
3. le renvoie dans la variable nbre
Le type de nbre est adapte automatiquement par Python a la valeur saisie.
Exemple 23 (Saisies de nombres). Un entier :
>>>nbre= input("Une valeur: ")Une valeur: 12>>>print nbre, type(nbre)12 <type ’int’>
Un flottant :
>>>var= input("Une autre: ")Une autre: -3.5>>>print var, type(var)-3.5 <type ’float’>
Remarque888 : l’instruction raw_input peut etre utilisee pour saisir des nombres en lui associantun transtyptage (int(), float(), ...) qui convertit les caracteres renvoyes par raw_input dans letype attendu :
— Pour la saisie d’un entier, input( "Saisir un entier") est equivalent aint(raw_input( "Saisir un entier"))
— Pour la saisie d’un float, input( "Saisir un flottant") est equivalent afloat(raw_input( "Saisir un flottant"))
— Pour une saisie quelconque, input( "Saisir une donnee") est equivalent aeval(raw_input( "Saisir une donnee"))Tr. 32
12
Chapitre 3 — Structures alternatives
Tr. 33
6 Structure conditionnelle elementaire : Si
6.1 Principe et syntaxe
Structure conditionnelle ”Si”
1 if condition_booleenne :2 instruction3 ...4 instruction5 suite_du_programme
s’execute uniquement si la conditionest vraie puis continue
ne s’execute pas sila condition est fausseet poursuit directementavec la suite
La structure precedente teste la condition_booleenne en evaluant si elle est True ou False.— Si elle est True alors le bloc d’instructions qui suit est execute ;— Sinon le bloc d’instructions n’est pas execute.
Dans tous les cas, le programme se poursuit avec suite_du_programme.
Bloc d’instructionC’est l’indentation (tabulation avec la touche −−→−−→ ) qui definit les blocs d’instructions en Python
Tr. 34
6.2 Exemple
Exemple 24 (Si). Le programme :
1 var = input("Saisir une valeur : ")2 if var < 0 :3 var = -var4 print "Sa valeur absolue est", var5 print "fin"
donne a l’execution :Cas 1 :
1 Saisir une variable : 52 Sa valeur absolue est 53 fin
Cas 2 :
1 Saisir une variable : -22 Sa valeur absolue est 23 fin
Tr. 35
7 Structure alternative elementaire : Si sinon
7.1 Principe et syntaxe
Structure alternative ”Si ... sinon”
1 if condition_booleenne :2 instruction3 instruction4 else :5 instruction6 instruction7 suite_du_programme
a executer uniquement sila condition est True
a executer uniquement sila condition est False
La structure alternative precedente teste la condition_booleenne en evaluant si elle est True ouFalse.
— Si elle est True alors le bloc d’instructions qui suit est execute ;
13
— Sinon le bloc d’instruction n’est pas execute.— Le programme continue ensuite son deroulement.
Tr. 36
7.2 Exemple
Exemple 25 (Si alors). Le programme :
1 var = input("Saisir une variable : ")2 if var > 4 :3 print "oui : ", var, " est superieur a 4"4 else :5 print "non : ", var, " est inferieur ou egal a 4"6 print "fin"
donne a l’execution :Cas 1 :
1 Saisir une variable : 52 oui : 5 est superieur a 43 fin
Cas 2 :
1 Saisir une variable : 32 non : 3 est inferieur ou egal a 43 fin
Tr. 37
8 Conditions booleennes
8.1 Definition
Condition booleenneCette condition designe une expression ayant pour valeur True ou False.
Elles mettent en jeu :
1. des operateurs de comparaison qui comparent deux donnees du meme type (int, float, string)et renvoie un booleen
2. des operateurs booleens entre conditions booleennes, souvent resultat d’une comparaisonentre deux valeurs
Tr. 38
8.2 Operateurs de comparaison
Operateurs de comparaison
Op. Signification Op. Signification== egal (en terme de
contenu)!= different
> strictement superieur < strictement inferieur>= superieur ou egal <= inferieur ou egalX<Y<Z Y est compris entre X et Z is egal (meme objet)
Exemple 26 (Des conditions booleennes).— La variable spam est-elle egale a 0? s’ecrit spam == 0. Lorsque spam vaut 0, la condition renvoie
True ; lorsque spam veut 3, elle renvoie False
— La variable spam est-elle differente de "eggs" s’ecrit spam \= ”eggs”.— La variable spam est-elle comprise entre -1 et 2.3? s’ecrit -1 < spam < 2.3
— La moyenne des notes m1 et m2 est-elle superieure a 10? s’ecrit (m1+m2)/2 > 10
— La note m1 est-elle divisible par 3? s’ecrit m1%3 == 0Tr. 39
14
8.3 Operateurs booleens
Operateurs booleens
Op. Signification Op. Signification Op. Significationand et logique or ou logique not negation
Rappel : Table de verite des operateursand True False
True True False
False False False
or True False
True True True
False True False
not True False
False True
Remarque : Attention aux priorites ! Dans le doute, abuser des parentheses qui ameliorent souvent lalisibilite !
Exemple 27 (Des resultats de tests booleens).— True and False est egal a False
— True or False est egal a True
— (True and True)or False est egal a True
— True and not(False) est egal a True
Exemple 28 (Des conditions booleennes).— La variable jour est-elle egale a ”lundi” et la variable annee est-elle superieure a 2000? s’ecrit
(jour == "lundi")and (annee > 2000)
— Le jour est-il dans le WE? s’ecrit (jour == "samedi")or (jour == "dimanche")
— La variable spam est-elle differente de 0? peut s’ecrire spam != 0 mais aussi(spam > 0)or (spam < 0)
— La variable spam est-elle comprise entre 0.5 inclu et 1.5? peut s’ecrire(spam >= 0.5)and (spam < 1.5) ou de maniere equivalente 0.5 <= spam < 1.5 ou encore1.5 > spam >= 0.5
Remarque : L’evaluation de la condition booleenne s’arrete des que le resultat est sur : par exemple,dans l’expression X and Y, si X est evalue a False, alors l’expression est False et Y n’est pas evalue.Sinon, l’expression est evaluee a la valeur booleenne de Y.
Exemple 29 (Application). Faire l’exercice 4 du TD sur les annees bissextilesTr. 40
9 Structure alternative multiple : si ... ou si ... sinon
9.1 Principe et syntaxe
Structure alternative Si ... ou si ... sinon
1 if condition_booleenne_1 :2 instruction3 instruction4 elif condition_booleenne_2 :5 instruction6 instruction7 else :8 instruction9 instruction
10 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 de conditions alternatives— Le bloc else est optionnel Tr. 41
15
9.2 Exemple
Exemple 30.
1 nombre = input("Entrez un nombre : ")2 if nombre<0 :3 print nombre, ’est negatif’4 elif nombre > 0 :5 print nombre, ’est positif’6 elif nombre == 0 :7 print nombre, ’est nul’8 else :9 print nombre, "n’est pas un nombre"
Tr. 42
9.3 Bilan
Exemple 31 (Algo). Une UE contient 2 modules : M1 et M2.— L’UE est valide si les notes aux deux modules sont superieures a 10— Il y a rattrapage si un seul des modules a une note superieure a 10— Si 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 moduleTr. 43
Les trois implementations suivantes sont equivalentes :
1. Avec 2 structures si sinon imbriquees :
1 if (m1>=10 and2 m2>=10) :3 print "valide"4 else :5 if (m1>=10 or m2>=10) :6 print "rattrapage"7 else : # (m1<10 and m2<10)8 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) :4 print "rattrapage"5 else : # donc (m1<10 and m2<10)6 print "refuse"
3. Avec des conditions simples :
1 if (m1>=10) :2 if (m2>=10) :3 print "valide"4 else :5 print "rattrapage"6 else : # donc m1<107 if (m2>=10) :8 print "rattrapage"9 else :
10 print "refuse"Tr. 44
16
Chapitre 4 — Structures repetitives
Tr. 45
10 Principes des structures repetitives
Definition 32 (Structure repetitive). Une structure repetitive est un bloc d’instructions parcouru uncertain nombre de fois (de 0 a une infinite).
Boucle whileLes boucles while/tant que repetent une serie d’instructions tant qu’une condition est verifiee ; lacondition est une expression booleenne qui s’ecrit de la meme facon que dans les structuresalternatives.
Boucle forEn pratique, le nombre de repetitions est tres souvent connu par le programmeur (parcours deselements d’une liste, repetition d’une meme action, ...) ; on leur prefere une syntaxe plus simpleappelee boucle for.
Tr. 46
11 Boucle for
11.1 Le compteur d’iteration
Definition 33 (Boucle for). Pour repeter un bloc d’instructions N fois, une boucle for utilise uncompteur d’iteration :
for compteur in range( N ) :instruction # Debut du bloc a repeter...instruction # Fin du bloc
suite_du_programme
— Une iteration est une execution (ou une repetition) du bloc d’instructions— Le 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 plus execute et le
programme passe aux instructions qui suivent le blocRemarque : les compteurs sont couramment appeles i, j ou k... pour des raisons historiques liees aulangage Fortran.
Tr. 47
11.2 Repetition
Exemple 34 (Boucle iterant le meme affichage 3 fois). Le programme suivant :
1 for i in range(3) :2 print "*",3 print "fin"
itere 3 fois l’affichage de * et donne :
* * * fin
Le trace du programme est donne table 7.Remarque : ce programme est equivalent a print "*"*3 + "fin".
Tr. 48
17
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 3 * * * Le compteur atteint le nbre d’iter. voulu3 3 * * * fin
TABLE 7 – Trace de la boucle affichant * * * fin
11.3 Repetition en utiisant 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 faire varier leurs resultats d’uneiteration a une autre
Exemple 35 (Affichage des nombres de 2 jusqu’a 6 (exclu)). Le programme suivant :
1 for i in range( 4 ) :2 print i+2, # affichage3 print "fin"
affiche les nombres de 2 a 5 et donne :
2 3 4 5 fin
Le trace du programme est donne table 8.
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
2 3 5 2 3 4 5 Fin de la 4eme iter. de boucle1 4 2 3 4 5 Le compteur a atteint le nbre d’iter. voulu3 4 2 3 4 5 fin
TABLE 8 – Trace de la boucle affichant 2 3 4 5 fin
Tr. 49
ë Attention : le compteur de boucle ne doit en general pas etre modifie par les instructions dela boucleLes valeurs du compteur sont pre-calculees au 1ere passage dans la boucle pour aller de 0 a N.Quelque soient les modifications faites sur le compteur dans le bloc d’instruction, chaque nouvelleiteration donne au compteur la prochaine valeur pre-calculee.
Tr. 50
Exemple 36 (Une boucle a ne pas faire).Le programme :
1 for i in range( 2 ) :2 print i, # affichage3 i = 0 # raz du compteur4 print "fin"
donne :
0 1 fin
Le trace du programme est donne table 9.Tr. 51
18
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 2 0 1 Le compteur atteint le nbre d’iter. voulu3 3 0 1 2 fin
TABLE 9 – Trace de la boucle affichant 0 1 fin
11.4 Valeur initiale du compteur
Definition 37 (Boucle for avec valeur initiale non nulle). La syntaxe d’une boucle for repetant un blocd’instructions sur la base d’un compteur allant d’une valeur initiale a une valeur finale (exclue) est :
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 boucle s’arrete lorsque lecompteur atteint la valeur val_fin_exclue.
Exemple 38 (Affichage des nombres de 2 jusqu’a 5 (exclu)). Le programme pour afficher les nombresde 2 a 4 :
1 for i in range(2, 5) :2 print i, # affichage3 print "fin"
donne en 3 iterations :
2 3 4 fin
Le trace du programme est donne table 10.
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 5 2 3 4 Le compteur a atteint sa valeur finale3 5 2 3 4 fin
TABLE 10 – Trace de la boucle affichant 2 3 4 fin
Tr. 52
11.5 Increment du compteur
Definition 39 (Boucle for avec un increment du compteur different de 1). La syntaxe suivante :
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 du compteur de increment
jusqu’a ce qu’il egale ou depasse val_fin_exclue
Exemple 40 (Affichage des nombres pairs de 2 jusqu’a 8 (exclu)). article
1 for i in range(2, 8, 2) :2 print i, # affichage3 print "fin"
19
donne :
2 4 6 fin
Le trace du programme est donne table 11.
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 8 2 4 6 Le compteur atteint sa valeur max.3 8 2 4 6 fin
TABLE 11 – Trace de la boucle affichant * ** *** fin
Tr. 53
12 Boucle while
12.1 La condition de boucle
Definition 41 (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 la constituent :
1. Initialisation de la condition
2. Test de la condition a chaque iteration de la boucle
3. Modification du contexte (de la condition) a chaque iteration
— Des que la condition n’est plus vraie, le programme se poursuit avec les instructions quisuivent le bloc repetitif
— Pour ne pas se repeter sans fin, le bloc d’instructions doit obligatoirement reaffecter la conditionbooleenne.
Ces boucles sont particulierement utiles lorsque le nombre d’iterations n’est pas connu a l’avancecomme par exemple lorsqu’elles dependent d’une action de l’utilisateur ou du resultat d’un calcul faitpar les instructions de boucle.Tr. 54
12.2 Repetition dependant d’une saisie utilisateur
Exemple 42 (Verification d’une saisie clavier). Les programmes suivants imposent a un utilisateur unesaisie clavier valant ’O’ ou ’N’ 4.Ils utilisent pour condition de boucle la variable rep, donnant le resultat de la saisie utilisateur,comparee aux valeurs attendues.Deux types d’initialisation peuvent etre envisagees :
1. rep = input("Tapez O/N ") qui realise une premiere saisie avant test
2. rep = "" qui affecte une valeur garantissant l’entree dans la boucle.Tr. 55
Variante 1 :4. Rappel : Python est sensible a la casse ; ’O’ n’est donc pas le meme caractere que ’o’
20
1 rep = input("Tapez O/N ") # Initialisation2 while not( rep == "O" or rep == "N" ) : # Condition de boucle3 rep = input("Non, tapez O/N ") # 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 passages dans laboucle) :
Tapez O/N iNon, tapez O/N pNon, tapez O/N ? Ofin
pour la variante 2 (3 passages dans laboucle) :
Tapez O/N iTapez O/N pTapez O/N ? Ofin
Tr. 56
13 Equivalence boucles for/while
L’art du compteur d’iterationLorsque le nombre d’iterations est connu et qu’on peut le denombrer avec un compteur d’iterationallant d’une valeur ini a une valeur fin en s’incrementant a chaque iteration de inc, les structuresrepetitives peuvent finalement s’ecrire indifferemment avec une boucle for ou une boucle while :
1 for compteur in range(ini, fin, inc) :2 instruction3 ...4 suite_du_programme
1 compteur = ini2 while compteur < fin :3 instruction4 ...5 compteur += inc6 suite_du_programme
Tr. 57
Exemple 43 (Boucle d’affichage des nombres impairs de 0 a 20). Avec une boucle for :
1 for i in range(1, 20, 2) :2 print i,3 print "fin"
Avec une boucle while :
1 i=12 while i < 20 :3 if i % 2 != 0:4 print i,5 i = i+16 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 la boucle for et 20 iterations pour la boucle while
Y Les instructions d’une boucle peuvent contenir des structures alternatives, voire d’autres boucles... Tr. 58
21
14 Boucle avec variable d’accumulation
14.1 Principes
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 de la boucle.— L’actualisation peut etre : l’ajout a la variable d’une valeur, la multiplication de la variable par une
valeur, ...— Le choix du type de boucle (for ou while) depend de l’application visee toujours dans l’idee
qu’elle conduit (ou non) a un nombre d’iterations connuTr. 59
Exemple 44 (Solde d’un compte bancaire apres un nombre fixe de mois).— Application : afficher le solde d’un compte bancaire initialement egal a 0, sur lequel est verse un
montant fixe de 50 euros tous les mois, apres 4 ans de fonctionnement.— Variable d’accumulation : le solde— Boucle : 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
donne a l’execution :
solde final : 2350
Y Il n’y a pas trace des valeurs intermediaires du solde (cf. listes en Prog2)Tr. 60
Exemple 45 (Quand pourrais-je avoir un iPhone?).— Application : partant d’un livret de 50 euros, sur lequel est vire 200 euros chaque annee et avec
0.75% d’interet, combien d’annee faut-il a son titulaire pour acheter un iPhone?— Variable d’accumulation : le solde avec ajout des interets et du versement a chaque iteration— La 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 "Nbre d’annees :", annee7 print "Solde :", solde
donne a l’execution :
Nbre d’annees :4Solde : 860.5620439082031
Le nombre d’annees est d’ailleurs le nombre d’iterations de la boucle while.Tr. 61
Exemple 46 (Calcul de la somme de tous les entiers de 1 jusqu’a 1000 (inclus)).
1 somme = 0 # Initialisation2 for i in range(1, 1000+1) :3 somme = somme + i4 print "somme finale :", somme
donne :
somme finale : 500500
Conclusion : structure des programmes avec une variable d’accumulationUn programme utilisant une variable d’accumulation doit toujours :
1. initialiser la variable d’accumulation,
22
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.Tr. 62
Exemple 47 (Calcul iteratif d’une puissance). Le programme suivant calcule 24 dans res en utilisant lefait que 24 = 2× 2× 2× 2 ; res etant modifiee par accumulation de multiplication, sa valeur initiale seradonc 1.
1 res = 12 i = 13 while i <= 4 :4 res = res * 25 i = i + 16 print "2ˆ4 vaut", res
Le trace des variables est donne table 12.
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
TABLE 12 – Trace de la boucle calculant 2ˆ4
Tr. 63
14.2 Boucles imbriquees
Exemple 48 (Trace d’un triangle d’etoiles).
1 for i in range(2, 4) :2 for j in range(1, i) :3 print "*",4 print
donne :
** *
Le trace des variables est donne table 13.Tr. 64
23
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 2 * j atteint sa valeur max.4 2 2 \n Fin de la 1ere iter. de la boucle sur i1 3 22 3 1 j initialise a 13 3 1 * Fin de la 1ere iter. de la boucle sur j2 3 2 *3 3 2 * * Fin de la 2eme iter. de la boucle sur j3 3 3 * * j atteint sa valeur maximale4 3 3 \n Fin de la 2eme iter. de la boucle sur i1 4 3 i atteint sa valeur max.
TABLE 13 – Trace d’une boucle imbriquee
24
Chapitre 5 — Fonctions
Tr. 65
15 Fonctions
15.1 Definition
Definition 49 (Fonction). Une fonction est un bloc/une suite d’instructions autonome qui decrit uncalcul ou une tache dans le but de structurer le programme en taches simples ou de reutiliser du codedans differentes configurations. Elle :
1. possede un nom pour etre appelee plusieurs fois,
2. des parametres d’entree 5 servant a faire varier les calculs ; ses parametres sont identifies par unnom 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 forme nom_de_fonction(param1, param2, ..., paramN)
Exemple 50 (Des fonctions).— cos(x) est la fonction dont le nom est cos ; elle a un parametre x et retourne la valeur de cos(x).— max(a,b) est la fonction dont le nom est max ; elle a deux parametres a et b et retourne la valeur
la plus grande parmi a et b.Tr. 66
15.2 Appel d’une fonction
Definition 51 (Appel d’une fonction).I L’utilisation (appel) d’une fonction se sert du nom de la fonction suivi (dans les
parentheses)d’arguments.I Chaque argument communique une valeur a chaque parametre de la fonction, dans le meme
ordre que celui de la declaration des parametres.I Son appel execute toutes les instructions de la fonction avec les valeurs fournies aux
parametres par les arguments et se finit en renvoyant une valeur.
Exemple 52 (Appel de fonction).— cos(0) evalue la fonction cos(x) lorsque x prend la valeur 0 et renvoie 1— max(2,10) est la fonction max(a,b) lorsque a vaut 2 et b vaut 10 et renvoie 10.— res = max(10, -1) evalue max(a,b) lorsque a vaut 10 et b vaut −1, renvoie 10 et stocke cette
valeur dans res. Au final, res vaut 10.Tr. 67
Remarques :
1. L’appel de la fonction peut etre integre dans une expression ; l’expression est remplacee par lavaleur que retourne la fonction.
1 res = max( max(10, 1), 2)
est equivalent a :
1 temp = max(10, 1)2 res = max( temp, 2)
2. Bien distinguer le renvoi d’une valeur par une fonction et l’affichage (console) d’une valeur
>>> res = somme( 1, -1) # Stocke dans res le resultat de somme mais ne l’affiche pas
>>> print somme( 2, 4) # Affiche sur la console le resultat de somme mais nele stocke nulle part
Tr. 68
5. Python gere des parametres optionnels (hors du cadre de ce cours)
25
15.3 Syntaxe de declaration d’une fonction
Elements pour la declaration d’une fonction
1. Nom de la fonction : identificateur explicite
2. Parametres : liste de parametres d’entree-sortie de l’algorithme
3. Preconditions (optionnel) : des expressions booleennes qui precisent les conditions d’applicationde l’algorithme (888)
4. Description (optionnel mais d’usage obligatoire) : une documentation de l’algorithme
5. Code : sequence d’instruction necessaire a la resolution du probleme
6. Retour (ou renvoi) : la valeur renvoyee
Tr. 69
Syntaxe de declaration
1 def nom(param1, param2, ..., paramN ) :2 ["[""] commentaires [""]"] # documentation3 [assert type(param) is ...] # pre-conditions4
5 instruction # code6 instruction7 ...8 return [valeur] # renvoie de la valeur de retour
Remarques :— l’indentation definit le bloc d’instructions de la fonction— l’execution de return stoppe le flux d’instructions dans une fonction et force la sortie de la
fonction— si return n’est suivi d’aucune valeur ou qu’il n’y a pas de return, alors la fonction renvoie NoneTr. 70
15.4 Exemples
15.4.1 Fonction a un parametre
Exemple 53 (Declaration de la fonction factorielle).
1 def factorielle ( n ) :2 """ # Documentation3 Nom de la fonction : factorielle4 Parametre : n5 Resultat : retourne n!6 """7 res = 1 # Code8 i = 19 while i < n :
10 res *= i11 i += 112 return res # Valeur de retour
donne avec differents appels :
>>> factorielle( 3 )6>>> n = factorielle( 4 )>>> print n24
Tr. 71
26
15.4.2 Fonction a deux parametres
Exemple 54 (La fonction somme).
1 def somme( a, b ) :2 "retourne la somme a+b, fonctionne avec beaucoup de types"3 total = a + b4 return total
Voici les resultats lors de differents appels :
>>> print somme(10, 2)12>>> res = somme(3, 4)>>> print res-16>>> print somme( ’a’, ’b’ )ab>>> print somme( somme(1, 3), somme(4, 10) )18
Remarque FFF : cette fonction est un exemple de polymorphisme puisqu’elle peut etre utiliseeavec n’importe quel type d’objets tant que l’addition + est definie. Tr. 72
15.4.3 Fonction a plusieurs valeurs de retour
1 def unVraiMax( p1, p2 ) :2 ’retourne le strictement plus grand des deux ou bien None’3 if p1 > p2 :4 return p15 elif p2 > p1 :6 return p27 else : # p1 == p28 return
Voici les resultats lors de differents appels :
>>> print unVraiMax(1, 2)2>>> print unVraiMax(2, 1)2>>> print unVraiMax(1, 1)None
Tr. 73
15.5 Ou declarer une fonction?
Python etant un langage interprete, il est imperatif, dans un script, de definir une fonction avant del’utiliser.
Exemple 56 (Script1.py).
1 # ************************2 def ligne(nbEtoile):3 chaine = ’*’*nbEtoile4 return chaine5
6 # ************************7 # Programme principal8 i = 09 while i<5 :
10 print ligne(i)11 i=i+1
27
Exemple 57 (Script2.py).
1 # ************************2 def ligne(nbEtoile) :3 chaine = ’*’*nbEtoile4 return chaine5
6 def triangle(nbLigne) :7 i = 08 res = ""9 while i<nbLigne :
10 res += ligne(i) + ’\n’11 i=i+112 return res13
14 # ************************15 # Programme principal16 tr = triangle(5)17 print tr
Tr. 74
15.6 Portee des variables dans une fonction
Portee des variablesLes variables declarees dans une fonction n’ont qu’une portee locale, c’est a dire qu’elles n’existentque dans le bloc d’instructions de la fonction et qu’elles n’existent plus (donc perdent leur valeur) auretour de la fonction.
Exemple 58 (Une fonction).
1 def fonction( a, b )2 somme = a + b3 diff = a - b4 return somme
donne a l’appel :
>>> fonction( 2, 1)3>>> diffTraceback (most recent call last): ...NameError: name ’diff’ is not defined>>> sommeTraceback (most recent call last): ...NameError: name ’somme’ is not defined
Tr. 75
28