Programmation en Python



Documents pareils
STAGE IREM 0- Premiers pas en Python

Initiation à la programmation en Python

Découverte de Python

TP 1. Prise en main du langage Python

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Présentation du langage et premières fonctions

Cours 7 : Utilisation de modules sous python

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Python - introduction à la programmation et calcul scientifique

Algorithmique et Programmation, IMA


Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Licence Sciences et Technologies Examen janvier 2010

Introduction à MATLAB R

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Représentation d un entier en base b

1 Recherche en table par balayage

Recherche dans un tableau

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Corrigé des TD 1 à 5

Maple: premiers calculs et premières applications

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Java Licence Professionnelle CISII,

Utilisation d objets : String et ArrayList

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

TD3: tableaux avancées, première classe et chaînes

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INF 321 : mémento de la syntaxe de Java

DM 1 : Montre Autoquartz ETA

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Programmer en JAVA. par Tama

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Algorithmique et programmation : les bases (VBA) Corrigé

Représentation des Nombres

Bases de programmation. Cours 5. Structurer les données

Définitions. Numéro à préciser. (Durée : )

Initiation à LabView : Les exemples d applications :

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Chapitre 2 Devine mon nombre!

2 Comment fonctionne un ordinateur, dans les grandes lignes

Initiation à l algorithmique

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Plan du cours. Historique du langage Nouveautés de Java 7

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Logiciel de Base. I. Représentation des nombres

Premiers Pas en Programmation Objet : les Classes et les Objets

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Cours d algorithmique pour la classe de 2nde

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Cours Informatique Master STEP

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Algorithme. Table des matières

Rappels sur les suites - Algorithme

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

as Architecture des Systèmes d Information

Calcul Formel et Numérique, Partie I

PROGRAMMER EN MQL4. Apprenez à automatiser vos stratégies sur MetaTrader 4

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

I. Introduction aux fonctions : les fonctions standards

Langage Java. Classe de première SI

Présentation du PL/SQL

Cours d initiation à la programmation en C++ Johann Cuenin

V- Manipulations de nombres en binaire

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Les chaînes de caractères

Les algorithmes de base du graphisme

ALGORITHMIQUE ET PROGRAMMATION En C

Claude Delannoy. 3 e édition C++

EXCEL TUTORIEL 2012/2013

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Initiation à VBA pour Excel. Philippe Bernard Ingénierie Economique et Financière Université Paris-Dauphine

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Initiation à la Programmation en Logique avec SISCtus Prolog

Notions fondamentales du langage C# Version 1.0

OCL - Object Constraint Language

Plan du cours Cours théoriques. 29 septembre 2014

Solutions du chapitre 4

Introduction au langage C

Algorithmes et mathématiques. 1. Premiers pas avec Python. Exo Hello world!

TP, première séquence d exercices.

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

3 Approximation de solutions d équations

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Continuité d une fonction de plusieurs variables

Les bases du langage Python

1. Structure d'un programme FORTRAN 95

L informatique en BCPST

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet


Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Optimisation, traitement d image et éclipse de Soleil

Transcription:

Programmation en Python Version conseillée : PYZO (et non pas Idle), disponible sur le site http://www.pyzo.org Lors du lancement du logiciel, on dispose d une fenêtre où apparaissent - d une part un écran sur lequel sont représentés les résultats ; pour a cher les résultats, utiliser print(...) - d autre part un espace (ou contenu d un chier) sur lequel on peut éditer les. On peut sélectionner les à exécuter (utiliser la rubrique Exécuter ). Pour obtenir de l aide sur une fonction, utiliser : help("nom_de_la_fonction"). Principe général de la syntaxe de la programmation en Python Les sont séparées soit par un point-virgule soit par un passage à la ligne. Dans un même bloc, deux de même profondeur logique doivent avoir strictement la même indentation. Par exemple, une instruction avec un test if-then-else admet la syntaxe : if test : instruction1 else : instruction2 Avec une telle convention, il est inutile de marquer le début et la n d un bloc par des éléments du langage (comme les mots begin et end utilisés dans certains langages). Un respect scrupuleux des indentations est essentiel. Remarque : Indenter et dédenter s obtiennent par les touches Tab et Maj+Tab (cf menu Editions dans Pyzo). Remarque : Une variante consiste à écrire : if test : instruction1 else : instruction2 Remarque : En revanche, les mots-clés if et else doivent se trouver en première position. On ne peut donc pas écrire la totalité de l instruction sur une unique ligne. Objets élémentaires J Nombres entiers (integer), nombres ottants ( oat), et complexes Division et quotient dans les entiers : a//b et a%b renvoient le quotient et le reste de a par b. Opérations sur les ottants : a*b, a/b, max(a,b), a**b (qui donne a b ), abs(x) : valeur absolue Les nombres ottants (= nombre à virgule ottante) sont de la forme 3.14159 ou 2.1e10. Remarque : Pour chaque nombre ottant (en précision usuelle, dite double-précision), 52 bits sont utilisés pour stocker la mantisse, 1 bit pour le signe et 11 bits pour la puissance, donc au total 64 bits (c est-à-dire 8 octets). Nombres complexes : complex(x,y) ou x+y*1j représentent le complexe x + iy

Remarque : Python considère comme égaux l entier 4, le ottant 4:0 et le nombre complexe 4+0j. Exemple : L instruction round(x,5) renvoie la meilleure approximation décimale de x avec 5 chi res après la virgule. Par exemple, round(3.75,1) renvoie 3.8 et round(3.75) renvoie 4. J Booléens (boolean) : True, False (avec majuscules), and, or, not, a!=b (qui signi e a 6= b). En Python, toutes les valeurs sont comprises comme True sauf la constante False, la constante None, la constante 0, la liste vide [], le tuple vide (), l ensemble vide set(), le dictionnaire vide {}. Par exemple : Le booléen (i%3) est vrai ssi i n est pas congru à 0 modulo 3. On rappelle que i%3 renvoie le reste de l entier i par la division euclidienne par 3. J Intervalles d entiers : range(a,b,h) représente l intervalle des entiers x = a + kh, avec k entier tel que a x < b: Important : Par défaut, la valeur de h est 1. Ainsi, range(0,5) renvoie la liste [0,1,2,3,4]. Remarque : range(n) équivaut à range(0,n). Remarque : Si b < a, range(a,b,h) est la liste des valeurs x = a + kh tel que b < x a: Important : Noter que x est toujours distinct b : La valeur b est toujours exclue de la liste. Exemple : (i in range(a,b,h)) est vrai ssi i appartient à l intervalle. Remarque : Pour convertir un intervalle en une liste d entiers, on utilise la conversion : list(range(a,b,h)) De même, pour convertir un intervalle en un tableau, on utilise array (du module numpy) au lieu de list. Exemples : list(range(3)) renvoie [0,1,2] et list(range(3,0,-1)) renvoie [3,2,1] Listes La structure de données la plus utilisée en Python est la liste. Les listes python sont en fait des tableaux dynamiques : on peut accéder à n importe quel élément du tableau et le modi er en temps constant et on peut au besoin ajouter des éléments en queue de tableau, dans le cas le pire en temps proportionnel à la taille du tableau et en temps amorti constant. J Dé nitions d une liste Considérons l exemple dé ni par a = [1,2,3,"toto"] J Longueur de la liste : len(a) renvoie la longueur n de la liste (c est-à-dire le nombre d éléments) J Obtention et modi cation d un élément : a[i] renvoie l élément d indice i dans la liste, pour 0 i < n: Ainsi, avec l exemple précédent, a[0] renvoie 1 et a[3] renvoie toto On peut modi er les éléments d une liste : a[1] = a[1]+1 Important : Ces opérations se font en temps constant (en moyenne, et dans le cas le pire en temps proportionnel à n).

J Listes dé nies en extension (construites à l aide d une itérateur sur une autre liste) : La syntaxe élémentaire générale est : [ f(i) for i in range(n)]. Exemples : [3*i**2 + 1 for i in range(1,10)] renvoie la liste [0,1,2,3,4,5,6,7,8,9] [i**2 for i in range(10) if i%3!= 1] renvoie la liste [0,2,3,5,6,8,9] [(3*i+j) for i in range(2) for j in range(3)] : Les éléments sont placés dans l ordre lexicographique associé à (i; j) : le plus simple est de se souvenir que cette construction remplace deux boucles for imbriquées dans le même ordre. Ainsi, on obtient la liste [0,1,2,3,4,5]. J Appartenance à une liste (utilisée souvent dans les tests) : (x in a) vaut True x appartient à l. J Opérations sur les listes Concaténation de listes : a + [4,5] renvoie [1,2,3, toto,4,5] Répétitions : a * 3 équivaut à a + a + a Important : On peut ainsi dé nir et initialiser à 0 un tableau a de longueur n par : a = [0]*n Une autre solution est a = [0 for i in range(n)]. J Sous-listes ( slicing ) a[2:4] renvoie [3,"toto"] ; en particulier, a[0:len(a)] renvoie la liste complète De manière générale, la syntaxe des tranches est a[start:stop:step] où start désigne l indice où commencer, stop l indice avant lequel il faut s arrêter et step l incrément à donner à l indice à chaque étape. On peut omettre ces valeurs start, stop, step, auquel cas Python leur donne respectivement les valeurs 0, n et 1, où n est la longueur de la liste. Ainsi a[1::2] désigne la liste des éléments de a de rang impair. J Opérations orientées-objets sur les listes (cf aussi dernier paragraphe) Pour les opérations sur les listes, il vaut mieux privilégier les procédures orientées-objet : - Ajout d un élément x à la n de la liste a : a.append(x) - Suppression et a ectation d un élément : a.pop(i) supprime le i-ième élément et renvoie sa valeur. La valeur par défaut de i est le dernier indice : a.pop() supprime le dernier élément de la liste. - Concaténation de deux listes (modi e la liste a) : a.extend(b) - Insertion d un élément x en position i : a.insert(i,x) - Tri (rapide) de la liste (d enteirs ou de ottants) : a.sort() - Inversion de la liste : ; a.inverse() - Suppression de l élément en position i : del a[i] et plus généralement del a[i:j] - Suppression de la première occurrence de x : a.remove(x) Remarque : Les procédures tri, extend, insert, del et remove sont de type None. Exemple : a = [4,1,3] ; a.sort() ; a.append(2) ; print(a) # a che [1; 3; 4; 2]

J Copie b = list(a) revient à faire une copie (physique) du tableau a: Remarque : Autre méthode possible : b = [a[i] for i in range(len(a))] Autres structures Les di érences les plus importantes entre les di érents types d objets sont : - mutable / non mutable : les listes, ensembles et dictionnaires sont mutables, pas les autres. - ordonné / non ordonné : les listes, chaînes, tuples et ranges sont «ordonnés» dans le sens où l ordre dans lequel ils renvoient leurs éléments est bien dé ni. Ce n est pas le cas a priori pour for x in {1, 2, 3}. - paresseux / «normal» : un itérateur paresseux ne calcule ses éléments que quand on le lui demande. Par exemple, range(10**10) ne contient pas vraiment 10 10 entiers : il les créera au fur et à mesure des besoins. J Caractères et chaînes de caractères (string) : Chaîne : coco ou "coco" ; "c" représente un caractère ( = chaîne de longueur 1) Longueur : len("coco") ; concaténation : "coco" + "rico" Eléments d une chaîne s : s[i] est le caractère d indice i, par exemple "coco"[0] est le caractère "c" Remarque : Les éléments ne peuvent pas être modi és comme dans une liste (les chaînes sont non mutables ). J Piles Liste munies des opérations l.pop() et l.append(x) qui respectivement suppriment le dernier élément et ajoute l élément x en n de liste (ce qui équivaut à l += [x] ou même à l[len(l):len(l)] = [x]). J Ensembles Ensembles (set) : {1,1,2,4} désigne l ensemble f1; 2; 4g Remarque : set convertit un itérable (souvent des listes) en ensemble, par exemple set([1,1,2,4]) Remarque : Ne pas confondre l ensemble vide set() avec le dictionnaire vide {} J Tuples J Tuples : L exemple classique est celui des couples : (a,b) noté aussi a,b. De même les triplets (a,b,c), etc. Les tuples ne sont pas mutables : On accède aussi aux éléments comme pour les listes, mais on ne peut pas les modi er. Par exemple, a = (1,2) ; print(a[0]) a che 1. L a ectation est possible directement dans les tuples : (x,y,z) = (1,2,3) Ainsi, pour échanger les valeurs de deux variables, il su t donc de considérer : (x,y) = (y,x). Attention : Une fonction prenant en argument un couple n est pas la même chose qu une fonction prenant en argument deux variables. En pratique, on ne prend jamais des tuples en argument (on leur préfère les listes). En revanche, il arrive souvent que les fonctions renvoient des tuples (notamment des couples). J Dictionnaires (= tables d association)

Essentiellement, un dictionnaire est un ensemble de couples (clé,valeur), où valeur peut être n importe quel objet (un entier, une liste, une fonction,...) et clé est un objet hachable. Pour faire simple, les objets hachables sont les objets non mutables, typiquement des nombres (entiers ou ottants), des chaînes de caractères ou des tuples, mais pas des listes ni des ensembles. On peut voir un dictionnaire comme une généralisation d un tableau (ou vecteur), qui au lieu d être indexé par les entiers de 0 à n 1 est indexé par des clés arbitraires. On peut dé nir un dictionnaire soit directement : dico = { a : 3, b : 2, c : 1, 0 : 0}) ; dico_vide = {} soit à partir d une liste de couples : couples = [( a,3),( b,2),( c,1),(0,0)] d = dict(couples) Ajout d un élément à un dictionnaire : d[c]=v ; suppression : del dico[ a ] Appartenance : (c in d) renvoie True ssi c est une clé. Itération : [k for k in d] permet d itérer sur les clés d un dictionnaire. Modules ( = bibliothèques) Un module est en pratique un chier Python contenant des dé nitions de fonctions (ou de classes). Pour charger le module math : import math. Ensuite, on utilise alors math.log Variante conseillée : from math import *. Ensuite, on utilise alors log directement au lieu de math.log. Fonctions classiques : sqrt, sin, exp,, pi et e, floor et ceil (donnant E(x) = bxc et dxe). Autres modules courants : from scipy import * # calcul numérique from numpy import * # calcul vectoriel, par exemple array from matplotlib.pyplot import * # fonctions graphiques, par exemple plot Remarque : matplotlib est une librairie de modules graphiques. from random import randrange ; nombrealeatoire = randrange(1000) from cmath import * # nombres complexes Remarque : Dans la littérature, on utilise souvent la syntaxe suivante : import numpy as np Ce qui permet ensuite d utiliser l abréviation np.array au lieu de numpy.array Instructions de programmation J A ectation des variables = Exemple fondamental : L instruction x = x + a ajoute la valeur de a à la valeur de x: Abréviation : x += a signi e x = x + a ; de même avec x *= a signi e x = x* a. Attention à ne pas confondre = (a ectation) et == (symbole d égalité dans les équations).

Exemple important : L échange de variables. La suite d z=x ; x=y; y=z ; permet d échanger les valeurs respectives de x et y: En fait, Python autorise l assignation sur le couple (x; y) en écrivant x,y = y,x J Branchements et expressions conditionnels : IF if test : if test : else : if test1 : elif test2 : else : Exemple : L instruction if x<y : m = x else : m = y attribue à la variable m le maximum des valeurs de x et y. Expression conditionnelle : expression1 if condition else expression2 Exemple : (x if x<y else y) J Répétitions inconditionnelles : boucles FOR Syntaxe : for x in l : (x) Dans certains cas, l instruction dépend à la fois de la valeur de l élément mais aussi de l indice. On utilise alors : for i in range(len(l)) : instruction(i,l[i]) Remarque : L instruction break au seind une instuction dans une boucle provoque la sortie immédiate de la boucle. J Types d objets itérables

Listes [1,2,3], chaînes de caractères 123, tuples (1,2,3), les intervalles range(1:4), les ensembles {1,2,3}, les dictionnaires { a =1, b =2, c =3} Exemple : for x in 123 : print(x) Exemple : Filtrage des tuples : for x,y in [(1,1),(1,2),(2,3)] : print(x+y) Listes dé nies (par extension) à l aide d une boucle : [ f(i) for i in range(0,n)] J Répétitions conditionnelles : boucles WHILE Syntaxe : while test : Exemple. La suite d x = 1 while x<100 : x = 2*x # on pourrait aussi écrire x = 2*x attribue à x la plus petite puissance de 2 qui est strictement supérieure à 100, à savoir 128. Evaluation paresseuse : while test1 and test2 : n équivaut pas à while test2 and test1 : Les tests sont évalués dans l ordre où ils sont écrits. Par exemple, while i<=n-2 and a[i+1]==a[i] :... Fonctions et procédures J Syntaxe : def nom_de_la_fonction ( arguments ) : corps_de_la_fonction L appel d une procédure se fait en utilisant le nom de la procédure complété entre parenthèses des paramètres correspondants aux arguments. Exemple : def factorielle(n) : x = 1 for i in range(1,n+1) : x = x*i # On peut écrire l instruction sous la forme : x *= i return x Une fois déclarée la procédure f actorielle; l instruction factorielle(5) renvoie 120, et plus généralement, si n est un entier naturel, factorielle(n) renvoie la valeur de n!: Exemple : La fonction division renvoie le reste de la division euclidienne de a par b; où a 2 N et b 2 N : def division(a,b): while a >= b :

a = a-b # On peut écrire l instruction sous la forme : a -= b return a J Instruction return La valeur de retour d une fonction est obtenue par une instruction (return valeur) dans le corps de la fonction. Il peut y avoir plusieurs return, mais on sort de la procédure dès le premier return rencontré. J Type None Python propose le type NoneType, dont la seule valeur est None : c est une représentation du rien, de l absence de valeur. La séquence des arguments d une fonction peut très bien être vide. Si f est une telle fonction, l instruction y=f() appelle la fonction (provoque son exécution) et place le résultat dans la variable y. On notera que les parenthèses sont indispensables, pour distinguer l objet f qui est une fonction de l objet f() qui est le résultat d un appel à cette fonction. Dans un tel cas, il est préférable de penser que f prend tout de même un argument, à savoir la valeur None. Remarque : L oubli de return est une erreur classique. Dans ce cas, la fonction renvoie la valeur None. Remarque : Un a chage obtenu par print dans le corps d une fonction ne doit pas être considéré comme le résultat de la fonction (c est un simple e et de bord ). D ailleurs la fonction print renvoie la valeur None. Remarque : un return vide (c est-à-dire suivi d aucune expression) renvoie la valeur None. Exemple : def f(x) : print (x*x) # Ici, f(2) a che 4 et renvoie la valeur None def g(x) : return x*x # Ici, g(2) renvoie la valeur 4 ; on peut par exemple utiliser print(g(2)) J Variables locales, variables globales : Les variables locales sont des variables internes à la procédure : elles ne modi ent pas les variables de l environnement (même si elles portent le même nom). En revanche, si on veut qu une procédure puisse modi er une variable de l environnement, il faut la déclarer comme variable globale. Exemple : def essai(...) global x ;... J Fonction anonymes : En Python, une fonction lambda est une fonction anonyme (à laquelle on n a pas donné de nom), et qu on peut appliquer à la volée dans une expression. La syntaxe est : lambda paramètres : expression Exemple : list(map(lambda x = x*x,range(0,5)) équivaut à [x*x for x in range(0,5)]. J Arguments par défaut : Une fonction peut être dé nie avec davantage d arguments qu elle n est utilisée. Dans ce cas, les arguments supplémentaires doivent avoir une valeur par défaut. Exemple : def essai(x=1,y=2,z=3) : return(x*y*z) print(essai(2)) a che 12, car la valeur de x est 2 et les valeurs de y et z sont les valeurs par défaut 2 et 3: Et de même, print(essai()) a che 6:

Adresses ( = références) et passage des arguments par références J Une référence est une adresse indiquant où la donnée se trouve en mémoire. Lors d une a ectation x = y, on stocke dans la case mémoire de nom x l adresse se trouvant dans la case mémoire de nom y. Par exemple, après les y = 2 ; x = y ; y = 3, la valeur de x vaut 2. L a ectation par adresses (on dit généralement par référence) n a d importance que dans le cas où un objet est mutable. En Python, il existe en e et deux types d objets: les mutables (listes, dictionnaires, ensembles) et les non mutables (entiers, nombres ottants, chaînes de caractères, tuples). Par exemple, si b = [0,0,0], l instruction b[0] = 1 modi e la valeur référencée par b mais ne modi e par l adresse de b. Si a et b sont des listes, l instruction a = b est très rapide car elle consiste seulement à placer dans a l adresse de b. Après, a et b ont la même référence. Ainsi, après les b = [0,0,0] ; a = b ; b[0] = 1, les deux listes a et b ont la même référence et valent [1,0,0]. Remarque : id(x) renvoie l adresse de la valeur de x. Ainsi, l égalité x == y compare les valeurs, alors que id(x) == id(y) compare les adresses des valeurs de x et y. Le premier test peut être vrai sans que le second le soit. J Passage des arguments des fonctions par références Exemple : def modifie(a) : a[0] = a[0] + 1 Un appel de la fonction modifie (qui est de type None) sur une liste (non vide) va ajouter un au premier terme de la liste. On dit souvent que modifie est une procédure (plutôt qu une fonction). En Python, les arguments des fonctions sont toujours passés par référence (en fait par valeur mais les valeurs en question sont des références). Autrement dit, ces références ne peuvent être changées car elles sont passées par valeur. Récursivité Une fonction (ou procédure) récursive est une procédure qui s appelle elle-même. Exemple : def factorielle(n) : if n==0 : return 1 else : return n*factorielle(n-1) Exemple : def division(a,b) : if a<b : return a

else : return division(a-b,b) Tableaux (array) (cf aussi le document sur le calcul numérique) J Avec le module numpy, on peut dé nir et utiliser des tableaux (array) : from numpy import * J Construction de tableaux (vecteurs et matrices) : X = array([1,1,1]) ; M = array([[1,2,3],[1,1,1]]) Remarque : On construit souvent les vecteurs à partir d une liste l qu on convertit en tableau à l aide de array(l), et les matrices (tableaux à deux dimensions) en utilisant une liste de listes, par exemple [[1,2,3],[1,1,1]]. M = array([[1,2,3],[1,1,1]]) dé nit M = 1 2 3 1 1 1 Remarque : Contrairement aux listes, les éléments d un tableau doivent être du même type (entier, ottants,...). J Les commandes zeros(n) et zeros(n,p) créent des vecteurs et matrices de coe cients initialisés à 0. J M.shape renvoie le couple (n; p) donnant respectivement les nombres de lignes et de colonnes. Remarque : On pourrait aussi dé nir n = len(m) et p = len(m[0]). J Sur les tableaux, les opérations s e ectuent terme à terme. Ainsi, array([1,1,1])+array([1,0,1]) renvoie : array([2,0,2]), à ne pas confondre avec l addition sur les listes : par exemple, [1,1,1]+[1,0,1] vaut [1,1,1,1,0,1]. a = array([1,0,2]) ; exp(a) renvoie le tableau array([2.71828183,1.,7.389056099]) J dot(m,x) renvoie le produit matriciel M X (produit de matrices ou de vecteurs). Ne pas confondre dot(m,m) avec M**2 (qui consiste à mettre au carré tous les coe cients de M). Copies et conversions J Les fonctions int, float, str, list, array, set permettent de convertir un objet en un objet de type di érent. Exemple : a = float(2) équivaut à a = 2.0 ; s = str(2) équivaut à s = "2" Exemple : Pour dé nir le tableau [0; 1 5 ; 2 5 ; 3 5 ; 4 5 ; 1], on peut utiliser l une des deux suivantes : from numpy import * ; array(range(6))/5 ; array([i/5 for i in range(6)]) J Les commandes str, list, array permettent aussi de faire une copie (physique) des chaînes, listes, tableaux. Exemple : a = [1,2,3] ; b = list(a) ; On pourrait aussi faire une copie à l aide de : b[0::len(a)] = a Remarque : Les modi cations ultérieures de b ne modi ent pas a. Ce ne serait pas le cas si on avait choisi : b = a Programmation orientée objet

J La programmation procédurale maintient une séparation stricte entre code et données : Les variables d une part, les procédures d autre part. Les procédures utilisent les valeurs des variables ou agissent sur les variables. Or, il se trouve que beaucoup d opérations sont communes à des objets du même type. Dans un langage orienté objet, les opérations sont dé nies en tant que propriété de l objet. Python utilise la dot syntax pour accéder aux attributs des objets, selon la syntaxe objet.methode(arguments). ( a = a + [0] Considérons les deux suivantes sur la liste a : a.append(0) Dans les deux cas, l e et est d ajouter à la liste a l élément 0 en n de liste. Dans la seconde instruction, on applique la méthode append à l objet a, qui ici est une liste. Dans le premier cas, pour créer la liste a + [0], Python crée une copie de a, auquelle il ajoute l élément 0. Le coût est proportionnel à la longueur de a, et l adresse de a est donc modi ée par l instruction a = a + [0]. En revanche, l instruction a.append(0) opère directement sur la liste référencée par a en lui ajoutant 0. Le coût est constant (en fait en moyenne), et l adresse de a n est pas modi ée par l instruction a.append(0). Remarque : Considérons les deux fonctions : def f(a) : a = a + [0] def g(a) : a.append(0) Autrement dit, l instruction a = a + [0] dans f crée une variable locale a : ainsi, la variable globale a n est pas modi ée). En revanche, a est un objet dans g, qui est modi é par la procédure g (les opérations sont e ectuées sur l objet, et plus précisement sur la valeur associée à la référence de a). J Une méthode n est en fait rien d autre qu une fonction, mais une fonction qui est associée à un objet. Elle fait partie de la dé nition de cet objet, ou plus précisément de la classe particulière à laquelle cet objet appartient (nous étudierons ce concept de classe plus tard). Mettre en oeuvre une méthode associée à un objet consiste en quelque sorte à faire «fonctionner» cet objet d une manière particulière. Par exemple, on met en oeuvre la méthode methode4(self,...) d un objet objet3, à l aide d une instruction du type : objet3.methode4(...), c est-àdire le nom de l objet, puis le nom de la méthode, reliés l un à l autre par un point. Ce point joue un rôle essentiel : on peut le considérer comme un véritable opérateur. Dans l exemple ci-dessus, en utilisant a.append(0), on applique la méthode append à l objet a qui est ici une liste. En l occurrence, la méthode append() qui est en fait une fonction spéci que des listes, a pour e et d ajouter un élément par la n. L élément à ajouter est transmis entre parenthèses, comme tout argument qui se respecte. On obtient un résultat similaire si on utilise à la place a = a + [b]. Cette façon de procéder est cependant moins rationnelle et moins e cace, car elle consiste à redé nir à chaque itération de la boucle une nouvelle liste a, dans laquelle la totalité de la liste précédente est à chaque fois recopiée avec ajout d un élément supplémentaire. En revanche, lorsque l on utilise la méthode append(), l ordinateur procède bel et bien à une modi cation de la liste existante (sans la recopier dans une nouvelle variable). Cette technique est évidemment plus rapide.

J Dé nition d une classe d objets et de ses attributs Dans l exemple suivant, on dé nit une nouvelle classe d objets, appelés complexe. Les attributs d un complexe sont dé nis à l aide de la fonction spéciale init (qu il faut écrire avec une paire de double _ ). Les attributs d un objets sont écrits sous la forme objet.attribut. Le mot-clé self représente l objet qui sera utilisé ultérieurement. class complexe : def init (self,x,y) : self.re = x ; self.im = y def module(self) : return (self.re**2+self.im**2)**(1/2) Ainsi, on dé nit ici deux attributs re et im aux objets de la classe complexe. On peut aussi dé nir des fonctions (appelées méthodes) qui sont elles aussi attachées aux objets de la classe complexe. Ainsi en est-il de la fonction module. Une fois dé ni la nouvelle classe d objets et ses attributs, on peut dé nir un objet : z = complexe(3,4) print(z.re) # a che 3 print(z.module()) # a che 5:0