Cours d Informatique en MPSI. Philippe GAILLARD et Vincent BAYLE Lycée Pierre de Fermat

Documents pareils
Présentation du langage et premières fonctions

TP 1. Prise en main du langage Python

Initiation à la programmation en Python

STAGE IREM 0- Premiers pas en Python

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

Algorithmique et Programmation, IMA

Chapitre 2 Devine mon nombre!

2 Comment fonctionne un ordinateur, dans les grandes lignes

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

Recherche dans un tableau

L informatique en BCPST

Représentation d un entier en base b

Utilisation d objets : String et ArrayList

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Découverte de Python

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)

Introduction à MATLAB R


Licence Sciences et Technologies Examen janvier 2010

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

Représentation des Nombres

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

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

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

Logiciel de Base. I. Représentation des nombres

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

V- Manipulations de nombres en binaire

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

INF 321 : mémento de la syntaxe de Java

Programmer en JAVA. par Tama

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

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

Algorithme. Table des matières

Solutions du chapitre 4

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Introduction au langage C

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

1 Recherche en table par balayage

Initiation à la Programmation en Logique avec SISCtus Prolog

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

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

Programmation Web. Madalina Croitoru IUT Montpellier

Les chaînes de caractères

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

Claude Delannoy. 3 e édition C++

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

Corrigé des TD 1 à 5

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

Cours d algorithmique pour la classe de 2nde

Cours d Algorithmique et de Langage C v 3.0

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

R, Bonnes pratiques. Christophe Genolini

1. Structure d'un programme FORTRAN 95

Notions fondamentales du langage C# Version 1.0

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

Les structures. Chapitre 3

Algorithmique et programmation : les bases (VBA) Corrigé

Les classes en Python

Conventions d écriture et outils de mise au point

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Initiation à l algorithmique

OCL - Object Constraint Language

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

ALGORITHMIQUE ET PROGRAMMATION En C

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

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Langage Java. Classe de première SI

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

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

Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN

Chapitre 10. Les interfaces Comparable et Comparator 1

SUPPORT DE COURS. Langage C

Introduction à l algorithmique et à la programmation M1102 CM n 3

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

Calcul Formel et Numérique, Partie I

Chap III : Les tableaux

Les bases du langage Python

IFT2880 Organisation des ordinateurs et systèmes

Analyse de sécurité de logiciels système par typage statique

EXCEL TUTORIEL 2012/2013

Rappels sur les suites - Algorithme

I. Introduction aux fonctions : les fonctions standards

Cours 1 : La compilation

Cours de Probabilités et de Statistique

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

UE C avancé cours 1: introduction et révisions

Initiation à LabView : Les exemples d applications :

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

TP, première séquence d exercices.

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

# 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>

Transcription:

Cours d Informatique en MPSI Philippe GAILLARD et Vincent BAYLE Lycée Pierre de Fermat Année scolaire 2013-2014

2

3 Table des matières 1 Introduction à la programmation structurée 5 1.1 Conseils méthodologiques.................................. 5 1.2 Notion de variable...................................... 6 1.2.1 Définition d une variable............................... 6 1.2.2 Affectation d une variable.............................. 7 1.3 Présentation des principaux types de données en Python................. 10 1.3.1 Données numériques................................. 10 1.3.2 Type booléen..................................... 13 1.3.3 Type chaîne de caractères.............................. 14 1.3.4 Type liste....................................... 17 1.3.5 Type set....................................... 20 1.3.6 Conversion de type.................................. 24 1.4 Structures de contrôle.................................... 28 1.4.1 Tests (ou branchements)............................... 28 1.4.2 Boucles........................................ 29 1.5 Interaction d un programme avec un utilisateur...................... 31 1.5.1 Fonction d écriture : print()............................ 31 1.5.2 Fonction de lecture : input()............................ 31 1.6 Fonctions........................................... 33 1.7 Correction des exercices du chapitre 1............................ 36

4 TABLE DES MATIÈRES

5 Chapitre 1 Introduction à la programmation structurée Sommaire 1.1 Conseils méthodologiques............................ 5 1.2 Notion de variable................................. 6 1.2.1 Définition d une variable.............................. 6 1.2.2 Affectation d une variable............................. 7 1.3 Présentation des principaux types de données en Python......... 10 1.3.1 Données numériques................................ 10 1.3.2 Type booléen.................................... 13 1.3.3 Type chaîne de caractères............................. 14 1.3.4 Type liste...................................... 17 1.3.5 Type set...................................... 20 1.3.6 Conversion de type................................. 24 1.4 Structures de contrôle.............................. 28 1.4.1 Tests (ou branchements).............................. 28 1.4.2 Boucles....................................... 29 1.5 Interaction d un programme avec un utilisateur............... 31 1.5.1 Fonction d écriture : print()........................... 31 1.5.2 Fonction de lecture : input()........................... 31 1.6 Fonctions...................................... 33 1.7 Correction des exercices du chapitre 1..................... 36 1.1 Conseils méthodologiques Proposons quelques étapes clés dans la résolution d un problème d algorithmique. Analyser le problème à résoudre (lire attentivement l énoncé). Déterminer les variables nécessaires à sa résolution : distinguer en particulier les paramètres d entrée, les variables internes à l algorithme qui sont créées lors de son exécution et qui n ont plus aucun intérêt ensuite, les valeurs que doit retourner l algorithme. Élaborer un premier schéma d algorithme. Structure générale d un algorithme en pseudo-code Un algorithme clairement rédigé se code ensuite très facilement, quel que soit le langage de programmation choisi. Dans l ouvrage intitulé Structure and Interpretation of Computer Programs, on peut lire les programmes doivent être écrits pour être lus par des gens et accidentellement exécutés par des machines. Il est indispensable d écrire du code en respectant les règles d usage pour le rendre le plus lisible possible, d une part parce qu il est ainsi plus facile de se relire et d autre part, parce qu il est ainsi plus facile d être relu (par un correcteur qui mettra une note en fonction de sa compréhension du code, par un client qui achètera votre programme en fonction de la qualité du code a être adaptable

6 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE Paramètres d entrée :... # on précisera le type des variables d entrée Variables locales :......... # instructions successives à effectuer... Renvoyer... # les variables locales, seront, dans ce type d écriture, # les variables utilisées uniquement par l algorithme considéré # on précisera leur type # valeur finale renvoyée par l algorithme et réutilisable par un autre programmeur, par un autre programmeur qui aura pour tâche de faire fonctionner ensemble les programmes rédigés par différents auteurs,...) Règles pour faciliter la compréhension d un programme. Choisir des noms de variables (resp. de fonctions) explicites en lien avec le rôle ou le contenu des variables (resp. des fonctions). Commenter les différentes étapes du programme (utilisation du caractère # en Python : lors de l interprétation, tous les caractères situés sur la même ligne et à gauche d un caractère # sont ignorés) Documenter les fonctions (en donnant, entre autre, le type des paramètres d entrée, le type de la valeur renvoyée par la fonction,... ). Règles de bonne présentation d un programme en Python (pour faciliter la lecture et la relecture). Placer un espace après une virgule, un point virgule, deux points. Ne pas placer d espace avant une virgule, un point virgule, deux points. Placer un espace de chaque côté d un opérateur. Ne pas placer d espace entre le nom d une fonction et sa liste d arguments. Indenter, conformément à la syntaxe de Python, les instructions successives. 1.2 Notion de variable 1.2.1 Définition d une variable L essentiel du travail effectué par un programme consiste à manipuler des données. Ces données, bien que d origines très diverses, sont numérisées et se ramènent toujours, dans la mémoire d un ordinateur, à une suite finie de nombres binaires. Pour accéder aux données et pour spécifier leur nature, un programme informatique utilise des variables de différents types, quel que soit le langage dans lequel il est rédigé. Définition 1.2.1. Une variable est une zone de la mémoire dans laquelle une valeur est stockée. Aux yeux du programmeur, cette variable est définie par un nom, son nom, tandis que pour l ordinateur, elle est définie par une adresse. Une variable est une référence désignant une adresse mémoire, c est à dire l emplacement précis de la mémoire vive dans lequel est stokée la valeur de la variable. De plus, afin de sélectionner l ensemble des valeurs possibles pour une variable, on lui attribue un type qui renseigne le langage sur la nature des contenus autorisés et donc sur les opérations usuelles qui pourront être effectuées ou pas avec cette variable. Le type peut être, par exemple, nombre entier, nombre réel, chaîne de caractères,... (voir le paragraphe 1.3) Ainsi, une variable informatique var est caractérisée par 1. son nom (pour l utilisateur) qui est var, l adresse à laquelle elle renvoie pour l ordinateur (donnée en Python par l instruction id(var)),

1.2. Notion de variable 7 2. son type, auquel on accède en Python avec la fonction type(var), 3. sa valeur, à laquelle on accède (ou on réfère) dans un programme en écrivant var, à savoir le nom de la variable. 1 >>> var = "Python c est bon" 2 >>> id(var) # adresse memoire 3 3044820352 4 >>> type(var) # type 5 <class str > 6 >>> var # valeur 7 "Python c est bon" Remarque 1.2.1. Nous utiliserons, pour nommer des variables des suites de caractères non accentués, écrits avec des lettres minuscules, des chiffres et le caractère souligné, en évitant soigneusement les mots réservés qui ont un sens pour le langage (and, as, assert, break,...) 1 >>> and = 1 2 SyntaxError: invalid syntax 3 >>> break = 10 4 SyntaxError: invalid syntax 5 >>> nom_var = 12 6 >>> nom_var 7 12 Attention Python est sensible à la casse ce qui signifie que les caractères majuscules et minuscules sont distingués. Par exemple, Var, VAR, var désignent trois variables différentes. Enfin, attention, un nom de variable ne peut pas commencer par un chiffre : 1 >>> _var = 1 + 4 ; 2 >>> _var 3 5 4 >>> 4var = -1 5 SyntaxError: invalid syntax 1.2.2 Affectation d une variable Pseudo-code Affectation de la variable var à la valeur 2013 Code Python var 2013 var = 2013 Remarques 1.2.1. 1. En Python, la déclaration d une variable (annonce de son existence en donnant son nom et son type) et son initialisation (c est à dire sa première affectation) sont réalisées en même temps par l opérateur d affectation = (l opérateur d affectation en Python est le signe =, mais attention, ce n est en aucun cas une égalité au sens mathématique!). 1 >>> x 2 Traceback (most recent call last): 3 File "<pyshell#413>", line 1, in <module> 4 x 5 NameError: name x is not defined 6 >>> x = 2013 7 >>> x 8 2013

8 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE 2. Enfin, observons l exemple suivant : 1 >>> var = [1,0,2] 2 >>> type(var) 3 <class list > 4 >>> nb = 1.5 5 >>> type(nb) 6 <class float > 7 >>> nb1 = 1.5 ; nb2 = 7 8 >>> type(nb1) ; type(nb2) 9 <class float > 10 <class int > En Python, lors de la déclaration d une variable, bien que le programmeur ne spécifie pas le type de la variable, l exécution de l affectation attribue automatiquement et immédiatement le type qui lui semble le plus pertinent compte tenu de la valeur affectée à la variable (voir aussi le commentaire 5 à propos de l exemple 1.6). On dit que le typage des variables de Python est un typage dynamique (par opposition au typage statique des langage C++ et java par exemple, langages dans lesquels la déclaration d une variable se fait en annonçant son nom et son type, et c est après cette étape seulement qu il devient possible de lui assigner une valeur qui doit être compatible avec le type déclaré) L exemple suivant illustre la capacité d adaptation de Python : 1 >>> a = 9 ; type(a) 2 <class int > 3 >>> b, c = a/2, a/3 ; type(b) ; type(c) # / est l operateur de division 4 <class float > # sur les donnees numeriques 5 <class float > 3. La modification du contenu d une variable se fait en effectuant une nouvelle affectation de cette variable. Du point de vue de la rigueur informatique, cette nouvelle affectation doit être cohérente le type de la variable considérée. Nous nous efforcerons de respecter cette règle. Toutefois, puisque Python est un langage faiblement typé, il autorise un changement de type lors d une nouvelle affectation (quant à nous, nous préfèrerons changer de nom de variable pour éviter de jongler avec des variables dont le type change au cours de l exécution d un programme) : 1 >>> a = 3.0 ; type(a) 2 <class float > 3 >>> a = mpsi1 ; type(a) 4 <class str > 4. Il faut toujours déclarer (par l affectation en Python) une variable avant de l utiliser : 1 >>> a = b + 3 2 Traceback (most recent call last): 3 File "<pyshell#591>", line 1, in <module> 4 a = b + 3 5 NameError: name b is not defined 6 >>> b = -4 7 >>> a 8 Traceback (most recent call last): 9 File "<pyshell#593>", line 1, in <module> 10 a 11 NameError: name a is not defined 12 >>> a = b + 3 13 >>> a 14-1 Exercice 1.2.1. Échange du contenu de deux variables. Dans l interpréteur Python, on suppose écrites les instructions suivantes :

1.2. Notion de variable 9 1 >>> a = [1, 1, 1] 2 >>> b = [0, 1] 1. Remplir le tableau suivant : instructions successives valeur de la variable a valeur de la variable b >>> a = [1, 1, 1] >>> b = [0, 1] >>> b = a >>> a = b 2. Proposer une suite d instructions permettant d aboutir à l échange du contenu des deux variables a et b. Exercice 1.2.2. Permutation circulaire du contenu de trois variables. Dans l interpréteur Python, on suppose écrites les instructions suivantes : 1 >>> a = 11 2 >>> b = c++ 3 >>> c = Python Proposer une suite d instructions permettant d aboutir à 1 >>> a 2 c++ 3 >>> b 4 Python 5 >>> c 6 11 Le langage Python possède deux variantes autour de l opérateur d affectation, l une permet d affecter la même valeur à plusieurs variables, l autre permet d affecter plusieurs variables en n utilisant qu une seule fois l opérateur d affectation. Affectation simple 1 >>> var = 1 2 >>> var 3 1 Affectation multiple 1 >>> var_x = var_y = 2 2 >>> var_x ; var_y 3 2 4 2 Affectation parallèle 1 >>> var_x, var_y, var_z = 2, 5, 7 2 >>> var_x ; var_y 3 2 4 5 5 >>> var_z 6 7 Exercice 1.2.3. Retour sur les exercices d échange du contenu de plusieurs variables. Proposer des solutions particulièrement courtes pour résoudre les exercices 1.2.1 et 1.2.2 grâce aux différentes utilisations possibles de l opérateur d affectation en Python.

10 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE 1.3 Présentation des principaux types de données en Python 1.3.1 Données numériques Type nombre entier Définition 1.3.1. Une variable est de type nombre entier, codé int (integer) en Python, si sa valeur est un entier relatif stocké en valeur exacte. Remarque 1.3.1. Une variable de type int, nombre entier, est définie par l affectation d une suite de chiffres ne commençant pas par 0 : 1 >>> nb1 = 2030 2 >>> type(nb1) 3 <class int > 4 >>> nb2 = 0221 5 SyntaxError: invalid token # Python refuse l affectation!!! surprenant? 6 >>> type(0221) 7 SyntaxError: invalid token # en fait 0221 n a pas de type, ce qui explique 8 # le refus d affectation precedent Opérations usuelles sur les nombres entiers opérateurs d addition + et de soustraction - 1 >>> p = 121 ; q = 12 2 >>> d = q - p ; d ; type(d) 3-109 4 <class int > 5 >>> s = q + p ; s ;type(s) 6 133 7 <class int > opérateur de multiplication : * 1 >>> p = 8 ; q = 3 2 >>> prod = p * q 3 >>> prod ; type(prod) 4 24 5 <class int > opérateur reste de la division euclidienne de p par q : % 1 >>> p = 15 2 >>> p % 2 3 1 opérateur quotient de la division euclidienne de p par q : // (noter la différence avec l opérateur / qui renvoie un entier de type float ) 1 >>> p = 15 2 >>> p // 2 3 7 4 >>> p = 333 ; q1 = 333 // 11 ; q2 = 333 / 11 5 >>> q1 ; type(q1) 6 30 7 <class int > 8 >>> q2 ; type(q2) 9 30.272727272727273 10 <class float > Remarque 1.3.2. Voici une réaction rassurante :

1.3. Présentation des principaux types de données en Python 11 1 >>> 1/0 2 Traceback (most recent call last): 3 File "<pyshell#63>", line 1, in <module> 4 1/0 5 ZeroDivisionError: division by zero Type nombre à virgule flottante Définition 1.3.2. Une variable est de type nombre à virgule flottante, codé float en Python, si sa valeur est un nombre réel stocké en valeur approchée sous la forme d un triplet (s,m,e) où s désigne le signe, m est la mantisse et e désigne l exposant. Un tel triplet code le nombre réel s m b e en notation scientifique où b est la base de représentation, à savoir 2. En faisant varier e, on fait flotter la virgule décimale. Nous reviendrons ultérieurement sur la façon dont sont codés les nombres réels. Remarque 1.3.3. Contrairement aux nombres de type int, lors de la définition d un nombre de type float, si des zéros inutiles précèdent son écriture décimale, Python accepte l affectation et les supprime automatiquement par la suite. 1 >>> 0123.04 # valeur definie 2 123. 04 3 >>> type(0123.04) 4 <class float > 5 >>> a = 00010.0 # valeur definie 6 >>> type(a) 7 <class float > 8 >>> 00010 # valeur non definie 9 SyntaxError: invalid token

12 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE Opérations usuelles sur les nombres réels opérateur de comparaison stricte : < (l expression obtenue est booléenne) 1 >>> a = 1.5 ; b = 2.6 2 >>> a < b ; type(a<b) 3 True 4 <class bool > opérateur de comparaison large : <= (l expression obtenue est booléenne) 1 >>> a = 1.5 ; b = -2.6 2 >>> a <= b ; type(a<b) 3 False 4 <class bool > opérateur de division : / 1 >>> a = 1.5 ; b = -2.6 2 >>> c = a/b 3 >>> c ; type(c) 4-0.5769230769230769 5 <class float > opérateurs d addition + et de soustraction - 1 >>> a = 1.5 ; b = -2.6 2 >>> a + b ; a - b 3-1.1 4 4.1 opérateur de multiplication : * 1 >>> a = 1.5 ; b = -2.6 2 >>> a * b 3-3.9000000000000004 opérateur puissance : ** Les variables a et b étant toutes les deux de type int ou toutes les deux detypefloatmaisaveclacondition supplémentaire a> 0, a puissance b peut se calculer en écrivant soit a**b soit pow(a,b). 1 >>> 3**0 2 1 3 >>> 0**0 # convention a retenir 4 1 5 >>> 0.1**(-3) 6 999.9999999999999 7 >>> 3**2 8 9 9 >>> pow(3,2) 10 9 11 >>> pow(2,3) 12 8 # importance de l ordre des arguments 13 >>> 1.732**2 14 2.999824 15 >>> (-2.1)**3 16-9.261000000000001 17 >>> 1.732**(-2.2) 18 0.2986720941961939 Remarques 1.3.1. 1. Lorsque l opérateur +, -, *, / ou **, agissant entre deux variables numériques de type float se trouve évalué entre une variable de type float et l autre de type int, il renvoie le résultat attendu de type float en convertissant automatiquement la variable de type int en la valeur correspondante de type float. 1 >>> p = 4 ; type(p) 2 <class int > 3 >>> a = 3.14 ; type(a) 4 <class float > 5 >>> prod = a * p ; quot = a / p 6 >>> prod ; type(prod) 7 12. 56

1.3. Présentation des principaux types de données en Python 13 8 <class float > 9 >>> quot ; type(quot) 10 0. 785 11 <class float > Même si le résultat d une opération sur des variables de type float est un entier, le type de ce résultat est float : 1 >>> a = 1.5 ; 2 >>> b = 2 * a 3 >>> b ; type(b) 4 3.0 5 <class float > 2. On peut tester une puissance non entière d un nombre strictement négatif (objet mathématique non défini a priori) : 1 >>> a = (-2)**0.5 2 >>> print(a) 3 (8.659274570719355e-17+1.4142135623730951j) 4 >>> type(a) 5 <class complex > Il semblerait que ce soit une valeur approchée du nombre complexe i 2. Pourquoi? est-ce légitime? pourquoi ne pas avoir choisi i 2? 1.3.2 Type booléen Définition 1.3.3. Une variable est de type booléen, codé bool (boolean) en Python, si elle ne peut prendre que deux valeurs, True (vrai) ou False (faux). 1 >>> var = True 2 >>> type(var) 3 <class bool > 4 >>> var 5 True

14 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE Opérateurs de construction de variables booléennes opérateur d égalité : == (entre deux variables n ayant pas nécessairement le même type) 1 >>> b = 1 2 >>> a = (b == 3) 3 >>> a 4 False 5 >>> ch1 = "Python" ; ch2 = "python" ; ch3 = python 6 >>> a = (ch1 == ch2) ; a 7 False 8 >>> b = (ch1 == 2013) ; b 9 False 10 >>> c = (ch2 == ch3) ; c 11 True # voir les differentes facons de declarer 12 # une chaine de caracteres opérateur différent de :!= (entre deux variables n ayant pas nécessairement le même type) 1 >>> b = rh ; c = dh 2 >>> a = ( b!= c) 3 >>> a 4 True 5 >>> e = (a!= [1,0]) ; e 6 True fonction de négation : not() (les variables booléennes a!= b et not(a == b) ont la même valeur) 1 >>> a = True ; b = False 2 >>> not(a) 3 False 4 >>> a == not(b) 5 SyntaxError: invalid syntax 6 >>> a == ( not(b) ) #importance des parentheses! 7 True opérateurs de comparaison : < et <= (entre variables de type int ou float, Python effectue automatiquement la conversion pour répondre au test) 1 >>> a = 2.7 ; b = 3.1 2 >>> type(a <= b) 3 <class bool > 4 >>> a <= b 5 True 6 >>> a = 1.5 ; b = 2 # a et b n ont pas le meme type 7 >>> type(a <= b) ; a <= b 8 <class bool > 9 True Opérations logiques sur les variables booléennes opérateur et : and 1 >>> b = 3 ; c = 4 2 >>> a = ( (b == 3) and (c - b) == 1) ; a 3 True 4 >>> d = ( (b == 4) and (b - c) == 1) ; d 5 False opérateur ou : or 1 >>> b = 3 ; c = 4 2 >>> a = ( (b == 4) or (c - b) == 1) ; a 3 True 4 >>> d = ( (b == 4) or (b - c) == 1) ; d 5 False 1.3.3 Type chaîne de caractères Définition 1.3.4.

1.3. Présentation des principaux types de données en Python 15 Une variable est de type chaîne de caractères, codé str (string) en Python, si c est une collection ordonnée de caractères non modifiables délimitée soit par des apostrophes, soit par des triples apostrophes, soit par des guillemets, soit par des triples guillemets. 1 >>> ch0 = Python ; ch1 = c est bon! ; ch2 = "l info" ; ch3 = """c est beau!""" 2 >>> type(ch0) ; type(ch1) ; type(ch2) ; type(ch3) 3 <class str > 4 <class str > 5 <class str > 6 <class str > 7 >>> ch0 ; ch1 ; ch2 ; ch3 8 Python 9 "c est bon!" 10 "l info" 11 "c est beau!" Remarques 1.3.2. 1. Les apostrophes ou les triples apostrophes ou les guillemets ou les triples guillemets sont des délimiteurs, ils ne font pas partie de la chaîne de caractères, leur présence permet au langage Python de reconnaître le type implicite (ici str ) de la variable que l utilisateur veut déclarer. 2. Dans la pratique, si la chaîne de caractères ne contient pas de guillemets (resp. pas d apostrophes), nous la délimiterons par des guillemets (resp. par des apostrophes). Nous réserverons les triples guillemets aux cas où la chaîne contiendrait à la fois des apostrophes et des guillemets. 3. On observera que l affichage d une chaîne de caractères dans l interpréteur de IDLE est entre apostrophes dès qu il n y a pas d apostrophes, entre guillemets s il y a au moins une apostrophe et pas de guillemets. Enfin, si la chaîne de caractères contient au moins une apostrophe et un guillement, l affichage se fait entre apostrophe et dans la chaîne, les apostrophes sont précédées du caractère d échappement \. 1 >>> ch4 = "on met des guillemets s il y a des apostrophes" 2 >>> ch4 3 "on met des guillemets s il y a des apostrophes" 4 >>> ch5 = """il faut des "triples guillemets" s il y a guillemets et 5 apostrophes""" 6 >>> ch5 7 il faut des "triples guillemets" s\ il y a guillemets et apostrophes Pour déclarer la chaîne de caractères vide, il suffit de saisir deux apostrophes consécutivement : 1 >>> ch = 2 >>> type(ch) ; len(ch) 3 <class str > 4 0 5 >>> ch2 = "" # autre moyen de definir la chaine vide 6 >>> ch == ch2 7 True 8 >>> ch3 = str() # autre moyen de definir la chaine vide 9 >>> ch3 10 11 >>> ch3 = ch 12 >>> ch3 == ch 13 True Opérations élémentaires sur les chaînes de caractères Puisqu une chaîne de caractères est une collection, si la variable ch est de type str, on dispose des opérations suivantes :

16 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE x in ch : expression booléenne qui vaut True si x appartient à la liste ch et False sinon, 1 >>> ch = "Python c est bon" 2 >>> P in ch 3 True 4 >>> r in ch 5 False len(ch) : nombre de caractères de la chîne ch, 1 >>> ch = "Python c est bon" 2 >>> len(ch) 3 16 l objet ch est itérable via l instruction for x in ch, 1 >>> ch = "MPSI-1" 2 >>> for x in ch: 3 print(x) 4 M 5 P 6 S 7 I 8-9 1 Opérations usuelles sur les chaînes de caractères : Opération Exemple opérateur de concaténation : + 1 >>> ch1 = demain, ; ch2 = nous travaillerons 2 >>> ch1 + ch2 3 demain,nous travaillerons 4 >>> ch1 + + ch2 5 demain, nous travaillerons opérateur de duplication : * (entre un nombre entier de type int et une chaîne de type str, si l entier est négatif ou nul, le résultat est la chaîne vide) 1 >>> ch = ab 2 >>> 5*ch 3 ababababab 4 >>> ch*3 5 ababab 6 >>> 5.2*ch 7 Traceback (most recent call last): 8 File "<pyshell#355>", line 1, in <module> 9 5.2*ch 10 TypeError: can t multiply sequence by non-int 11 of type float 12 >>> ch * 0 13 14 >>> (-3) * ch 15 Une chaîne de caractères est une collection ordonnée ce qui permet de sélectionner un terme précis d une chaîne de caractères : on peut accéder au i e caractère de la chaîne ch en saisissant ch[i] sous les conditions 0 i len(ch)-1 car les indices commencent à 0. 1 >>> ch = mpsi 2 >>> ch[0] 3 m 4 >>> ch[1] 5 p 6 >>> ch[2] 7 s

1.3. Présentation des principaux types de données en Python 17 8 >>> ch[3] 9 i 10 >>> ch[4] 11 Traceback (most recent call last): 12 File "<pyshell#93>", line 1, in <module> 13 ch[4] 14 IndexError: string index out of range 15 >>> ch[-1] # les indices negatifs entre -len(ch) et -1 permettent 16 i # aussi d acceder aux caracteres de la chaine ch 17 >>> ch[-2] 18 s 19 >>> ch[-3] 20 p 21 >>> ch[-4] 22 m 23 >>> ch[-5] 24 Traceback (most recent call last): 25 File "<pyshell#98>", line 1, in <module> 26 ch[-5] 27 IndexError: string index out of range Exercice 1.3.1. Que valent ch[3], ch[6], ch[7], ch[8], ch[-2], ch[-4], ch[-5] si ch est la chaîne de caractères correspondant à la phrase : Python, c est trop bon!? Remarque 1.3.4. Rappelons qu une chaîne de caractères est non modifiable (voir définition 1.3.3) : 1 >>> ch = mpsi 2 >>> ch[0] = p ; ch[1] = c # tentative de modif en pcsi 3 Traceback (most recent call last): 4 File "<pyshell#19>", line 1, in <module> 5 ch[0] = p ; ch[1] = c 6 TypeError: str object does not support item assignment # ouf! 1.3.4 Type liste La commande range() La commande range() permet de créer des objets de type range listant une suite arithmétique d entiers. 1 >>> var = range(3) 2 >>> type(var) 3 <class range > 4 >>> for x in var: 5 print(x) 6 0 7 1 8 2 Elle est très utile pour créer des listes constituées de suites arithmétiques d entiers, en particulier à l aide de la fonction de conversion list() qui permet de changer un objet de type range en liste : 1 >>> L = list(range(5)) 2 >>> L 3 [0, 1, 2, 3, 4] 4 >>> R = list(range(3,7)) 5 >>> R 6 [3, 4, 5, 6]

18 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE pour faire parcourir à l indice d une boucle for une suite arithmétique d entiers (voir la partie 1.4.2 traitant de la structure de boucle). Définition 1.3.5. Une variable est de type liste, codé list (list) en Python, si c est une collection ordonnée d éléments modifiables séparés par des virgules et délimitée par des crochets. Pour créer une liste, on peut procéder de deux manières différentes : 1. création d une liste par extension : on écrit des objets successifs (éventuellement hétérogènes) séparés par des virgules et entre crochets : 1 >>> L = [1, a, b, 0] 2 >>> type(l); L 3 <class list > 4 [1, a, b, 0] 2. création d une liste par intension : la syntaxe consiste à reproduire la définition mathématique de la liste à décrire, pour définir la liste L0 qui vaut [x+1 x [[0,2]] : 1 >>> L0 = [x + 1 for x in range(3)] 2 >>> L0 ; type(l0) 3 [1, 2, 3] 4 <class list > la liste L1 qui vaut [x 3 +1 x [[0,2]] puis la liste L2 définie par [x 2 x [t 3 +1 t [[0,2]]] : 1 >>> L1 = [x**3 + 1 for x in range(3)] 2 >>> L1 ; type(l1) 3 [1, 2, 9] 4 <class list > 5 >>> L2 = [x * x for x in L1] 6 >>> L2 ; type(l2) 7 [1, 4, 81] 8 <class list > onpeutaussi créer unelisteenintensionparitérationdelavariablexquiparcourtlescaractères de la chaîne ch : 1 >>> ch = "Python" 2 >>> L3 = [2*x for x in ch] 3 >>> L3; type(l3) 4 [ PP, yy, tt, hh, oo, nn ] 5 <class list > Voici deux façons de créer la liste vide : 1 >>> L_vide1 = [] 2 >>> L_vide2 = list() 3 >>> type(l_vide1) ; type(l_vide2) 4 <class list > 5 <class list > 6 >>> L_vide1 == L_vide2 7 True Puisqu une liste est une collection, si la variable L est de type list, on dispose des opérations suivantes : x in L : expression booléenne qui vaut True si x appartient à la liste L et False sinon, 1 >>> L = [1, 2, 3, a, b, c, 10 ] 2 >>> a in L 3 True 4 >>> 10 in L

1.3. Présentation des principaux types de données en Python 19 5 False 6 >>> 10 in L 7 True len(l) : nombre d éléments de la liste L, 1 >>> L = [1, 2, a, b, c ] 2 >>> len(l) 3 5 4 >>> len([]) 5 0 l objet L est itérable via l instruction for x in L, 1 >>> L = [1, 2, 3, 4]; 2 >>> for x in L: 3 print(x*x) 4 1 5 4 6 9 7 16 Opérations élémentaires sur les listes : Opération Exemple opérateur de concaténation: + (cas particulier : ajout d un élément) 1 >>> L = [1, a, 3, oui ] 2 >>> L1 = L + [1, 2, 3] 3 >>> print(l1) 4 [1, a, 3, oui, 1, 2, 3] 5 >>> L2 = L + [ non ] 6 >>> print(l2) 7 [1, a, 3, oui, non ] opérateur de duplication : * (entre un nombre entier de type int et une liste de type list, si l entier est négatif ou nul, le résultat est la liste vide) 1 >>> [1, 3] * 2 2 [1, 3, 1, 3] 3 >>> 3 * [1, 0, 0] 4 [1, 0, 0, 1, 0, 0, 1, 0, 0] 5 >>> (-3) * [1, 0, 0] 6 [] 7 >>> [1, 0, 0] * 0 8 [] Exercice 1.3.2. Mise au carré des éléments d une liste. Écrireunefonctionliste au carre(l) qui prend en entrée une liste L d entiers et qui renvoie une liste de même taille dont chaque élément est le carré de l élément de même indice dans la liste d entrée. On pourra proposer deux solutions. Une liste est une collection ordonnée ce qui permet d extraire un terme précis de la liste : on peut accéder au i e élément de la liste L en saisissant L[i] sous les conditions 0 i len(l)-1 car les indices commencent à 0. 1 >>> L = [-2, 1, 2, 4, 0] 2 >>> L[0] 3-2 4 >>> for i in range(len(l)): 5 print(l[i]) 6-2 7 1 8 2 9 4 10 0

20 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE 11 >>> L[5] 12 Traceback (most recent call last): 13 File "<pyshell#47>", line 1, in <module> 14 L[5] 15 IndexError: list index out of range 16 >>> L[-1] # les indices negatifs entre -len(l) et -1 permettent 17 0 # aussi d acceder aux caracteres de la liste L 18 >>> L[-5] 19-2 20 >>> L[-6] 21 Traceback (most recent call last): 22 File "<pyshell#48>", line 1, in <module> 23 L[-6] 24 IndexError: list index out of range À la différence des chaînes de caractères qui sont des séquences d éléments ordonnés non modifiables, les éléments d une liste sont modifiables (voir définition 1.3.4), il suffit de leur donner une nouvelle affectation : 1 >>> L = [-2, 1, 2, 4, 0] 2 >>> L[0] = 10 3 >>> L[3] = 0 4 >>> L 5 [10, 1, 2, 0, 0] 1.3.5 Type set Définition 1.3.6. Un variable est de type ensemble, codé par set (set) en python, si sa valeur est une collection non ordonnée (ce n est donc pas une séquence comme les listes, les tuples,..., on ne peut donc pas accéder à l élément d indice i comme pour les séquences) d objets deux à deux distincts (pas de doublons) hashable. Pour créer un ensemble, on écrit une suite d objets (éventuellement hétérogènes) séparés par des virgules et entre accolades : 1 >>> ensemble = {1, 2, a, ab, 1} 2 >>> print(ensemble) 3 { a, 1, 2, ab } 4 >>> type(ensemble) 5 <class set > Attention à la subtilité suivante, pour affecter la valeur ensemble vide à une variable, il faut utiliser l instruction = set() et non l instruction = {} : 1 >>> ens_vide = set() 2 >>> print(ensemble_vide) 3 set() 4 >>> type(ens_vide) 5 <class set > # ensemble 6 >>> len(ens_vide) 7 0 # ensemble vide 8 >>> nouvel_objet = {} 9 >>> type(nouvel_objet) 10 <class dict > # dictionnaire! 11 >>> len(nouvel_objet) 12 0 # c est un dictionnaire sans element, donc vide! Puisqu un ensemble est une collection, si la variable ensemble est de type set, on dispose des opérations suivantes :

1.3. Présentation des principaux types de données en Python 21 x in ensemble : expression booléen qui vaut True si x appartient à l ensemble ensemble et False sinon, 1 >>> ensemble = {1, 2, 5, a, z } 2 >>> type(ensemble) 3 <class set > 4 >>> 4 in ensemble 5 False 6 >>> 2 in ensemble 7 True 8 >>> z in ensemble 9 Traceback (most recent call last): 10 File "<pyshell#11>", line 1, in <module> 11 z in ensemble 12 NameError: name z is not defined 13 >>> "z" in ensemble 14 True len(ensemble) : cardinal de l ensemble, 1 >>> ensemble = {1, 2, 5, a, z } 2 >>> type(ensemble) 3 <class set > 4 >>> len(ensemble) 5 5 6 >>> ens_vide = {} # ensemble vide 7 >>> len(ens_vide) 8 0 l objet ensemble est itérable via l instruction for x in ensemble. 1 >>> ensemble = {1, 2, a, z } 2 >>> for x in ensemble: 3 print(x + 1) 4 5 6 Traceback (most recent call last): 7 File "<pyshell#125>", line 2, in <module> 8 print(x + 1) 9 TypeError: Can t convert int object to str implicitly 10 11 >>> ens = { m, t, s } 12 >>> for x in ens: 13 print(x + a ) 14 sa 15 ma 16 ta Opérations ensemblistes usuelles :

22 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE Opération ensembliste opérateur de réunion noté en mathématique et codé par Exemple 1 >>> A = {1, 2, a, b } 2 >>> B = {1, 3, ab, b } 3 >>> union = A B ; type(union) 4 <class set > 5 >>> print(union) 6 { a, 1, 2, b, 3, ab } opérateur d intersection noté en mathématiques et codé par & 1 >>> A = {1, 2, a, b } 2 >>> B = {1, 3, ab, b } 3 >>> intersection = A & B 4 >>> type(intersection) 5 <class set > 6 >>> print(intersection) 7 {1, b } opérateur différence noté \ en mathématique et codé par - 1 >>> A = {1, 2, a, b } 2 >>> B = {1, 3, ab, b } 3 >>> A - B 4 { a, 2} 5 >>> B - A 6 {3, ab } opérateur différence symétrique noté en mathématique et codé parˆ On vérifie que (A\B) (B\A) = A B. 1 >>> A = {1, 2, a, b } 2 >>> B = {1, 3, ab, b } 3 >>> A ^ B 4 { a, 2, ab, 3} 5 >>> (A - B) (B - A) 6 { a, 2, 3, ab } Exercice 1.3.3. Prévoir l affichage qui suit l exécution des instructions suivantes : 1. 1 >>> A = {1, 2} ; B = {3, 2, 1} 2 >>> A & B 3 >>> A B 4 >>> for x in range(3): 5 print(x in B) 2. 1 >>> A = {0, 1, 3} ; 2 >>> for x in A: 3 print(a & {x+1, x*x, x+2}) 3. 1 >>> E = {(1, 2), (1, 1), (2, 1)} ; 2 >>> len(e) 3 >>> for x in E: 4 print(x[0] + x[1]) 4. 1 >>> A = set() ; ens = { a, b, 4}; 2 >>> for x in ens: 3 A = A {2 * x} 4 >>> print(a) Exercice 1.3.4. Mise au carré des éléments d un ensemble fini. Écrire une fonction ensemble au carre(e) qui prend en entrée un ensemble E de type set constitué d entiers et qui renvoie l ensemble des carrés des éléments de E. On pourra adapter la méthode de l exercice 1.3.2. L ensemble renvoyé par la fonction a-t-il le même cardinal que E?

1.3. Présentation des principaux types de données en Python 23 Exercice 1.3.5. Description du produit cartésien de deux ensembles finis. Écrire une fonction produit cartesien(e,f) qui prend en paramètres les ensembles finis E et F et qui renvoie l ensemble E F.

24 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE 1.3.6 Conversion de type Analysons les exemples suivants qui illustrent quelques subtilités liées à l importance de la notion de type d une variable. Exemples 1.3.1. 1. Un opérateur impose, pour être défini, certaines restrictions sur les types de ses arguments : 1 >>> a = "demain" 2 >>> b = 3 3 >>> a % b 4 Traceback (most recent call last): 5 File "<pyshell#53>", line 1, in <module> 6 a % b 7 TypeError: not all arguments converted during string formatting 2. 1 >>> a = 17 # a est de type str 2 >>> b = 3 # b est de type int 3 >>> a * b 4 171717 5 >>> b * a 6 171717 7 >>> a ** b 8 Traceback (most recent call last): 9 File "<pyshell#62>", line 1, in <module> 10 a ** b 11 TypeError: unsupported operand type(s) for ** or pow(): str and int 3. 1 >>> a = demain 2 >>> print(a + 1) 3 Traceback (most recent call last): 4 File "<pyshell#68>", line 1, in <module> 5 print( a + 1 ) 6 TypeError: Can t convert int object to str implicitly 7 >>> print( a + str(1) ) 8 demain1 Présentons maintenant quelques fonctions de conversion de type qu il pourra être utile de manipuler. Conversion int / float La fonction int( ) appliquée à un nombre en virgule flottante r de type float renvoie l entier de type int le plus proche de r situé entre 0 et r (c est donc la partie entière si r 0 et la partie entière plus un si r < 0). 1 >>> r1 = 3.14 2 >>> int(r1) 3 3 4 >>> r2 = -3.14 # la partie enti\ ere de -3.14 est -4 5 >>> int(r2) 6-3 7 >>> int(-0.01) # la partie enti\ ere de -0.01 est -1 8 0 9 >>> int(0) 10 0 11 >>> int(0.01) 12 0 La fonction float( ) appliquée à un nombre entier nb de type int renvoie le nombre en virgule flottante float de mme valeur que nb.

1.3. Présentation des principaux types de données en Python 25 1 >>> nb1 = 314 2 >>> float(nb1) 3 314. 0 4 >>> nb2 = -23 5 >>> float(nb2) 6-23.0 Conversion str / int ou float La fonction int( ) (resp. float()) appliquée à une chaîne de caractères constituée uniquement de chiffres (resp. constituée de chiffres et éventuellement une fois du caractère.) renvoie l entier de type int (resp. le nombre réel de type float ) représenté par cette chaîne. 1 >>> ch1 = 012030 ; ch2 = 012.33 2 >>> type(ch1) ; type(ch2) 3 <class str > 4 <class str > 5 >>> n1 = int(ch1) ; n2 = float(ch1) ; n3 = float(ch2) 6 >>> n1 ; type(n1) 7 12030 # noter la disparition du zero inutile! 8 <class int > 9 >>> n2 ; type(n2) 10 12030.0 11 <class float > 12 >>> n3 ; type(n3) 13 12. 33 14 <class float > 15 >>> n4 = int(ch2) # operation impossible ch2 est incompatible avec int() 16 Traceback (most recent call last): 17 File "<pyshell#709>", line 1, in <module> 18 n4 = int(ch2) 19 ValueError: invalid literal for int() with base 10: 012.33 20 >>> ch3 = 12.34.2 ; n5 = float(ch3) # ch3 est incompatible avec float() 21 Traceback (most recent call last): 22 File "<pyshell#710>", line 1, in <module> 23 ch3 = 12.34.2 ; n5 = float(ch3) 24 ValueError: could not convert string to float: 12.34.2 La fonction str() appliquée à une donnée numérique de type int( ) ou float()) renvoie la chaîne de caractères de type str constituée des chiffres (et éventuellement du caractère.) qui constitue le nombre considéré. 1 >>> a1 = 2013 2 >>> ch1 = str(a1) ; ch1 3 2013 4 >>> ch1 == "2013" 5 True 6 >>> ch2 = str(1.732) ; ch2 7 1.732 8 >>> ch2 == """1.732""" 9 True 10 >>> ch3 = str(0312) # curieux, voyons le type de 0312 11 SyntaxError: invalid token 12 >>> type(0312) # tout s explique, O312 n est pas de type int 13 SyntaxError: invalid token Conversion list / str La fonction list( ) appliquée à une chaîne de caractères renvoie la liste des caractères apparaissant dans la chaîne lue de gauche à droite : 1 >>> ch = "J aime Python"; type(ch) 2 <class str > 3 >>> L = list(ch); type(l) 4 <class list >

26 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE 5 >>> L 6 [ J, " ", a, i, m, e,, P, y, t, h, o, n ] Attention, les apostrophes autour des caractères de la chaîne regroupés dans la liste L ne font pas partie des éléments de la liste L, leur présence permet de préciser le type des éléments de L. 1 >>> ch = "J aime Python"; L = list(ch); 2 >>> L 3 [ J, " ", a, i, m, e,, P, y, t, h, o, n ] 4 >>> type(l[0]) 5 <class str > La fonction str( ) appliquée à une liste renvoie la liste des caractères apparaissant dans la présentation de la liste en extension : 1 >>> L = [0, oui,3]; type(l) 2 <class list > 3 >>> ch = str(l); type(ch) 4 <class str > 5 >>> print(ch) 6 [0, oui, 3] 7 >>> len(ch) 8 13 9 >>> ch[0] ; ch[1] ; ch[2] ; ch[12] 10 [ 11 0 12, 13 ] Conversion list / set. La fonction list( ) appliquée à un ensemble de type set renvoie une liste contenant tous les éléments de l ensemble auquel elle a été appliquée (on ne sait rien a priori de l ordre des éléments dans cette liste puisqu un ensemble n est pas ordonné). 1 >>> ens = {1, aa,2}; L = list(ens) 2 >>> type(l); print(l) 3 <class list > 4 [ aa, 1, 2] La fonction set( ) appliquée à une liste renvoie un ensemble de type set contenant un représentant de chacun des éléments apparaissant dans la liste considérée. 1 >>> L = [1,2,3, a,1]; type(l) 2 <class list > 3 >>> ens = set(l); print(ens); type(ens) 4 { a, 1, 2, 3} 5 <class set > Exercice 1.3.6. Prévoir l affichage qui apparaît à la suite de l exécution des instructions suivantes : 1. 1 >>> L = [ L," ", apprentissage,[1,2]]; len(l) 2 >>> type(l[0]) ; type(l[2]) ; type(l[3]) 3 >>> print(l[0]) ; type(l[0]) ; type(l) 4 >>> ch = str(l) ; type(ch) ; len(ch) 5 >>> ch[0]; ch[1]; ch[2]; ch[3]; ch[4]; ch[5] 6 >>> ch[32]; ch[33]; ch[34] 2. 1 >>> L = [3, a, 0, a, 1]; ens = set(l); len(ens) 2 >>> ens = ens set(range(5)); L = list(ens); L Exercice 1.3.7. Occurrences d un chiffre dans l écriture décimale d un nombre.

1.3. Présentation des principaux types de données en Python 27 1. Écrire un algorithme puis une fonction occurrences(c,nb) qui cherche le nombre de fois qu apparaît le chiffre c dans l écriture décimale de l entier nb (que l on suppose donné par son écriture décimale) 2. En déduire une fonction occurrencemax(nb) qui renvoie le/un des chiffre(s) de l entier nb qui a/ont l occurrence la plus élevée dans l écriture décimale de l entier nb ainsi que la valeur de cette occurrence maximale.

28 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE 1.4 Structures de contrôle Remarques préliminaires communes aux tests et aux boucles. 1. On prendra soin de respecter l indentation tant dans l écriture d un pseudo-code que dans la rédaction d un script en Python. Ceci est d autant plus important que dans le langage Python, l indentation est obligatoire si l on veut que les blocs d instructions soient convenablement interprétés. En fait c est le respect de l indentation des blocs qui permet de s affranchir, en Python, des instructions fin de test si, fin de boucle pour et fin de boucle tant que, ce qui rend le langage Python plus simple et plus léger que le pseudo-code. 2. condition est toujours une variable booléenne, ce qui signifie qu elle ne peut prendre que deux valeurs, True ou False. 3. Si condition est construite à partir de plusieurs autres conditions condition 1,..., condition n avecdesconnecteurslogiquesusuels(et,ou,...),ilsuffitd utiliserlasyntaxedepythonpourcoder l expression de la même variable booléenne à partir des variables condition 1,..., condition n. 1.4.1 Tests (ou branchements) Pseudo-code si condition alors instruction 1 instruction 2... instruction n fin du test si Test si... alors... Code Python if condition: instruction 1 instruction 2... instruction n Pseudo-code si condition alors instruction 1... instruction n sinon instruction n+1... instruction n+p fin du test si Test si... alors... sinon... Code Python if condition: instruction 1... instruction n else: instruction n+1... instruction n+p

1.4. Structures de contrôle 29 Pseudo-code si condition 1 alors instruction 1,1... instruction 1,n1 sinon et si condition 2 alors instruction 2,1... instruction 2,n2 sinon et si... alors... sinon et si condition p alors instruction p,1... instruction p,np sinon instruction p+1,1... instruction p+1,np+1 fin du test si Test si... alors... sinon et si... alors Code Python if condition 1 : instruction 1,1... instruction 1,n1 elif condition 2 : instruction 2,1... instruction 2,n2 elif...... elif condition p : instruction p,1... instruction p,np else: instruction p+1,1... instruction p+1,np+1 Voir l exemple 1 pour une utilisation de cette structure. Remarque 1.4.1. Dans la syntaxe du language Python, il n y a pas d espace entre les deux points et la condition. 1.4.2 Boucles Boucle pour... (Première approche de la boucle pour, il y en aura une seconde, dans un cours ultérieur, spécifique au langage Python et à la notion d objet itérable...) Pseudo-code Boucle pour... Code Python pour indice prenant toutes les valeurs entières de indice debut à indice fin faire instruction 1 instruction 2... instruction n fin de boucle pour for indice in range(ind debut,indice fin+1): instruction 1 instruction 2... instruction n Dans cette description, indice est une variable qui est de type int à savoir entier relatif. Cette variable d itération est automatiquement incrémentée à chaque tour de boucle.

30 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE Pseudo-code tant que condition faire instruction 1 instruction 2... instruction n fin de boucle tant que Boucle tant que... faire... Code Python while condition: instruction 1 instruction 2... instruction n Remarque 1.4.2. Dans le bloc d instructions délimité par une boucle tant que... faire..., il est indispensable de vérifier que la valeur de la variable condition évolue au cours des itérations et qu elle devient nécessairement False après un nombre fini de tours de boucle, sinon, le programme entre dans une boucle infinie et n en sortira jamais sans aide extérieure...

1.5. Interaction d un programme avec un utilisateur 31 1.5 Interaction d un programme avec un utilisateur Présentons les instructions de lecture et d écriture qui permettent de communiquer avec la machine lors de l exécution d instructions dans l interpréteur ou lors de l interprétation d un programme rédigé au préalable dans un fichier texte dont l extension est.py. 1.5.1 Fonction d écriture : print() La fonction print(ch) correspond à l instruction d affichage du contenu de la variable ch sous réserve que son type soit str. Elle permet par exemple d imposer à un programme l affichage de certains calculs intermédiaires au cours de son exécution (ce qui peut s avéver particulièrement utile pour comprendre pourquoi le programme que l on a rédigé ne réalise pas les opérations souhaitées) Exemple 1.5.1. Le script suivant permet d appeler la fonction somme chiffres() (elle n a pas d argument) qui demande à l utilisateur de donner un nombre entier dont elle affiche ensuite la somme des chiffres : 1 def somme_chiffres(): 2 ch = input("saisissez un nombre entier ") 3 s = 0 4 for x in ch: 5 s = s + int(x) 6 print("la somme des chiffres du nombre", int(ch),"vaut",s) 1 >>> somme_chiffres() 2 saisissez un nombre entier 1024 3 la somme des chiffres du nombre 1024 vaut 7 4 >>> somme_chiffres() 5 saisissez un nombre entier 02013 6 la somme des chiffres du nombre 2013 vaut 6 1.5.2 Fonction de lecture : input() La fonction input() permet à un utilisateur de fournir des données à un programme en cours d exécution. Il est souhaitable de fournir un message à l utilisateur pour l informer explicitement de la nature de la donnée attendue par l intermédiaire d une chaîne de caractères qui se place en argument de la fonction input() Il est très important de se souvenir que la fonction input() interprète la donnée saisie par l utilisateur comme une chaîne de caractères, elle est donc de type str. Exercice 1.5.1. Quelle saison? Écrire une fonction saison() qui demande à l utilisateur le mois et éventuellement le jour de l année en cours afin de lui indiquer la saison dans laquelle il se trouve. On prendra la définition suivante pour les saisons : printemps du 20/3 au 20/6 inclus, été du 21/6 au 21/9 inclus, automne du 22/9 au 20/12 inclus, hiver du 21/12 au 19/3 inclus. Exercice 1.5.2. Présentation d une donnée médicale. Écrire une fonction masse corporelle() qui demande à l utilisateur sa taille, son poids puis qui calcule son indice de masse corporelle (noté IMC et égal au quotient du poids en kg par le carré de la taille en mètres) et qui lui renvoie l interprétation correspondant au tableau ci-dessous :

32 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE IMC (kg.m-2) Interprétation (d après l OMS) moins de 16,5 Dénutrition 16,5 à 18,5 Maigreur 18,5 à 25 Corpulence normale 25 à 30 Surpoids 30 à 35 Obésité modérée 35 à 40 Obésité sévère plus de 40 Obésité morbide ou massive Exercice 1.5.3. Voici la fonction test majorite(date) qui demande à l utilisateur son année de naissance, son mois de naissance, son jour de naissance dans le mois puis qui lui dit s il est majeur au jour correspondant au paramètre d entrée date de la fonction (on pourra choisir le type list pour la variable date.

1.6. Fonctions 33 1.6 Fonctions Python est particulièrement adapté à la programmation de fonctions. Définition 1.6.1. En informatique, une fonction est un groupe d instructions regroupées sous un nom et exécutées à la demande (lors de l appel de la fonction). Une fonction Python dépend de paramètres dont les valeurs doivent être précisées lors de l appel de la fonction. Il est également possible, mais pas nécessaire, que la fonction renvoie une valeur lors de son appel. Exemple 1.6.1. Observons puis commentons l exemple de la fonction réelle de deux variables réelles qui calcule l aire d un rectangle en fonction d un couple(l,l) corrrespondant respectivement à la largeur et à la longueur du rectangle. Le script Python de cette fonction est : 1 def aire_rectangle(l, L): 2 """fonction qui calcule l aire d un rectangle admettant pour largeur l 3 et pour longueur L""" 4 aire = l * L 5 return aire La fonction est appelée de la manière suivante dans l interpréteur Python : 1 >>> aire_rectangle(2, 3) 2 6 3 >>> aire_rectangle(2.5, 1.1) 4 2.75 Commentaires : 1. L algorithme correspondant en pseudo-code est le suivant : Algorithme 1 Fonction aire rectangle Paramètres d entrée : l, L : nombres réels. Variables locales : aire : nombre réel. 1 aire l * L 2 Renvoyer aire 2. Toute fonction débute par le mot clé def puis apparaît le nom de la fonction suivi des paramètres d entrée de la fonction entre parenthèse (s il n y a pas de paramètres d entrée, on écrit quand même les parenthèses, comme pour la fonction input() qui peut ne pas avoir de paramètre d entrée). 3. La chaîne de caractère qui apparaît entre tripes guillemets sur la ligne suivante (avec indentation) est la docstring de la fonction, il s agit d une chaîne de caractères facultative qui a pour but de donner différentes informations sur la fonction codée : ses paramètres, leur type, le calcul effectué par la fonction, le type du résultat renvoyé. Pour accéder à la docstring de la fonction aire rectangle depuis l interpréteur Python, il suffit d écrire la commande aire rectangle. doc 1 >>> aire_rectangle. doc 2 "fonction qui calcule l aire d un rectangle admettant pour largeur l 3 et pour longueur L" Il est aussi possible de taper

34 1. INTRODUCTION À LA PROGRAMMATION STRUCTURÉE 1 >>> help(aire_rectangle) 2 Help on function aire_rectangle in module main : 3 4 aire_rectangle(l, L) 5 fonction qui calcule l aire d un rectangle admettant pour largeur l 6 et pour longueur L 4. Lorsqu une fonction renvoie un résultat contenu dans la variable resultat, l instruction correspondante est return resultat 5. On observera que l auteur du programme d une fonction ne spécifie ni le type des paramètres d entrée, ni le type des variables locales, ni le type du résultat attendu, pour la la machine bien sûr (car, à l attention des il peut écrire ces informations en toutes lettres dans la docstring de la fonction)!!! Ceci illustre le fait que Python est un langage faiblement typé. Une conséquence de ce faible typage est que le calcul effectué par la fonction pourra être valide pour des paramètres d entrée de différents types. Observons en particulier le comportement étonnant suivant : 1 >>> aire_rectangle(-3, 2) 2-6 3 >>> aire_rectangle(3, a ) 4 aaa 5 >>> aire_rectangle( oh, 2) 6 ohoh 7 >>> aire_rectangle(3, [1, 2]) 8 [1, 2, 1, 2, 1, 2] 9 >>> aire_rectangle([1, 2], -1) 10 [] 11 >>> aire_rectangle([1, 2], 4) 12 [1, 2, 1, 2, 1, 2, 1, 2] Exemples 1.6.1. 1. Écrivons une fonction Python pour coder la fonction réelle d une variable réelle fonctionsigne définie par 1 si x < 0, x R, f(x) = 0 si x = 0, 1 si x > 0. L algorithme de calcul de la valeur de cette fonction est le suivant : Algorithme 2 Évaluation de la fonction fonctionsigne Paramètres d entrée : x : nombre réel. Variables locales : valeur : nombre réel. 1 si x < 0 alors 2 valeur -1 3 sinon et si x = 0 alors 4 valeur 0 5 sinon 6 valeur 1 7 fin du test si 8 Renvoyer valeur Le script Python correspondant est : 1 def fonctionsigne(x): 2 """fonction qui prend en argument un nombre x de type int ou float