Langage Evolué 1 Mr. BOUZIDI L’hadi, Octobre 2017

A l’issue de ce cours : • d’un point de vue théorique, l’étudiant sera capable : o d’expliquer les concepts de programmation et de paradigmes de programmation o de citer le processus de programmation o d’expliquer ’est quoi un environnement de programmation o de choisir un langage pour débuter • d’un point de vue pratique, il sera capable : o d’expliquer comment installer le langage Python

o d’utiliser Python en mode commande

o d’utiliser Python en mode scripte o d’expliquer en quoi un programme python est-il plus claire syntaxiquement

o d’écrire des programmes simples permettant de manipuler : Objectifs ▪ des variables, des opérateurs et des expressions ▪ des structures de contrôle (conditions, boucles, exceptions) ▪ des séquences (chaines de caractères, listes, tuples, ensembles) ▪ des dictionnaires ▪ des fichiers ▪ des fonctions ▪ des modules ▪ des interfaces graphiques o de citer les bibliothèques Python permettant de répondre à des problèmes de mathématiques o d’utiliser quelques bibliothèques comme numpy, scipy ou mathplot

Un cours + 2 TP

• Le cours magistral sera accompagné d’un support de cours papier, PDF et éventuellement de vidéos sur Internet

• Les séances de TP auront lieu dans une salle équipée d’ordinateurs et d’un vidéo projecteur. • Les étudiants vont travailler (individuellement) sur l’IDE IDLE. • A l’issue de chaque séance de cours, les étudiants vont répondre à un QCM (sur papier), • A l’issue de chaque séance de TP, ils vont rendre un compte rendu. • Tout au lent du module, ils auront des activités d’autoévaluation à réaliser en ligne. • A la fin du module (système de sorite) seront organisés :

Scénario pédagogique o Une interrogation écrite o Un test en ligne o Une EMD

Évaluation :

Calcul de la note de TP : Les éléments d’évaluation: • Test en ligne • Note TP = Test en ligne + Test sur machine + • Tests sur machine Interrogation + Assiduité et Participation • Interrogation • Assiduité et participation Calcul de la note du module : • EMD • Note du module = (Note du TP + note d’EMD *2)/3

Plan du cours (11 chapitres)

1. Dictionnaires 7. Concepts de base 2. Fichiers 8. Environnement de programmation 3. Fonctions 9. Variables, expressions et opérateurs 4. Modules et package 10. Structures de contrôle 5. Interfaces graphiques 11. Séquences 6. Python et les mathématiques

1

Planning 2017-2018 (semestre I) Octobre 2017 Novembre 2016 Décembre 2016 Janvier 2017

Activité S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 s

 14 21 28 4 11 18 25 2 9 16 6 13 20 27

Cours

graphiques

Magistral

Fichiers

Modules

Fonctions

opérateurs

Python et les

Dictionnaires

programmation

mathématiques

Séquences (listes)

Environnement de

Concepts de base +

Séquences (chaines)

Interfaces Interfaces graphiques

Variables, expressions et

Tps

TP1 TP2 TP3 TP4 TP5 TP6 TP7 TP8 TP9

TP10 TP11 TP12 TP13

Auto-

évaluati 7

Test 2 Test 3 Test 4 Test 5 Test 6 Test Test 8 Test 9

on en Test 1

Test10 Test11 Test12 Test13

ligne

Quiz

Quiz 2 Quiz 3 Quiz 4 Quiz 5 Quiz 6 Quiz 7 Quiz 8 Quiz 9

papier Quiz 1

Quiz 10 Quiz 11 Quiz 12 Quiz 13

Tests en X ligne

Interro. X X

Ressources : Support de cours « papier » (exemplaire en ligne en PDF), forum en ligne, éventuellement des vidéos en ligne. Les étudiants pourront s’inscrire à des cours en ligne massifs (MOOC : Massive Open On ligne Courses) :

Dès qu’ils seront inscrits, ils pourront télécharger des ressources (vidéos et document PDF) gratuitement.

Cours PDF en ligne Intitulé Auteur URL Licence Apprendre à Gérard Swinnen http://www.inforef.be/swi/download/apprendre_python3.pdf CC- BY-SA avec Python3 2.0 FR Une introduction à Bob CORDEAU & http://perso.limsi.fr/pointal/_media/python:cours:courspython3.pdf CC- BY-NC- Python 3 Laurent POINTAL SA-3.0 Cours de Python Patrick Fuchs et http://www.dsimb.inserm.fr/~fuchs/python/ CC- BY-SA (univ-paris-diderot) Pierre POULIN 2.0 FR Apprenez à programmer Vincent LEGOF http://www.siteduzero.com CC-BY-NC- en Python SA 2.0

Vidéos en ligne Intitulé URL Pythonneries : Série de plus de 34 petites vidéos http://www.youtube.com/playlist?list=UUEBgesbuuHivHmYbh8TGXzQ Tutoriel Python : Apprendre à programmer en Python https://www.youtube.com/watch?v=A5dl7XRnmM4 (Série de 8 vidéos sur Youtube)

2

MOOC (Massive Open Online Course)

Sur FUN (https://www.fun-mooc.fr/cours/#search?query=Python&page=1&rpp=50)

Nom Editeur Certifiant Temps Début Durée Python 3 : des fondamentaux aux concepts FUN - UCA Oui 8h30/sem 06/11/2017 9 sem avancés du langage Python pour les scientifiques IONISx - EPITA Non 2h/sem Permanent 4 sem Perfectionnez-vous en Python Openclassrooms Certificat pour les premium 1h/sem Permanent 3 sem Testez votre projet avec Python Openclassrooms Certificat pour les premium 1h/sem Permanent 3 sem Découvrez la programmation orientée objet avec Openclassrooms Certificat pour les premium 1h30/sem Permanent 4 sem Python Apprenez à programmer en Python Openclassrooms Certificat pour les premium 8h/sem Permanent 5 sem

FLOT : Programmation en Python pour débutants, URL : http://flot.sillages.info/?portfolio=flot-programmation-pour-debutants

Programmer en ligne avec Python :

• Python Tutor : http://pythontutor.com/ • Repl.it : https://repl.it/languages/python3 • Execute Python Online : https://www.tutorialspoint.com/execute_python_online.php • Easy and Quick way to run Python3 Code Online : https://www.jdoodle.com/python3-programming-online

3

Chapitre 1 – Concepts de base

• La programmation orientée objets défini un I.1 – Programmation programme comme un ensemble d’objets La programmation dans le domaine informatique est communiquant via des interfaces. Les objets l'ensemble des activités qui permettent l'écriture des possèdent des propriétés et des comportements. programmes informatiques. Pour écrire des Ils permettent de représenter les objets du monde programmes, on utilise un langage de programmation. réel au sein de l’ordinateur. Quelques langages de La programmation représente usuellement le codage, programmation sont par essence orientés objets, c’est-à-dire la rédaction du code source d'un logiciel. c’est le ca s de Smaltalk. La plus part des langages On utilise plutôt le terme développement pour dénoter procéduraux ont évolué et permettent maintenant l'ensemble des activités liées à la création d'un logiciel. de faire de la programmation orientée objet : Pascal-objet, C++, , PHP, Python, C# en sont L’écriture des programmes est basée sur des des exemples. Attention, le langage C ne permet techniques et des méthodes permettant de formaliser pas de faire de la programmation orientée objet les problèmes et d’exprimer des solutions en utilisant (POO). Il est cependant à la base de plusieurs l’ordinateur. La technique de base communément autres langages permettant la POO comme C++, utilisé est l’expression algorithmique. Une façon Java, PHP, C# et Python. d’exprimer la solution à un problème en utilisant un langage évolué très proche du langage humain. La programmation met en relation un problème, un I.2 – Processus de programmation programmeur, une machine et un utilisateur. Il s’agit On suppose que l’on a un problème que l’on souhaite d’une étape importante du génie logiciel. Elle se met en résoudre en utilisant l’ordinateur. On suppose aussi place à la suite d’un processus de conception de que le problème est bien explicité sous une forme logiciel. textuelle. Il est question de construire un programme Il existe divers types de programmation : procédurale permettant de solutionner le problème. Voici les étapes (ou impérative), fonctionnelle, logique, orientée objet, à suivre : etc. La plus utilisée est la programmation procédurale. 1. Exprimer un algorithme à partir de l’énoncé textuel • La programmation fonctionnelle définie un 2. Traduire l’algorithme en langage évolué. Ceci programme comme une fonction qui fait appel à donne ce qu’on appel par « code source » d’autre fonctions. Il n’ya pas de variables globales 3. Saisir le code source sur ordinateur (en utilisant un dans un programme fonctionnel. L’état du éditeur de texte) ; programme n’est pas défini par les valeurs des 4. Compiler le programme pour vérifier si le code variables. LISP et ML sont deux exemples de source respect les règles du langage évolué. Ceci langages de programmation permettant la donne lieu à un programme dit objet. programmation fonctionnelle. 5. Procéder une phase qui permet de lier le code • La programmation logique (exemple de langage : objet généré avec d’éventuelles fonctions issues Prolog) défini un programme comme une de bibliothèques déjà existantes. On parle expression de prédicat. Ecrire un programme d’édition de liens. Cette phase donne lieu à un consiste à déclarer des expressions logiques et des programme exécutable. faits. Prolog est le langage par excellence basée sur 6. Tester le programme exécutable en lançant son la programmation logique (ou déclarative) exécution • La programmation procédurale (ou impérative) défini un programme comme une hiérarchie de Notez bien que le processus est à la fois procédures (ou de fonctions) qui appliquent des itératif (passer d’une étape à l’autre) et traitements sur des données. La plus part des cyclique (des retours en arrière sont possibles langages de programmation permettent la notamment lors de la compilation, de l’édition des liens programmation procédurale : Fortran, Cobol, C, et de l’exécution). Pascal, C++, Java en sont des exemples.

4

Formalisation Problème Traduction dans un langage comme C++ Correction Algorithme des erreurs de syntaxe Compilation Code

source Correction des erreurs de référence aux Code objet Bibliothèque Code objet fonctions ou s bibliothèques

Edition des liens

Programme exécutable Correction des erreurs Exécution de logique

Ajouter de ces traitement procéduraux, la majorité des I.3 – Langages de programmation. langages de programmation actuels prennent en charge Un langage est un codage permettant de le style de programmation orienté objet. C++, PHP, communiquer. Ainsi, l’être humain a toujours inventé Java, Python en sont des exemples. des langages. Ces derniers sont souvent basés sur des signes (alphabet) et des règles de construction de mots, I.4 – Choisir un langage de de phrases et des discours. Les langages de programmation pour débuter programmation n’échappent pas à ces règles. Cependant, ils ne sont pas faits pour faire Quel langage choisir pour débuter ? Tout d’abord, communiquer les être humains entre eux, mais pour avant de se poser cette question, il faut avoir de communiquer avec l’ordinateur. A l’origine, le langage bonnes connaissances en algorithmique. Il faut, en de programmation utilisé est très proche du langage de particulier, savoir représenter des données du monde l’ordinateur : le langage binaire (rien que des zéros et sous forme de structures données (variables, tableaux, des uns !). Par la suite, on a inventé des langages de pointeurs, fichiers, etc.) et d’exprimer sous forme plus en plus évolué pour faciliter le travail au textuelle les traitements à opérer sur ces données en programmeur : Fortran, Cobol, Algol, Pascal, C, conformité avec le problème à résoudre. Par la suite se Smaltalk, Java, PHP, … en sont des exemples. pose la question du langage de programmation. Il en existe beaucoup (des milliers !). Cependant, pour un De façon générale, les langages de programmation débutant, je recommande un langage simple, non objet prennent en charge la représentation des données de et non graphique. Ce n’est que par la suite que l’on base (variables simples, des tableaux, des structures, peut aller plus loin pour aborder la programmation des fichiers, des bases de données et des pointeurs) et orientée objet et les interfaces graphiques. Dans ce permettent d’exprimer des traitements sur ces cours, nous allons respecter cet ordre des choses. données : lecture et affichage des données, calculs d’expressions, traitement conditionnels, boucles, fonctions, traitement sur des fichiers, etc.

5

Les langages qui pourront répondre à notre question quelques tentatives adaptives sous . C# est le peuvent être : Pascal/, Java, Python, .Net, langage "natif" de cette plateforme : sa syntaxe est Smaltalk, C/C++, PHP, ADA. proche du C et de java, pas de pointeurs, tout se passe à un niveau d'abstraction supérieur aux anciens Delphi (Pascal) : C’est une bonne solution, les langages Microsoft. C'est comparable à Java et à compilateurs et environnements de développements Python, sauf que ce n'est pas libre. (EDI) se trouvent gratuitement (sous certaines conditions peu contraignantes). On peut commencer C/C++ : De bons langages avec une syntaxe compliquée. par faire des petits programmes dans des Shell en L'utilisation des pointeurs les rend souvent ardues. Ils Pascal et ensuite passer (après avoir appris la notion ont l’avantage d’être utilisés sur plusieurs plateformes d'objet) à des choses plus complexes avec (après compilation) et que, une fois maîtrisés, ils font environnement graphique grâce à Delphi (et Kylix sous paraître les autres plus simples. Ils sont encore très Linux). Le langage est relativement intuitif, rigoureux, la utilisés dans le monde professionnel. création d'interface graphique simple. Un point négatif, PHP : Un langage initialement prévu pour le cependant est sa portabilité. développement de pages web dynamiques. Sa syntaxe Java : Orienté objet, très portable, syntaxe utilisée est proche du C++. également pour des scripts internet (la syntaxe, pas le "Simple" à aborder et permet de communiquer assez langage...). Il existe de nombreux environnements de facilement avec une base de données. développement gratuits sur le net, néanmoins, ça n'a pas la facilité de Delphi au niveau des interfaces Pour développer des pages web dynamiques, il requiert graphiques. aussi une bonne connaissance de l'HTML et éventuellement du SQL si vous avez besoin d'une base Python : Simple, rapide, donne de bonnes habitudes de de données. programmation, très léger, ouvert, énormément de documentation sur internet. Il permet de vite se faire Il permet notamment d'avoir rapidement une plaisir soit en faisant des scripts puissants (grâce "visibilité" de son travail en le mettant en ligne. notamment à la programmation objet). Il est assez On peut également développer des applications récent et portable. Il fonctionne avec une machine normales avec ce langage (hors web). virtuelle tout comme Java et peut ainsi être empaquetée (grâce à certaines classes disponibles sur Vous pouvez programmer de manière procédurale ou le web) dans un exécutable pour distribuer l'application orientée objet. de manière simple et indépendante. Difficile à apprendre, préférez-lui Python. .Net : Plate forme de programmation de Microsoft Dans ce cours, nous utiliserons le langage Python. permettant de programmer des applications graphiques de manière simple. Son gros inconvénient est de tourner uniquement sous Windows malgré

6

Nom : ...... Prénom : ...... QCM 1 – Concepts de base

Vrai Faux La programmation impérative défini un programme comme un ensemble de fonctions   Prolog est un langage de programmation déclaratif   C est un langage de programmation procédurale et orienté objets   C++ et Pascal-objet sont des langages de programmation impératifs et orientés objets   Un interpréteur exécute les instructions au fur et à mesure de leur lecture (saisie)   Le code source représente un programme écrit en langage machine   Le code objet représente un programme écrit en langage intermédiaire entre le code source et le langage machine   Un compilateur est un programme qui traduit un programme écrit en code objet et génère du code source   Java, C++, PHP, JavaScript, et Python est issus du langage C   C et C++ sont très populaires   Python est un langage puissant et très facile à apprendre   Langage procédural = langage impératif   Il est souhaitable de choisir un langage qui soit portable, simple à apprendre et puissant   Java et Python sont des langages portables (pouvant s’exécuter sur n’importe quel système d’exploitation grâce à une machine virtuelle   Delphi est un environnement de programmation libre   PHP et Python sont des langages de programmation libre   Dans ce cours vous allez apprendre l’algorithmique   Dans ce cours vous allez apprendre à créer des sites web   Dans ce cours vous allez apprendre à écrire des programmes simples en Python   Dans ce cours vous allez apprendre à écrire des programmes gérant les bases de données en Python   Un langage interprété est plus rapide qu’un langage compilé  

Le langage Python prend en charge les techniques de programmation suivantes (cochez les bonnes techniques):  Déclarative  Logique  Orientée objet  procédurale Le processus de programmation s’effectue selon les actions suivantes :  Exécution et tests  Edition des liens  Compilation  Saisie de code source  Formulation algorithmique d’un problème Indiquez les étapes ci-dessus dans le bon ordre......

7

Chapitre 2 – Environnement de programmation

rogrammer devient de plus en plus simplifié par • des outils destinés à assister aux opérations l’utilisation d’environnements de programmation préliminaires à la programmation, par exemple des P confortables et pratiques. Un environnement de outils de modélisation, ou d'analyse des exigences. programmation regroupe à la fois le système • un outil de contrôle de versions. Un tel outil d’exploitation cible (Linux, Windows, MacOs, androïde, permet à plusieurs programmeurs de travailler etc.) et les outils qui permettent de mener à bien le simultanément sur les fichiers de code source du processus de programmation (édition, compilation, programme. interprétation, édition des liens, débogage, aides, aide à la création d’interfaces graphiques, etc.). Un des Les IDE sont parfois issus d'outils qui offrent une seule éléments clefs de l’environnement de programmation et unique fonction et que leurs auteurs ont ensuite est le choix d’un environnement de développement enrichis et fusionnés avec d'autres outils. Il peut s'agir intégré (EDI ou IDE en anglais : Integrate Development d'outil de création d'interface graphique ou de Environment). Il existe différents IDE. Plusieurs sont manipulation de base de données. multiplateformes et permettent de programmer avec plusieurs langages. Souvent ils sont extensibles et offre 2.2 – Exemples d’IDE la possibilité d’installer des plugins (ou modules) pour prendre en charge de nouvelles fonctionnalités. Visual Studio, Delphi, Code :: Blocs, Netbeans et Code::Blocs, NetBeans, Eclipse, , Kdevlop, Delphi, sont des environnements de développement Visuel Studio, Studio, IDLE, MyCharm constituent des populaires. exemples d’IDE. • Eclipse permet notamment d'écrire, de compiler, d'exécuter et de déboguer des applications. Le 2.1 – Environnement de développement débogueur permet d'exécuter le programme ligne intégré par ligne et vérifier l'état des variables. Il permet, à partir d'une fenêtre principale Workbench Un environnement de développement intégré (IDE) d'accéder à différentes perspectives à partir comporte toujours un éditeur de texte incorporé, avec desquelles le code source du programme peut être souvent la possibilité de le substituer par un autre consulté et modifié. Il peut être utilisé avec de éditeur. L'éditeur comporte typiquement des fonctions nombreux langages de programmation, le plus de mise en évidence alignées avec le langage de couramment utilisé étant Java. Il comporte des programmation: indentation automatique des blocs de fonctions destinées à assister la création de code, marquage des délimiteurs (parenthèses ou constructions courantes du langage Java accolades), et mise en évidence des mots clés du (packages, classes,...) ainsi qu'une fonction pour langage par de la couleur ou des caractères gras. Un IDE générer de la documentation. peut également comporter les outils suivants : • Visual Studio est un IDE commercialisé par • un outil de création d'interface graphique. Tel outil Microsoft. Il permet de créer des programmes, les permet au programmeur de gagner un temps compiler et les déboguer. Depuis 2002 il est significatif dans la construction de l'interface destiné à la création de programmes pour la graphique de son programme. Jusqu'à l'arrivée de plateforme Microsoft .NET dans les langages Visual la technologie Java, de tels outils ciblaient toujours Basic, C#, C++ et F#. Il permet de créer des un système d'exploitation en particulier. applications Web. Il permet également de créer • un outil pour réaliser automatiquement des tests. des interfaces graphiques et comporte un outil de contrôle de versions. • des outils d'analyse du code source. Par exemple un générateur de graphique qui permet d'obtenir • Code::Blocks est un IDE gratuit et open source. Il le diagramme en arbre de l'utilisation d'une est à peine plus qu’un simple éditeur de texte avec fonction du programme. coloration syntaxique, mais conçu autour d’une architecture de plugins, le rendant du coup très • un moteur de recherche qui tient compte du complet et très extensible. Il est capable d’utiliser langage de programmation: il permet par exemple presque tous les compilateurs gratuits du marché, de rechercher le nom d'une fonction en évitant les tel que mingw32, Microsoft Visual C++ Toolkit et commentaires et les expressions littérales, et en se Borland C++. Il dispose également de l’auto limitant au cadre d'un module ou d'une classe. complétion, d’un plugin pour correctement

8

indenter votre code. Tous les plugins sont fournis 2.4 – Installer Python avec le logiciel, vous n’aurez pas à les télécharger un à un. Avant d’installer le langage Python, il faut d’abord se le procurer. Pour cela, il faut : • NetBeans est un IDE open source sous licence CDDL et GPLv2 (Common Development and 1 - vous rendre sur le site officiel de ce langage : Distribution License). En plus de Java, NetBeans http://www.python.org permet également de supporter différents autres 2 – Choisissez la version que vous souhaitez langages, comme Python, C, C++, JavaScript, XML, Ruby, PHP et HTML. Il comprend toutes les caractéristiques d'un IDE moderne (éditeur en couleur, projets multi-langage, refactoring1, éditeur graphique d'interfaces et de pages Web).

2.3 – IDE prenant en charge Python Plusieurs IDE permettent de programmer avec Python. Voici une liste non exhaustive de ces IDE : 3 – Choisissez le système d’exploitation dans lequel Dernière Nom Plateforme Licence mise à jour vous voulez installer Python.

Komodo Windows/Linux/Mac OS 2012 Commercial 4 – Téléchargez l’exécutable Python NetBeans Linux, Mac, Solaris, Windows 2009 open source 5 – Sous Windows, il suffit de lancer le programme Libre open téléchargé et vous suivez les boites de dialogue PyCharm Linux/Mac OS/Windows 2014 source mettant en œuvre la procédure d’installation

Libre open KDevelop Linux/Mac OS/(Windows) 2014 Remarque : Sous Ubuntu (Linux), Python est source nativement installé. Si vous souhaitez installer d’autres Libre open versions de ce langage ou des IDE l’utilisant, vous PyDev Eclipse 2012 source pouvez le faire par le biais de la logithèque Ubuntu. Wing IDE Windows, Linux, Mac OS 2014 Commercial

PyScripter Windows 2012 Licence MIT 2.5 – Utiliser Python

Pyshield Windows, Linux 2010 Commercial Il y a plusieurs manières d’utiliser python. On présentera ici son utilisation en mode console puis en Libre open Windows/Linux/Mac OS 2012 source se servant de l’IDE « IDLE »

Libre open En mode console (ici sous Ubuntu): il suffit d’ouvrir un IDLE Windows/Linux/Mac OS 2009 source terminal puis de tapez « python ». L’interpréteur de Libre open commande de python s’exécute et affiche 3 chevrons. IdleX Windows/Linux/Mac OS 2012 source Ce qui veut dire qu’il attente de vous à ce que vous introduisiez des commandes µ.dev Windows 2010 open source

IEP Windows/Linux/Mac OS X 2012 open source

PythonToolkit Windows/Linux/Mac OS X 2011 open source (PTK)

PyStudio Windows/Linux/Mac OS X 2012 open source

Outils Python pour Visual Windows 2013 Commercial Studio En introduisant une commande, python va réagir en Exedore Mac OS X 2013 Commercial tentant de l’exécuter ou de vous dire qu’il n’a pas bien compris ce que vous lui dites si vous ne respectez pas son langage!

1 Refactorer consiste à modifier un code source de façon à en améliorer la structure, sans que cela modifie son comportement fonctionnel.

9

Un autre moyen est d’utiliser un IDE. Geany, IDLE, PyCharm, pyScripter sont IDE permettant de programmer avec Python.

Voici un aperçu de l’EDI « IDLE »

Si vous tapez une instruction qui respects son langage, il vous répondra avec plaisir en l’exécutant.

Voici un aperçu de l’EDI « Geny » :

Dans l’exemple ci-dessus, j’ai demandé à Python de créer une variable nommée « a » et de mettre dans cette variable une chaine de caractère correspondant à la valeur ‘Bonjour Mr Python’. Puis je lui ai demandé de l’afficher (print). Python a bel et bien fait ce que je lui ai demandé au fur et à mesure de ma saisie!

Si vous voulez écrire un programme complet au lieu d’exécuter des instructions individuellement, vous devez créer un fichier portant l’extension « .py ». Vous pouvez vous servir de n’importe quel éditeur de texte. Voici un aperçu de l’IDE « PyCharm » : Sous linux, je peux utiliser « gedit ». Sous Windows, vous pouvez utiliser l’éditeur qui vous plait.

Attention, pour exécuter votre programme vous devez lancer un terminal (sous linux) ou la console (sous windows), puis vous tapez « python » suivi du nom du fichier à exécuter (sous oublier de vous mettre dans le dossier où se trouve votre script python).

10

Nom : ...... Prénom : ...... Quiz 2 – Environnement de programmation

Q1 – IDE veut dire :  PyCharm  IDLE  Intégration de développement de  l’environnement de programmation NetBeans  Abréviation anglaise de « Environnement de Q5 – Indiquez l’IDE qui est installé par défaut avec développement intégré » Python :  Langage de programmation  Delphi  Compilateur  PyCharm  Est un paradigme de programmation  IDLE Q2 – Python est :  NetBeans  Un langage de programmation Q6 – Indiquez l’IDE qui offre le moins de  Un logiciel interpréteur fonctionnalités :  Un compilateur  PyCharm  Langage de bas niveau  IDLE  Multiplateforme (linux, windows, …)  NetBeans  Compliqué Q7 – Python peut être utilisé selon deux modes. Q3 – Un IDE : Indiquez lesquels :  Réuni plusieurs outils pour faciliter la  autonome programmation : éditeur de texte,  commande compilateur, débugger, éditeur de liens  script  Réuni plusieurs logiciels pour faire du  partagé traitement de texte, résoudre des problèmes informatique Q8 – Dans le mode « commande », Python exécute les  Peut englober es outils suivants : éditeur de instructions au fur et à mesure de leur saisie : texte avec coloration syntaxique, éditeurs  Vrai  Faux d’interfaces graphiques, analyseurs de code source, un moteur de recherche. Q9 – Dans le mode « script », on regroupe les instructions dans un fichier et on les exécute une fois Q4 – Parmi les IDE nous avons : on a fini leur saisie :  C++  Vrai  Faux  Java  IDLE Q10 – Le site officiel de Python est :  NetBeans « http://python.com » :  Python  Vrai  Faux  PHP  Code ::blocs Q11 – Dans linux, Python est installé par défaut :  pyCharm  Vrai  Faux  Delphi

Q4 – Indiquez les IDE qui sont gratuits :

 Delphi

11

Chapitre 3 - Variables, expressions et opérateurs

Python peut être utilisé de plusieurs manières On peut donc écrire des expressions impliquant les différentes : Le mode interactif (vous dialoguez opérateurs de calcul arithmétique usuels (+, -, *, /) avec directement avec lui depuis le clavier) vous permettra le respect des conventions de priorité des opérateurs. de découvrir très vite un grand nombre de Les parenthèses peuvent être utilisées pour plus de fonctionnalités du langage. Dans un second temps, clarté. La division entière est réalisée grâce à vous apprendrez comment créer vos premiers l’opérateur « // » (python 3 ou supérieur). L’opérateur programmes (scripts) et les sauvegarder sur disque. modulo est réalisé par l’opérateur « % ». L’interpréteur peut être lancé directement depuis la Attention, les nombres réels (di flottant ou float) sont ligne de commande (dans un « shell » Linux, ou bien écrire avec un point décimal et non une virgule (12,5 dans une fenêtre DOS sous Windows) : il suffit d’y taper est faux alors que 12.5 est un nombre flottant !) la commande python3 (en supposant que le logiciel lui- même ait été correctement installé, et qu’il s’agisse 3.2 – Données et variables d’une des dernières versions de Python), ou python (si la version de Python installée sur votre ordinateur est Un programme n’est rien d’autre qu’un ensemble de antérieure à la version 3.0). traitements opérant sur des données permettant d’obtenir des résultats. Les données et les résultats Vous pouvez aussi vous servir d’un IDE (environnement (eux-mêmes pouvant être considérés comme des de développement intégré) comme IDLE ou pyCharm. données) sont représentés par des variables. Ces Voici à quoi ressemble IDLE : dernières sont identifiées par des noms (pour nous c’est des chaines de caractères contiguës ne commençant pas par un chiffre et ne contenant pas de caractère spéciaux à l’exception du tiret du 8 « _ »). Les variables, sont aussi caractérisées par leur type. Il s’agit d’une information déterminant l’étendue des valeurs qu’elle va contenir, mais surtout les opérations que l’on pourra effectuer sur ces valeurs. Les types que l’on rencontre le plus souvent dans les langages de programmation populaire comme C++ ou Java sont : les entiers, les réels, les booléens, les chaines de caractères Les trois caractères « supérieur à » constituent le signal et les tableaux. Nous allons voir que python est un d’invite, ou prompt principal, lequel vous indique que langage de plus haut niveau de C++ ou Java et offre Python est prêt à exécuter une commande. d’autre type de données comme les liste, les tuples et les dictionnaires (on reviendra sur ces types 3.1 – Calculer avec python ultérieurement). Pour l’instant, nous abonderons Vous allez très vite vous rendre compte que Python est uniquement les types simples (entiers, réels et un véritable environnement de calcul très facile à booléens). manier : 3.3 – Nommer les variables Nommer les variables est une opération qu’effectue toujours le programmeur. Il doit être vigilant dans le choix de ces noms car ça peut affecter la lisibilité et la clarté de son programme. Ainsi, ce noms doivent êtres assez court (de préférence) et aussi explicite que possible. Sous Python, les noms de variables doivent en outre obéir à quelques règles simples : • Un nom de variable est une séquence de lettres (a → z , A → Z) et de chiffres (0 → 9), qui doit toujours commencer par une lettre.

12

• Seules les lettres ordinaires sont autorisées. Les Si vous devez écrire un script (ensemble d’instructions lettres accentuées, les cédilles, les espaces, les que vous garderez dans un fichier), vous devez utiliser caractères spéciaux tels que $, #, @, etc. sont la fonction « print » pour afficher les valeurs de vos interdits, à l’exception du caractère _ (souligné). variables. • La casse est significative (les caractères >>> print(p) majuscules et minuscules sont distingués). 18 Attention : Math, math, MATH sont donc des >>> print(message) variables différentes ! "Bonjour à tous ?" • Prenez l’habitude d’écrire l’essentiel des noms de >>> print(pi) variables en caractères minuscules (y compris la 3.14 première lettre). Il s’agit d’une simple convention, mais elle est largement respectée. N’utilisez les 3.6 – Typage des variables majuscules qu’à l’intérieur même du nom, pour en augmenter éventuellement la lisibilité, comme A la différence de plusieurs langages comme C++ ou dans « nomEtudiant ». Java, Python n’exige pas de déclarer les types des variables. Il suffit d’affecter une valeur à une variable et Python reconnaitra automatiquement son type. De Attention, en plus des règles ci-dessus, vous devez plus, il est tout à fait possible d’affecter à une même éviter de donnez comme nom de variable un mot variable des valeurs de types différents au cours de réservé du langage Python. Voici la liste des mots l’exécution d’un programme. On parle alors de typage réservés à éviter : dynamique. and as assert break class continue def Exemple :

del elif else except False finally for >>>x = 10.5 from global if import in is lambda >>>Print (x) 10.5 None nonlocal not or pass raise return >>> x = "STID" >>> print(x) True try while with yield 3.7 – Affectation multiple 3.4 – Affectation Sous Python, on peut affecter une valeur à plusieurs Pour qu’une variable soit utilisable, il faut pouvoir lui variables simultanément. affecter une valeur. Cette opération consiste à établir Exemple : un lien entre le nom de la variable et sa valeur. En Python, cette opération est représentée par le signe >>>x = y = 10.5 égal. >>>x 10.5 >>> p = 18 # définir la variable p et lui donner >>> y la valeur 18 10.5 >>> message = "Bonjour à tous ?" # affecter la valeur

"Bonjour à tous ?" à message >>> pi = 3.14 # assigner sa valeur à la variable pi Il est aussi possible de procéder à des affectations parallèles. 3.5 – Afficher les valeurs des variables Exemple :

Avec Python, vous avez deux moyens d’afficher les >>>x , y = 10, 15 valeurs de vos variables. En mode interactif, il suffit de >>>x taper le nom de la variable. Python se charge d’afficher 10 sa valeur. Vous pouvez aussi vous servir de la fonction >>>y « print ». 15 >>> p 18 >>> message "Bonjour à tous ?" >>> pi 3.14

13

3.8 – Opérateurs et expressions Exemple : On effectue des calculs et plus généralement des traitements en combinant les références (noms) des >>> nom = input("donnez votre nom ") variables avec des constantes et des opérateurs pour >>> print("Vous vous appelez", nom) former des expressions.

Exemple : La fonction « input » renvoi une chaine de caractère qui >>>a, b, c = 1, 3, 4 sera récupérée dans la variable. Cependant, lorsqu’on >>>delta = b*b – 4*a*c veut récupérer une variable de type entier ou réel, comment faire ? Pas de panique, on utilisera des

fonctions de conversion d’une chaine de caractère vers Dans cet exemple, la seconde ligne englobe une des entiers ou des réels. Par expression impliquant les opérateurs de multiplication (*) et de soustraction (-), les trois variables a, b et c et une constant (la valeur 4). La valeur calcul à partir de Exemple : cette expression sera mise dans la variable « delta ». Les règles d’application des opérateurs sont celle appliquées en mathématique. Pour plus de clarté, on >>> largeur = int(input("donnez la largeur ")) peut utiliser des parenthèses : delat = (b*b) – (4*a*c) >>> longueur = int(input("donnez la longueur ")) Voici la liste des opérateurs de base autorisés par >>> print("La surface est ", longueur * largeur) Python :

** Exponentiation Attention, si les variables « longueur » et « largeur » * Multiplication devraient êtres de type réel alors il faut se servir de la / Division fonction de conversion « float » qui convertira la chaine + Addition de caractère saisie en un réel ! - Soustraction // Division entière % Modulo

3.9 – Composition La force des langages de haut niveau réside dans le fait qu’ils offrent la possibilité de construire des instructions complexes par assemblage de fragments divers. Ainsi, il est tout à fait possible, avec Python, de combiner deux instructions en une seule :

>>> delta = b*b – 4*a*c >>> print (delta) Peut devenir :

>>> print (b*b – 4*a*c) Voici un autre exemple :

>>> longueur, largeur = 13, 5 >>> print ("la surface est ", longueur * largeur)

3.10 – Introduire des données à partir du clavier Nous avons vu précédemment comment affecter une valeur à une variable. Il est tout à fait possible de faire cette opération, mais au lieu d’expliciter la valeur à mettre dans la variable, on va inviter l’utilisateur à l’introduire à partir du clavier. L’instruction permettant cela s’appel : « input ».

14

Quiz 3 – Variables, expressions et opérateurs

Q1 - Dans python :  On doit indiquer le type des variables Comment construire les noms de vos  Le type des variables est reconnais par les identificateurs : valeurs qui leurs sont affectées.  Les variables doivent être initialisées. Q2 – Parmi ce qui suit indiquez ce qui n'est pas  Deux modes d’exploitation peuvent être correcte : utilisés : mode interactif, mode scrypte  L’instruction d’affichage est « write »  Un identificateur est le nom donné à une  L’instruction d’affichage est « print » variable, une fonction ou un objet.  L’instruction de lecture à partir du clavier est  Dans python différents types de données « read » peuvent être stockés dans une variable.  L’instruction de lecture à partir du clavier est  Une variable est le nom donné à un « input »  Une variable possède des propriétés comme  Parmi les types pris en charge on a : int, float, sa valeur, son type et son étendue. char, str, tuples, listes, dictionnaires  Les variables et les identificateurs sont les  Parmi les types pris en charge on a : int, float, mêmes. booléens, str, tuples, listes, dictionnaires  Une variable est une zone allouée dans la  Chaque variable est en réalité un objet qui mémoire de l'ordinateur pour stocker une possède des méthodes. Par exemple une donnée. variable de type « str » possède la méthode Q3 – Indiquez si les noms de variables suivants sont upper() valides ou non:  La méthode upper() de la classe « str » permet de convertir une chaine de caractère Noms Valide Non Valide en minuscules 2dbc    La méthode lower() de la classe « str » permet de convertir une chaine de caractère _abc   en minuscules Ab’c    La fonction len() permet de donner la longueur d’une chaine, d’une liste. Par while   exemple : len(‘STID’) donne 4.  Il est possible de faire plusieurs affectation au même temps (exemple : a,b,c = 10,14,15) Q4 – Quels sont les noms de variable valides en  Il est possible de composer plusieurs Python? fonctions. Par exemple int(input(‘donnez A’)) 0 2_pommes 0 2-pommes  La fonction « input » peu renvoyer des entiers, des 0 deux _pommes 0 deux-pommes réels ou des chaines de caractères  Les nombre réels sont écrits avec une virgule (exemple 14,45) Q5 – Parmi les noms de variables suivants lesquels ne  L’opérateur « // » permet de faire une division sont pas valide en Python? entière 0 nom 0 width  L’opérateur « % » calcul le pourcentage d’une valeur 0 for 0 length

15

Q6 – Que va être affiché après chacun des codes Q8 – Indiquez la valeur de x à l’issue de l’exécution de suivants? Si c'est une erreur, écrivez Erreur, ce code :

Y = 2.3 Instructions Valeur de « x » ? y = "dog" x = "Math" print(Y) x = x.lower() x.upper() M = 12 x = x.upper() print(m) x = x + x

X = x*2 2x = 4 x = x[0 :3] print(2x)

ma_variable = 5 Q 9 – des opérateurs de même priorité sont évalués print(ma_variable) comment :

ma variable = 6  De gauche à droite print(ma variable)  De droite à gauche

B_3 = "SALUT" print(B_3) Q 10 – Indiquez les opérateurs qui on la même priorité :

 + -

 ** * Variable et types  / // * %  not And or Q7 – Pour chacune des valeurs suivantes indiquez leur  not + - type?  < > == <>  < <= > >= Valeur Type ?  == != <> 2

2.0 3 "Bonjour" Q 11 – Indiquez l’expression qui calcul 2 : True  2*3 False  2**3 5+3  2%3 63.2 + 5 (2<3 and True) Q 12 – Indiquez l’expression qui calcul le reste de la "x" in nom division de 15 par 4 : 5//6  15/4 13%3  15 mod 4

 15%4 Q7 – Indiquez le type de la variable x :

Instructions Type de la Q 13 – Indiquez l’expression qui calcul la division variable entière de 7 par 3 : « x » ?  7/3 x = input("Quel est votre nom ?")  7 div 3 x = input("Quel est votre age ?")  7%3 x = int(input("Quel est votre age ?"))  7//3

16

Chapitre 4 – Structures de contrôle

Les structures de contrôle sont des groupes d’instructions qui Boc1 déterminent l’ordre dans lequel le programme sera exécuté. …. On distingue trois structures de contrôle : la séquence, la Ligne d’entête : sélection et la répétition. Boc2 Python organise les instructions de façon assez différentes de …. la majorité des langages populaires comme C, C++, PHP ou Ligne d’entête : Java. En effet, le créateur de ce langage a misé sur la simplicité syntaxique en éliminant complètement les Boc3 délimiteurs de blocs d’instructions. Pour les personnes ayant …. été habitués aux fameux délimiteurs comme les accolades et Ligne d’entête : les BEGIN et END, seront un peu dérouté, mais vont se rendre compte rapidement que les plus programme Python sont plus Boc2 (suite lisibles. C’est pour cette raison, que l’on présentera, ci-après, …. quelques règles syntaxiques de Python. Boc1 (suite …. 4.1 – Quelques règles de syntaxe Python

Avant d’aller plus loin, on fait le point sur quelques règles de 4.2 – Séquence d’instructions syntaxe de Python : Les instructions sont, en général, exécutées de haut en bas dans l’ordre. On qualifie un groupe d’instructions de • Les limites des instructions et des blocs sont définies par séquence. Si l’on veut enfreindre cet ordre, il faut avoir la mise en page recours aux instructions de sélection ou de répétition. • Instruction composée : en-tête, double point, bloc d’instructions indenté 4.3 – Sélection : exécution conditionnelle • Les espaces et les commentaires sont ignorés Un programme composé uniquement d’une séquence d’instruction s ne pourra pas prendre en compte beaucoup de situations et ne pourra certainement pas offrir de véritables Les limites des instructions : Dans la majorité des langages, solutions à la majorité des problèmes. On sait que les les instructions sont terminées par un point virgule (C, C++, traitements opèrent sur les données, mais souvent certaines Pascal, PHP etc…). Dans Python, c’est la mise en page des données influencent les traitements. Ainsi, si vous voulez blocs d’instructions : résoudre une équation du second degré, la valeur du • Les blocs d’instructions sont toujours associés à discriminant  détermine une solution (un chemin une ligne d’en-tête contenant une instruction bien d’exécution) parmi celles prévues dans votre programme. spécifique (if, elif, else, while, def, etc.) se Pour représenter cette influence, on a recours à l’instruction terminant par un double point. conditionnelle « if ». Par exemple :

• Les blocs sont délimités par l’indentation : toutes les lignes d’un même bloc doivent être indentées a = float(input(‘donnez a : ‘)) b = float(input(‘donnez b : ‘)) exactement de la même manière (c’est-à-dire c = float(input(‘donnez c : ‘)) décalées vers la droite d’un même nombre delta = b**2 – a*a*c d’espaces). Le nombre d’espaces à utiliser pour if (delta <0) : l’indentation est quelconque, mais la plupart des print (‘pas de solutions réelles) programmeurs utilisent des multiples de 4. • Le code du bloc le plus externe (bloc 1) ne peut pas lui-même être écarté de la marge de gauche (il n’est imbriqué dans rien).

17

Dans cette portion de programme, on a introduit l’instruction Les mots clefs « if » et « elif » doivent être suivi d’une « if ». On voit qu’elle est suivi d’une condition : (delta<0) puis condition suivi de « : » de deux point (:). Juste après nous avons une instruction d’affichage « print (‘pas de solutions réelles) ». Cette Le mot clef « else » doit être suivi de « : » instruction est décalée légèrement à droite. Ceci pour dire Remarquez que les blocs d’instructions n’ont pas de qu’elle fait partie de l’instruction conditionnelle. Elle ne sera délimiteurs (comme en pascal où l’on utilise « begin » exécutée que si la condition (delt<0) est vrai. Dans le cas et « end » ou en C où l’on utilise des accolades). Dans contraire, le programme sautera cette instruction. Python, il suffit de décaler à droite de quelques Il est tout à fait possible d’avoir une séquence d’instruction caractères le bloc d’instructions pour qu’il soit identifié (bloc) à l’intérieur d’une instruction « if » : comme un bloc. Attention, toutes les instructions de ce bloc doivent être alignées sur la même colonne. Ce if (delta <0) : décalage est appelé « indentation ». print (‘pas de solutions réelles) print (‘il faut ressaisir les valeurs des coefficients !’) 4.4 – Imbrication Nous avions identifié l’instruction conditionnelle come Il est possible de prévoir quelle séquence exécuter si la étant composée du mot clef « if » suivi d’une condition condition est fausse. Ceci se fera grâce au mot clé « else » : suivi de deux point et d’un retour à la ligne avec indentation (décalage à droite de quelques caractères) if (delta <0) : suivi d’un bloc d’instructions. On peut avoir d’autres print (‘pas de solutions réelles) alternatives avec « elif » et « else ». Il faut savoir, que print (‘il faut ressaisir les valeurs des coefficients !’) dans le bloc d’instruction se trouvant dans l’instruction else : « if », on peut imbriquer d’autres instructions « if » tout print (‘nous pouvant trouver des solutions réelles’) en respectant les mêmes règles. Ainsi, récursivement, on peut avoir une certaine profondeur d’imbrication. Dans le cas ou vous avez plusieurs alternatives alors En général, il faut éviter de trop imbriquer les vous pouvez vous servir du mot clef : « elif » : instructions conditionnelles pour garantir une meilleure 1 if (delta <0) : lisibilité. 2 print (‘pas de solutions réelles) if (a <0) : 3 print (‘il faut ressaisir les valeurs des coefficients !’) print (‘a est négatif) 4 elif (a==0): if (b<0) : 5 print (‘nous avons une équation du premier degré’) print(‘b est négatif ’) 6 print (‘l\’équation est de la forme bx+c = 0’) print(‘je rappel que a est négatif aussi ’) 7 else : if (c==0) : print (‘nous avons une équation du second degré’) 8 print(‘a<0 et b<0 et c=0 !!!’) 9 ------else :

print (‘a est positif ou nul’)

Dans l’exemple ci-dessus, nous avons deux niveaux Ah, nous avons une première condition (delta<0). Si d’imbrication. cette condition est vraie, alors les instructions n°2 et n°3 seront exécutées et le programme poursuivra à 4.5 – Conditions partir de l’instruction n°9. Par contre si cette condition est fausse, alors, on va voir si la valeur de « a » est nulle Les conditions sont des expressions logiques pouvant (remarquez que le test d’égalité est réalisé à l’aide d’un être vraies ou fausse. On dit que leurs valeurs sont de double égale « == »). Dans ce cas nous aurons : delta≥0 type booléen. Python prend en charge, en effet, le type et au même temps « a » égale à zéro ! , le programme booléen et la valeur vraie est représentée par « True » va exécuter alors les instructions 5 et 6 et poursuivra à et la valeur fausse est représentée par « False ». On partir de l’instruction n°9. Attendez, ce n’est pas encore peut construire une condition à partir des constantes fini ! Dans le cas où « delta » n’est pas négatif « True » ou « False », mais on peut aussi les construire (première condition fausse) et au même temps la à partir des opérations de comparaisons : seconde condition fausse (a==0 fausse, c'est-à-dire a≠0) alors, ce sera l’instruction n°8 qui sera exécutée et le a==b a égale à b programme poursuivra à partir de l’instruction n°9. a!=b a différent de b Comme vous le constatez, on vient de découvrir : a>b a supérieur à b • 3 mots clefs : « if », « elif » et « else » a=b a supérieur où égale à b • Notion de séquence (ou de bloc) d’instruction a<=b a inférieur où égale à b

18

Il est aussi tout à fait possible de construire des conditions en combinant plusieurs conditions avec les opérateurs logiques de base : ET (and), OU (or) et NON (not ou !) L’exemple de programme précédent pourra être écrit comme suit :

if (a <0 and b<0 and c==0) : print(‘a<0 et b<0 et c=0’) else : print (‘a est positif ou nul’)

4.6 – La répétition La répétition est une structure de contrôle largement utilisée dans les programmes. Elle permet de répéter l’exécution d’un bloc d’instructions jusqu’à ce qu’une condition ne soit plus vraie. Dans Python, cette instruction s’appel « while ». Exemple :

1 n = int(input("donnez un nombre")) 2 i = 0 3 s = 0 4 while (i<=n) : 5 s = s+i 6 i=i+1 7 print("la somme des", n , "premiers nombre est : ", s) Dans l’exemple ci-dessus, on répète l’exécution des instructions n°5 et n°6 jusqu’à ce que i soit supérieur à n.

19

Quiz 4 – Structures de contrôle

 a est négatif  a est nul Q 1 -La structure du « IF » est :  a est positif  If (condition) : bloc d’instruction Q5 – Indiquez ce que va afficher la portion de code elif (condition) : suivante: bloc d’instruction a = -10 else : if (a<0) : bloc d’instruction print ("a est négatif") elif (a==0) :  If (condition) print ("a est nul") bloc d’instruction else : elif (condition) print ("a est positif ") bloc d’instruction else bloc d’instruction  a est négatif  If (condition) {  a est nul bloc d’instruction  a est positif } elif (condition) { Q6 – Indiquez ce que va afficher la portion de code bloc d’instruction suivante: } a = -10 else { while (a<0) : bloc d’instruction print (a) } a=a+1 Q2 - La boucle tant que est réalisé à l’aide du :

 while  les 10 premier nombre positif (de 0 à 9)  do while  les 10 premier nombre négatifs (de -10 à -1)  repeat  affiche les nombres négatifs sans s’arrêter

Q3 - La structure de la boucle « while » est : Q7 – Indiquez ce que va afficher la portion de code suivante:  while (condition) : bloc d’instructions a = int(input("Donnez une valeur")  while (condition) if (a>0) : bloc d’instructions i=0  while (condition) : while (i<100) : bloc d’instructions print (a) i=i+1  while (condition) { elif (a<-10 and a>-20) : bloc d’instructions i=-100 } while (i<0) :

print (i) Q4 – Indiquez ce que va afficher la portion de code i=i+1 suivante:

a = 10 if (a<0) :  si « a » est positif, le programme affiche les print ("a est négatif") 100 premiers nombres (de 0 à 99) elif (a==0) :  si « a » est négatif, le programme affiche les print ("a est nul") 100 premiers nombres négatifs (de -100 à -1) else :  si « a » est compris entre -20 et -10 print ("a est positif ") (strictement), le programme affiche les 100 premiers nombres négatifs (de -100 à -1)

20

Chapitre 5 – Séquences

ne séquence est un conteneur ordonné d’éléments Exemples : indexés par des entiers indiquant leurs positions dans print(nom[0 :]) Affiche toute la chaine U le conteneur. print(nom[0 :2]) Affiche les caractères d’indice 0 et 1 print(nom[1 :5]) Affiche les caractères d’indice allant Dans Python, on distingue trois types prédéfinis de de 1 à 4 séquences : print(nom[2:]) Affiche les caractères allant de celui • les chaines de caractères d’indice 2 jusqu’à la fin de la chine • les listes print(nom[-0]) Affiche le premier caractère • et les tuples print(nom[-0 :]) Affiche toute la chaine print(nom[-10 :-3]) Affiche la sous-chaine comprise 5.1 – Chaines de caractères entre le 10ème caractère et le 3ème en comptant depuis la fin de la chaine Définition d’une chaine

On représente les chaines de caractères avec le type « str ». Il s’agit d’un type de données nom modifiable, c'est-à-dire qu’une donnée une fois crée en mémoire ne pourra plus être modifiée. Toute transformation sur la donnée en créera une nouvelle. Ainsi, vous ne pourrez pas modifier un caractère dans la chaine.

Exemple :

Opérations sur les chaines

Longueur :

Dans l’exemple ci-dessus, on voit que l’on ne pourra >>> s = "mathématiques" pas modifier une partie de la chaine. Il va falloir >>> len(s) modifier la chaine entière pour pouvoir rectifier 13 l’erreur. Concaténation :

>>> s1 = "Math" >>> s2 = "ématiques" >>> s3 = s1 + s2 >>> s3 ' Mathématiques ' Répétition : >>> s4 = "Bla ! " >>> s5 = s4 * 3 >>> s5 'Bla ! Bla ! Bla ! ' Il est tout à fait possible d’afficher des parties de la chaine en indiquant des intervalles:

21

Fonctions vs méthodes Quelques méthodes de la classe « str »

En programmation procédurale (impérative), on utilise Test de l’état d’une chaine : les fonctions pour modulariser un programme et créer isupper(),islower(),istitle(),isalnum() , isalpha() , isdigit(), des traitements réutilisables. On identifie alors ces isspace(), startwith() et endwith() sont des exemples de traitements par un nom et on indique les données sur méthode de la classe « str » lesquels vont opérer ces traitements sous forme d’arguments. Dans ce paradigme de programmation, Isupper() et retournent True si la chaîne ne on distingue clairement les données et les traitements islower() contient respectivement que des majuscu- En programmation orientée objet, on assemble dans istitle() retourne True si seule la première une même entité des données et des traitements que le re de chaque mot de la chaîne l’on qualifie de méthodes. Cette entité est qualifiée de est en majuscule classe et un exemple concret d’une classe est qualifié d’objet. isalnum() , retournent True si la chaîne ne isalpha() , contient respective- Python permet les deux styles de programmation. Ainsi, isdigit() ment que des caractères il nous offre tout une panoplie de fonctions, mais aussi et isspace() alphanumériques, alphabétiques, des classe diverses. L’ensemble des types que l’on numériques ou des espaces retrouve dans langage comme C++ ou Java sont des startwith testent si la sous-chaîne définie par classes dans Python. Par exemple, float, int, str sont (suffix[, start[, start et stop commence des classe d’objets. Ils sont donc des propriétés (des stop]]) respectivement par prefix ou finit valeurs) et des méthodes permettant d’exploiter ces et par suffix propriétés. endwith(suffix[, Exemple de fonctions : len(), type() start[, stop]])

Exemple concernant startwith() et endwith() :

Exemple de méthodes de la classe « str » : upper(), lower, strip(), capitalize. On accède à une méthode en indiquant le nom de l’objet (variable instance d’une classe) concaténé à « . » suivi du nom de la méthode. Méthodes retournant une nouvelle chaîne : lower() , retournent respectivement une upper() , chaîne en minuscule, capitalize() et en majuscule, en minuscule swapcase() commençant par une majuscule, ou en casse inversée expandtabs() remplace les tabulations par tabsize espaces (8 par défaut). Center(width, retournent respectivement une [fillchar]), chaîne centrée, justifiée à gauche Dans l’exemple ci-dessus on fait appel à (on dit on ljust(width, ou à droite, complétée par le « invoque »à la méthode « upper() » de l’objet nom [fillchar]) et caractère fillchar (ou par l’espace appartenant à la classe « str ». rjust(width, par défaut) [fillchar]) zfill(width) complète ch à gauche avec des 0 jusqu’à une longueur maximale de

22

width strip([chars]) , suppriment toutes les combinaisons lstrip([chars]) de chars et (ou l’espace par défaut) rstrip([chars]) respectivement au début et en fin, au début, ou en fin d’une chaîne Find(sub [,start renvoie l’index de la chaîne sub [,stop]]) dans la sous-chaîne start à stop , sinon renvoie -1. rfind() effectue le même travail en commençant par la fin. index() et rindex() font de même mais produisent une erreur (exception) si la chaîne n’est pas trouvée replace(old[, remplace count instances (toutes new[, count]]) par défaut) de old par new Split(seps découpe la chaîne en maxsplit [,maxsplit]) morceaux (tous par défaut). rsplit() ef- fectue la même chose en commençant par la fin et striplines() effectue ce travail avec les caractères de fin de ligne Join(seq) concatène les chaînes du conteneur Indexation seq en intercalant entre chaque élément la chaîne Indexation simple : Pour indexer une chaîne, on utilise sur laquelle la méthode est l’opérateur [ ] dans lequel l’index, un entier signé qui appliquée commence à 0 indique la position d’un caractère.

Exemples : Exemples :

23

Exemple : soit une variable m="science" Exemples :

m[0] m[1] m[2] m[3] m[4] m[5] m[6] s c i e n c e m[-7] m[-6] m[-5] m[-4] m[-3] m[-2] m[-1]

Extraction de sous-chaînes : L’opérateur [ ] avec 2 ou 3 index séparés par le caractère « : » permet d’extraire des sous-chaînes (ou tranches) d’une chaîne. Exemple :

m[1 :4] m[-2 :]

s c i e n c e

m[0 :2] m[2 :]

L’accès aux éléments d’une liste se fait de la même manière que pour l’accès aux éléments d’une chaine de caractères. A la différence des chaines de caractères, les listes sont modifiables. A tous moment on peut modifier les valeurs des éléments d’une liste. En effet, dans l’exemple ci-dessus, on a mis dans le premier élément de la liste « couleurs » la valeur « blanc » en remplacement de « rouge ». 5.2 – Listes Remarque : On peut créer une liste de liste : Une liste est une collection ordonnée et modifiable d’éléments éventuellement hétérogènes. Syntaxe : Éléments séparés par des virgules, et entourés de crochets.

Vous voyez que la liste « jeux » contient deux listes : « couleurs » et « joueurs ». Ces deux dernières sont d’ailleurs de types différents. On peut donc mettre des objets de types différents dans une liste. Initialisations et tests : Utilisation de la répétition, de l’itérateur d’entiers range() et de l’opérateur d’appartenance ( in ) :

24

[17.0, 14.5, 11.5, 10.5, 4.5, 9] >>> notes.index(11.5) 2 >>>

Manipulation des sous-listes (tranches) : Si on veut supprimer, remplacer ou insérer plusieurs éléments d’une liste, il faut indiquer une tranche dans le membre de gauche d’une affectation et fournir une liste dans le membre de droite. Exemples : >>> fruits =[] >>> fruits [] >>> fruits=['banane','pomme','raisin','orange'] >>> fruits ['banane', 'pomme', 'raisin', 'orange'] >>> fruits[0:] ['banane', 'pomme', 'raisin', 'orange'] >>> fruits[0:3] ['banane', 'pomme', 'raisin'] Quelques méthodes de modification des listes : >>> fruits[3:4] ['orange'] sort() : tri la liste >>> fruits[-4:] append() : ajoute un élément à la fin de la liste ['banane', 'pomme', 'raisin', 'orange'] reverse() : inverse l’ordre des éléments de la liste >>> fruits[-4:-1] remove() : supprime un élément de la liste ['banane', 'pomme', 'raisin'] index() : donne l’indice d’un élément. >>> fruits[4]='serise' Traceback (most recent call last): File "", line 1, in >>> nombres = [17, 38, 10, 25, 72] fruits[4]='serise' >>> nombres.sort() IndexError: list assignment index out of range >>> nombres >>> fruits[3]='serise' >>> notes = [10.5, 11.5, 4.5, 17.0, 14.5] >>> fruits >>> notes.sort() ['banane', 'pomme', 'raisin', 'serise'] >>> notes >>> fruits[1:3]=['mellon','pasthèque'] [4.5, 10.5, 11.5, 14.5, 17.0] >>> fruits >>> notes.append(19) ['banane', 'mellon', 'pasthèque', 'serise'] >>> notes >>> fruits[2:]=['poire','grenadine'] [4.5, 10.5, 11.5, 14.5, 17.0, 19] >>> fruits >>> notes.append(9) ['banane', 'mellon', 'poire', 'grenadine'] >>> notes >>> [4.5, 10.5, 11.5, 14.5, 17.0, 19, 9] >>> notes.sort() >>> notes.reverse() >>> notes [19, 17.0, 14.5, 11.5, 10.5, 9, 4.5] >>> notes.remove(19) >>> notes [17.0, 14.5, 11.5, 10.5, 9, 4.5] >>> notes.append(9) >>> notes [17.0, 14.5, 11.5, 10.5, 9, 4.5, 9] >>> notes.remove(9) >>> notes

25

5.3 – Séquences de séquences Les séquences, comme du reste les autres conteneurs, l’opération son effet peuvent être imbriqués. x in s True si s contient x , False sinon

>>> scores= [1,4,6,3] x not in s True si s ne contient pas x , False sinon >>> joueurs = ['Mohand', 'said', 'nawel'] s + t concaténation de s et t >>> jeux = [joueurs, scores] >>> jeux s*n , n*s n copies (superficielles) concaténées de [['Mohand', 'said', 'nawel'], [1, 4, 6, 3]] s >>> for j in jeux: s[i] Ième élément de s (à partir de 0) for elem in j: s[i:j] tranche de s de i (inclus) à j (exclu) print(elem) s[i:j:k] tranche de s de i à j avec un pas de k Mohand len(s) longueur de s said nawel max(s) , plus grand, plus petit élément de s 1 min(s)

4 ère 6 s.index(i) indice de la 1 occurrence de i dans s 3 s.count(i) nombre d’occurrences de i dans s >>>

5.4 – Tuples 5.6 – Références La gestion des variables dans Python n’est pas tout à Un tuple est une collection ordonnée et non modifiable fait la même que dans d’autres langages comme C ou d’éléments éventuellement hétérogènes. Java. En effet, lorsque vous affecter une variable à une Syntaxe : Éléments séparés par des virgules, et autre variable, Python ne créera pas une copie de la entourés de parenthèses. variable source, mais juste une référence à la copie originale. La particularité de ce mécanisme est lorsque Exemple : vous modifier la seconde variable, la première est elle >>> monTuple=('Bouzidi', 2, ['tomate', 'banane']) aussi modifié puisque les deux variables font référence >>> monTuple à la même donnée (valeur) en mémoire. ('Bouzidi', 2, ['tomate', 'banane']) Exemple : >>> >>> fruits1 = ['pomme', 'banane', 'orange'] >>> fruits1 • L’indexage des tuples s’utilisent comme celui des ['pomme', 'banane', 'orange'] listes ; >>> fruits2 = fruits1 • le parcours des tuples est plus rapide que celui des >>> fruits2 listes ; ['pomme', 'banane', 'orange'] • ils sont utiles pour définir des constantes. >>> fruits2.append('serise') >>> fruits2 Attention, les tuples ne sont pas modifiable exactement ['pomme', 'banane', 'orange', 'serise'] comme les chaines de caractères. >>> fruits1 ['pomme', 'banane', 'orange', 'serise'] 5.5 – Opérations communes >>> fruits3 = [] >>> fruits3 = fruits2[0:] Les types prédéfinis de séquences Python (chaîne, liste >>> fruits3 et tuple) ont en commun les opérations résumées dans ['pomme', 'banane', 'orange', 'serise'] le tableau suivant où s et t désignent deux séquences >>> fruits3.remove('serise') du même type et i , j et k des entiers : >>> fruits3 ['pomme', 'banane', 'orange'] >>> fruits2 ['pomme', 'banane', 'orange', 'serise']

26

Dans l’exemple ci-dessus, le fait de faire : fruits2 = fruits1 ne va pas créer une nouvelle donnée pour la nouvelle variable « fruits2 » mais va juste établir une nouvelle référence vers la même donnée. Ainsi, « fruits1 » et « fruits2 » feront référence au même objet. La modification de cet objet (donnée) va se répercuté sur les deux variable. Pour éviter cette situation, il faut créer une copie explicite de la variable. Ainsi en faisant : fruits2 = fruits1[0 :] va créer une nouvelle liste « fruits2 » en recopiant les éléments de la liste « fruits1 ».

Il y a un autre moyen de créer des copies de variable, c’est d’utiliser la fonction « copy » se trouvant dans le module « copy ». Ainsi, vous devez importer cet fonction ou ce module avant de l’utiliser.

Exemple :

>>> from copy import copy >>> fruits2 = copy(fruits1) >>> fruits2 ['pomme', 'banane', 'orange', 'serise'] >>> fruits1 ['pomme', 'banane', 'orange', 'serise'] >>> fruits1.append('grenadine') >>> fruits1 ['pomme', 'banane', 'orange', 'serise', 'grenadine'] >>> fruits2 ['pomme', 'banane', 'orange', 'serise'] >>>

27

Quiz 5 – Partie 1 : Chaines de caractères

Q 1 – Indiquez les commandes correctes: Indiquez ce qu’affiche la dernière commande :  couleur  msg = "bounjoir"  bleu  msg = "bonjour’  BLEU  msg = ’bonjour’  bleubleubleu  msg = bonjour

 msg = """Bonjour""" Q 7 – soit les commandes suivantes :  msg = """Bonjour"  msg, nom = "Bonjour", "Professeur" couleur = "Bleu"  msg, nom = "Bonjour Professeur" print(couleur.lower())

Q 2 – Indiquez ce que produit la commande suivante : print( Indiquez ce qu’affiche la dernière commande : "il fait + "beau") :  couleur   il fait beau bleu   il fait + beau BLEU   "il fait + "beau" bleubleubleu  Erreur de sytaxe Q 8 – soit les commandes suivantes : Q 3 – soit les commandes suivantes : couleur = "bleu" NumRue = "45" print(couleur.capitalize()) NomRue = "Boulevard Amirouche" Cp = "06000" Indiquez ce qu’affiche la dernière commande : Ville = "Bejaia"  couleur print( "adresse"+NumRue+NomRue+Cp+Ville)  bleu  BLEU Indiquez ce qu’affiche la dernière commande :  Bleu  45 Boulevard Amirouche 06000 Bejaia  45+Boulevard+Amirouche+06000+Bejaia Q 9 – soit les commandes suivantes :  45 , Boulevard Amirouche, 06000, Bejaia couleur = "bleu" Q 4 – soit les commandes suivantes : print(couleur.index(‘u’))

NomRue = "Boulevart Amirouche" Indiquez ce qu’affiche la dernière commande : NomRue[8]= "d"  1 print(NomRue)  2  3 Indiquez ce qu’affiche la dernière commande : Q 10 – soit les commandes suivantes :  Boulevart Amirouche  Boulevard Amirouche couleur = "bleu"  Affiche une erreur car les chaines de caractères ne print(couleur.index(‘b’)) sont pas modifiables Indiquez ce qu’affiche la dernière commande : Q 5 – soit les commandes suivantes :  1 couleur = "bleu"  2 couleur = couleur *3  0 print(couleur) Q 11 – soit les commandes suivantes :

phrase = "Il fait beau aujourd’hui" Indiquez ce qu’affiche la dernière commande : print(phrase.startwith(‘b’))  couleur

 bleu Indiquez ce qu’affiche la dernière commande :  True  False  bleu * 3

 bleubleubleu Q 12 – soit les commandes suivantes :

Q 6 – soit les commandes suivantes : phrase = "Il fait beau aujourd’hui" print(phrase.startswith(‘il fait’)) couleur = "bleu"

print(couleur.upper()) Indiquez ce qu’affiche la dernière commande :

 True  False

28

Q 12 – soit les commandes suivantes : Q 18 – soit les commandes suivantes :

phrase = "Il fait beau aujourd’hui" phrase = "Il fait beau aujourd’hui" print(phrase.endswith(‘il fait’)) print(phrase.[13 :])

Indiquez ce qu’affiche la dernière commande :  True  False Indiquez ce que va afficher la dernier commande:  Il fait beau aujourd’hui Q 13 – soit les commandes suivantes :  Il fait beau  aujourd’hui phrase = "Il fait beau aujourd’hui"

print(phrase.endswith(‘hui’)) Q 19 – soit les commandes suivantes : Indiquez ce qu’affiche la dernière commande :  True  False phrase = "Il fait beau aujourd’hui"

print(phrase.[13 :]) Q 14 – soit les commandes suivantes :

phrase = " Il fait beau aujourd’hui " Indiquez ce que va afficher la dernier commande: print(phrase.strip())  Il fait beau aujourd’hui  Il fait beau Indiquez ce qu’affiche la dernière commande :  aujourd’hui  Il fait beau aujourd’hui  ****** Il fait beau aujourd’hui Q 20 – soit les commandes suivantes :  Il fait beau aujourd’hui ******* phrase = "Il fait beau aujourd’hui"  Il fait beau aujourd’hui print(phrase[3:7])

Q 15 – soit les commandes suivantes : Indiquez ce que va afficher la dernier commande: phrase = "Il fait beau aujourd’hui "  Il fait beau aujourd’hui print(phrase.isalpha())  Il fait beau  fait Indiquez les commandes qui affichent « True » : Q 21 – soit les commandes suivantes :  print(phrase.isupper()) phrase = "Il fait beau aujourd’hui"  print(phrase.islower()) print(phrase[-3:])  print(phrase.iscapitalize())

 print(phrase.isdigit()) Indiquez ce que va afficher la dernier commande:  print(phrase.isalpha())  Il fait beau aujourd’hui

 Il fait beau Q 16 – soit les commandes suivantes :  hui phrase = "Il fait beau aujourd’hui" Q 22 – soit les commandes suivantes : print(phrase.find("b")) phrase = "Il fait beau aujourd’hui"

print(phrase[-11:]) Indiquez les commandes qui affichent « True » :

 0 Indiquez ce que va afficher la dernier commande:  19  Il fait beau aujourd’hui  1  aujourd’hui  9  hui

Q 23 – soit les commandes suivantes : Q 17 – soit les commandes suivantes : phrase = "Il fait beau aujourd’hui" phrase = "Il fait beau aujourd’hui" print(phrase[-11:-5]) print(phrase.[0 :])

Indiquez ce que va afficher la dernier commande: Indiquez ce que va afficher la dernier commande:  Il fait beau aujourd’hui  Il fait beau aujourd’hui  aujour  Il fait beau  aujourd’hui  aujourd’hui

29

Quiz 5 – Partie 2 : Listes

Q1 – (listes) Une liste est une structure de données pouvant Q9 – (listes) indiquez ce que va contenir « etudiants[-1] »: contenir des objets de types différents: >>> etudiants = ['Mohand', 15, 'Said', 13, 'Nawel', 14, 'Thanina', 18]  Vrai  Faux >>> etudiants[-1]  Mohand  15  18 Q2 – (listes) Une liste est une classe d’objets ayant des méthodes comme « append() » : Q10 – (listes) indiquez ce que va contenir « etudiants[ 0 :] »:  Vrai  Faux >>> etudiants = ['Mohand', 15, 'Said', 13, 'Nawel', 14, 'Thanina', 18] Q3 – (listes) Indiquez parmi les méthodes ci-dessous celle qui >>> etudiants[0 :] n’appartiennent pas aux listes :  Tous les éléments de la liste « Etudiants »  upper()  lower()  index()  Une partie des éléments uniquement  count()  reverse()  short()  pop()  insert()  capitalize() Q11 – (listes) indiquez ce que va contenir « etudiants[ 0 :2] »: >>> etudiants = ['Mohand', 15, 'Said', 13, 'Nawel', 14, 'Thanina', 18] Q4 – (listes) indiquez ci ce bloc de commandes est correcte: >>> etudiants[0 :2] Notes = [14, 15, 17, 9.5, 10.5] Notes = Notes + 3  Tous les éléments de la liste « Etudiants »  Une partie des éléments uniquement  Correcte  Incorrecte !  Correspond à la sous liste : ['Mohand', 15]  L’élément d’indice 2 n’est pas compris dans le résultat Q5 – (listes) indiquez ci ce bloc de commandes est correcte:  L’élément d’indice 2 fait partie du résultat

Notes = [14, 15, 17, 9.5, 10.5] Q13 – (listes) indiquez ce que va contenir la liste « Notes2 »: Notes = Notes * 3 >>> Notes1 = [14, 15, 17, 9.5] >>> Notes2 = Note1  Correcte  Incorrecte ! >>> Notes1.append(5)

Q6 – (listes) indiquez ci ce bloc de commandes est correcte:  [14, 15, 17, 9.5]  [14, 15, 17, 9.5, 5] Notes = [14, 15, 17, 9.5, 10.5]  [5, 14, 15, 17, 9.5] Notes = Notes ** 3 Indiquez pourquoi : ......

......  Correcte  Incorrecte ! Q14 – (listes) indiquez ce que va afficher le bloc suivant: Q7 – (listes) indiquez ci ce bloc de commande est correcte: >>> ligne1 = [14,15,17,18] Note1 = [14, 15, 17, 9.5, 10.5] >>> ligne2 = [14,18,45] Note2 = [10, 11, 7] >>> ligne3 = ['bouzidi', 'lhadi', 'enseignant'] Notes = Note1 * Notes2 >>> matrice =[ligne1, ligne2, ligne3] >>> for ligne in matrice:  Correcte  Incorrecte ! print("Nouvelle ligne") print("**************") Q8 – (listes) indiquez ce que va contenir « Notes »: for colonne in ligne: print(colonne) Note1 = [14, 15, 17, 9.5, 10.5] Note2 = [10, 11, 7] Notes = Note1 + Notes2       [14, 15, 17, 9.5, 10.5]  [10, 11, 7] Nouvelle ligne 14 14 Boucle Erreur  [14, 15, 17, 9.5, 10.5, 10, 11, 7] ************** 15 15 infinie 14 17 17 Q8 – (listes) indiquez ce que va contenir « etudiants[1] »: 15 18 18 17 Nouvelle ligne >>> etudiants = ['Mohand', 15, 'Said', 13, 'Nawel', 14, 'Thanina', 18] 18 ************** >>> etudiants[1] Nouvelle ligne 14  Mohand  15  Said ************** 18 14 45 Q12 – (listes) indiquez ce que va contenir la liste « classe »: 18 Nouvelle ligne 45 ************** >>> etudiants = ['Mohand', 15, 'Said', 13, 'Nawel', 14, 'Thanina', 18] Nouvelle ligne bouzidi >>> classe = Etudiants.copy() ************** lhadi bouzidi  Pointera vers tous les éléments de la liste « Etudiants » lhadi enseignant

 Une copie de la liste « Etudiants » enseignant

30

Chapitre 6 – Dictionnaires

Les dictionnaires sont des >>> capitales = {'Algérie':'Alger', 'France':'Paris', objets pouvant contenir 'Japon':'Tokyo'} d’autres objets comme les >>> capitales listes. Cependant, à la {'France': 'Paris', 'Algérie': 'Alger', 'Japon': 'Tokyo'} différence de ces dernières, >>> les objets d’un dictionnaire ne sont pas rangés dans un ordre précis, mais à chaque 6.2 – Comment ajouter une clé élément (valeur) du dictionnaire est associée une « clé ». Cette clé peut être un entier comme dans le cas Dès que vous associé une valeur à une clé, la clé sera des listes, mais en général, on utilise une chaine de crée si elle n’existe pas déjà. Par exemple, dans le caractères. Par exemple on peut construire un dictionnaire « capitales » je veux créer la clé « USA » et dictionnaire des capitales et comme clé on peut utiliser lui associé la valeur « Washington ». Je fais comme le nom des pays : suis :

Exemple de dictionnaire : >>> capitales['USA']='Washington' Clés Valeurs >>> capitales Algérie Alger {'USA': 'Washington', 'France': 'Paris', 'Algérie': 'Alger', France Paris 'Japon': 'Tokyo'} Japon Tokyo USA Washington On voit bien qu’en écrivant : Allemagne Berlin « capitales['USA']='Washington' » un nouveau couple (clé : valeur) est ajouté au dictionnaire. Dans le cas présent c’est le couple « 'USA': 6.1 – Créer un dictionnaire 'Washington' ». Vous pouvez créer un dictionnaire de plusieurs façons : De façon générale, vous ajouterez toujours un couple A - Utiliser le mot réservé « dict » qui qualifie la classe « clé :valeur ». des dictionnaires : >>> capitales = dict() >>> capitales 6.3 – Modifier les valeurs d’un dictionnaire B – Créer un dictionnaire vide en se servant des Vous pouvez modifier les valeurs d’un dictionnaire accolades : comme ceci : >>> capitales = {} nomDictionnaire[clé] = valeur >>> capitales Exemple : je veux modifier la valeur associé à la clé {} ‘Algérie’ d dictionnaire « capitales » : >>> type(capitales) >>> capitales {'USA': 'Washington', 'Algérie': 'Alger', 'Japon': Notez bien ici que les accolades représentent un 'Tokyo'} dictionnaire. C’est comme les crochets qui représentent >>> capitales['Algérie']='Bejaia' les listes ou les parenthèses qui représentent les tuples. >>> capitales {'USA': 'Washington', 'Algérie': 'Bejaia', 'Japon': C – Créer le dictionnaire en lui associant des éléments : 'Tokyo'} >>> capitales['Algérie']='Alger' On peut aussi supprimer une clé. Ceci entraine, bien >>> capitales évidemment la suppression de la valeur, car la valeur {'Algérie': 'Alger'} est associée à la clé.

D – Créer un dictionnaire en lui associant plusieurs clés et valeurs :

31

Exemple je supprime la clé « Algérie » : >>> capitales.pop('Algérie') Parcours de valeurs : 'Alger' >>> capitales {'USA': 'Washington', 'France': 'Paris', 'Japon': 'Tokyo'} >>> for valeur in capitales.values(): >>> capitales.pop('France') print(valeur) 'Paris' Washington >>> capitales Alger {'USA': 'Washington', 'Japon': 'Tokyo'} Tokyo >>>

Attention, vous ne pouvez pas supprimer directement la valeur : Parcours mixte : >>> capitales.pop('Tokyo') >>> for cle, valeur in capitales.items(): Traceback (most recent call last): print("La capitale de ", cle, "est : ", valeur) File "", line 1, in La capitale de USA est : Washington capitales.pop('Tokyo') La capitale de Algérie est : Alger KeyError: 'Tokyo' La capitale de Japon est : Tokyo >>> 6.4 – Quelques méthodes des dictionnaires Exemple de programme complet manipulant un Comme pour les listes et les chaines de caractères, vous dictionnaire : pouvez exploiter plusieurs méthodes des dictionnaires. Ainsi vous pouvez consulter les listes des clés ou la liste # --*-- codding : utf8 --*-- des valeurs.

>>> capitales.keys() capitales = {} dict_keys(['USA', 'Algérie', 'Japon']) rep = 'o' >>> capitales.values() while (rep.lower() !='n'): dict_values(['Washington', 'Alger', 'Tokyo']) print() >>> capitales.items() pays = input("Donnez un pays : ") dict_items([('USA', 'Washington'), ('Algérie', 'Alger'), capitale=input('Donnez sa capitale : ') ('Japon', 'Tokyo')]) capitales[pays]= capitale rep = ' ' 6.5 – Parcourir un dictionnaire while (rep.lower()!='o' and rep.lower()!='n'): rep = input('Voulez-vous donnez une autre capitale Le parcourt d’un dictionnaire ne se fait pas comme ? (o/n) : ') pour les listes. Dans le cas du dictionnaire, on peut parcours les clés, les valeurs ou les deux print("******************************") simultanément. print() Parcours des clés : for pays, capitale in capitales.items(): >>> print (capitales) print("La capitale de", pays, " est : ", capitale ) {'USA': 'Washington', 'Algérie': 'Alger', 'Japon': print() 'Tokyo'} print() >>> for cle in capitales.keys(): print(cle) USA Algérie Japon >>>

32

Voici le résultat : """ On suppose qu’on a deux dictionnaire: ---> continentDe ---> capitaleDe Ce programme donne le continent et la capitale Donnez un pays : Algérie d’un pays introduit au clavier. Donnez sa capitale : Alger Lorsque le pays en question n’existe Voulez-vous donnez une autre capitale ? (o/n) : o pas dans nos dictionnaire, ce programme répond qu'il ignore la réponse!

Donnez un pays : France """ Donnez sa capitale : Paris Voulez-vous donnez une autre capitale ? (o/n) : o # Voici nos données: dictionnaire continentDe continentDe = { "Algérie":"Afrique", Donnez un pays : Tunisie "Niger":"Afrique", Donnez sa capitale : Tunis "Mali":"Afrique", Voulez-vous donnez une autre capitale ? (o/n) : n "Tunisie":"Afrique", "Maroc":"Afrique", "France":"Europe", ****************************** "Italie":"Europe", La capitale de Algérie est : Alger "Espagne":"Europe", La capitale de Tunisie est : Tunis "Suisse":"Europe", La capitale de France est : Paris "Russie":"Asie", "Chine":"Asie", "Inde":"Asie", "USA":"Amérique", "Brésile":"Amérique", "Canada":"Amérique" } Voici un autre exemple : # Voici nos données: dictionnaire capitaleDe capitaleDe = { # --*-- codding : utf8 --*-- "Algérie":"Alger", from random import choice "Niger":"Noukchout", capitales = {'Algérie':'Alger', 'Tunisie':'Tunis', "Mali":"Tindouf", "Tunisie":"Tunis", 'France':'Paris',\ "Maroc":"Tanger", 'USA':'Wachington', 'Japon':'Tokyo', "France":"Paris", 'Egypte':'Cair'} "Italie":"Rome", jouer = 'o' "Espagne":"Madrid", "Suisse":"Genève", while (jouer.lower() == 'o'): "Russie":"Mosco", print() "Chine":"Taywane", print("Nouvelle partie ... ") "Inde":"Boolywood", pays = [] "USA":"Wachingtown", "Brésile":"barzilia", for p in capitales.keys(): "Canada":"Montreal" pays.append(p) } pays = choice(pays) print('donnez la capitale de : ', pays) while True: # lecture des données c = input() pays = input("Donnez un pays") if (capitales[pays] ==c): print("Bravo") # traitement else: capitale = capitaleDe.get(pays) continent = continentDe.get(pays) print("perdu") if capitale == None: jouer = ' ' print("l'ignore la capitale de votre pays") print() if continent == None: while (jouer.lower()!='o' and jouer.lower()!='n'): print("l'ignore la continent de votre pays") if capitale != None and continent != None: jouer = input('voulez-vous jouer encore (O/N)? ') print("la capitale de ", pays, " est : ", capitale) print("la continent de ", pays, " est : ", continent)

# bouclage rep = input("voulez-vous recommencer (O/N)? ") if rep.lower()=='n': break

33

Quiz 6 – Dictionnaires

Soit le programme suivant :

# -*- coding: utf-8 -*- molecule = {} molecule['H2O'] = 'eau' molecule['O2'] = 'Bi-oxygène' molecule['HCL'] = 'Acide chloridrique' molecule['H2SO4'] = 'Acide sufurique'

for formule, description in molecule.items(): print"la formule chimique de ", description, " est ", formule

Question 1 : La variable « molecule » est :  Une liste  Un tuple  Un dictionnaire

Question 2 : Le littérale « H2O » est :  Une valeur  Une donnée quelconque  Une clé

Question 3 : L’instruction « molecule['H2O'] = 'eau' » permet de :  Créer un nouvel élément du dictionnaire « molecule ». Cet élément aura pour clé : « eau » et pour valeur « H2O »  Créer un nouvel élément du dictionnaire « molecule ». Cet élément aura pour clé : « H2O » et pour valeur « eau »

Question 4 : dans la boucle « for » la méthode « items() » renvoi :  Tous les éléments (items) du dictionnaire.  Uniquement les clés du dictionnaire  Uniquement les valeurs du dictionnaire

Question 5 : dans la boucle « for » lors de chaque itération la variable « formule » reçoit :  La clé du ième élément du dictionnaire (i correspondant à l’itération de la boucle). Le dictionnaire est donc parcouru séquentiellement du début jusqu’à sa fin  La valeur du ième élément du dictionnaire (i correspondant à l’itération de la boucle). Le dictionnaire est donc parcouru séquentiellement du début jusqu’à sa fin

Question 6 : dans la boucle « for » lors de chaque itération la variable « description » reçoit :  La clé du ième élément du dictionnaire (i correspondant à l’itération de la boucle). Le dictionnaire est donc parcouru séquentiellement du début jusqu’à sa fin  La valeur du ième élément du dictionnaire (i correspondant à l’itération de la boucle). Le dictionnaire est donc parcouru séquentiellement du début jusqu’à sa fin

Question 7 : On peut modifier une clé dans un dictionnaire :  Vrai  Faux Question 8 : On peut modifier la valeur associée à une clé dans un dictionnaire :  Vrai  Faux Question 9 : Dans le programme ci-dessus, « molecule.keys() » renvoi :  Ensemble des clés  Ensemble des valeurs Question 10 : Dans le programme ci-dessus, « molecule.values() » renvoi :  Ensemble des clés  Ensemble des valeurs Question 11 : Dans le programme ci-dessus, « molecule.pop(‘H2O’) »:  Supprime l’élément (couple clé + valeur) de clé « H2O »  Supprime uniquement la clé et laisse la valeur « eau » dans le dictionnaire

34

Chapitre 7 – Fichiers

Jusqu’à présent, nous avons créé • Les fichiers sont donc identifiés au final par : un des programmes qui travaillent sur chemin de localisation du fichier, un nom suivi des données sauvées en mémoire d’une extension. Par exemple si un fichier nommé centrale de l’ordinateur. L’arrêt du « test. Txt » se trouve dans le dossier programme entraine « c:\programmes\python\ ». Alors on pourra automatiquement la suppression de ces données. Dans accéder au fichier en indiquant : beaucoup de situations (pour ne pas dire, dans la « c:\programmes\python\test.txt ». majorité des cas), on a besoin de garder la trace des « c:\programmes\python\ » est le chemin données que l’on souhaite soumettre à un programme identifiant le dossier où se trouve le fichier. et de mémoriser les résultats qui découlent de ces traitements. La solution c’est d’utiliser des fichiers ou A l’issue de ce qui est présenté ci-dessus, il devient des bases de données. Pour l’instant, nous évident que pour pouvoir utiliser un fichier, il faut n’aborderont pas les bases de données. Nous allons indiquer son nom (et éventuellement une extension) et vous présenter dans ce qui suite : le chemin où il se trouve. On parlera ici de fichier 1. C’est quoi un fichier et où se trouvent-il physique. 2. Comment le localiser 3. Comment écrire séquentiellement dans un 7.2 – Localiser un fichier fichier 4. Comment lire séquentiellement un fichier Pour localiser un fichier on peut : 5. C’est quoi un fichier « texte » • Soit indiquer au même temps le chemin où il se 6. Comment sauver, dans un fichier, des trouve suivi de son nom. Exemple : données type divers (ne sont pas du texte) ? « c:\programmes\python\test.txt ». 7. Gestion des exceptions (gestion des erreurs • Soit utiliser une commande du système d’accès aux fichiers) d’exploitation pour se placer dans le dossier où se trouve le fichier en question, puis utiliser son nom sans indiquer sa localisation : 7.1 – C’est quoi un fichier ?

• Un fichier est une structure de données englobant >>> from os import chdir un ensemble d’informations quelconques >>> chdir("c:\programmes\python\") (nombres, texte, images, etc.) sauvées sur des

supports permanents (disque, clé USB, CDROM, La commande permettant de se placer dans un dossier etc.). (ou d’indiquer un dossier courant) est « chdir ». Elle se • En générale, tous les systèmes d’exploitation trouve dans le module « os ». C’est pour cette raison organisent les fichiers dans des répertoires (ou que nous important d’abord « chdir » depuis module : dossiers) hiérarchisés. Les fichiers sont donc >>> from os import chdir contenus (ou localisés) dans ces dossiers.

• Les fichiers sont, en général, identifiés par un nom et une extension. 7.3 – Ecrire séquentiellement dans un • Le nom du fichier est une chaine de caractères quelconques excluant, cependant quelques fichier caractères spéciaux Pour accéder à un fichier que l’on veut lire ou écrire, il • L’extension du fichier indique son type faut créer une variable (appelée « objet-fichier ») • Il existe différents types de fichiers : particulière qui va le représenter dans votre o images : JPG, PNG, TIFF, BMP, … programme. Pour cela vous allez vous servir de la o traitement de texte : DOC, ODT PDF, … fonction « open() ». Cette fonction a besoin du nom o Animation : SWF, … physique (avec le chemin éventuellement) et le type o Vidéo : MPEG, MOV, FLV, … d’ouverture (ou d’action) que vous voulez faire sur le o Texte ascii : TXT, etc. fichier en question. o Page web : HTML, XML, PHP, etc… Vous pouvez définir les types d’ouverture suivant :

35

• ‘a’ : ajout : Si le fichier n’existe pas il sera Exemple : crée. • ‘r’ : lecture : le fichier doit exister au préalable >>> f = open('texte.txt', 'w') • ‘w’ : écriture : si le fichier existe il sera écrasé >>> type(f) • ‘r+’ : mise à jour : le fichier doit exister au préalable >>> f.write("Bonjour à tous") >>> f.write("c'est une belle journée pour appendre les >>> obFichier = open('Monfichier','a') fichiers") >>> obFichier.write('Bonjour, les matheux!') >>> f.close() >>> obFichier.write("Bienvenue sur les fichiers !") >>> obFichier.close() Voici le fichier généré : >>>

• La première ligne crée l’objet-fichier obFichier. Ce Bonjour à tousc'est une belle journée pour appendre les fichiers dernier fait référence à un fichier véritable (sur disque ou disquette) dont le nom est Monfichier .

Attention : ne confondez pas le nom de fichier

avec le nom de l’objet-fichier qui y donne accès !

• La fonction open() attend deux arguments , qui Remarquez qu’à chaque fois que l’on écrit, le texte est doivent tous deux être des chaînes de caractères. rajouté à la fin du fichier. Le premier argument est le nom du fichier à ouvrir, Reprenant le même exemple en insérant des saut de et le second est le mode d’ouverture. Dans le cas ligne : présent on ouvre le fichier en « ajout » ou « append » ce qui explique la lettre ' a’. Ceci >>> f = open('texte.txt', 'w') signifie que les données à enregistrer doivent être >>> f.write("Bonjour à tous \n") ajoutées à la fin du fichier, à la suite de celles qui >>> f.write("c'est une belle journée pour appendre les s’y trouvent éventuellement déjà. Nous aurions pu fichiers \n ") utiliser aussi le mode ' w ' (pour write), mais >>> f.write("Bon courage! \n ") lorsqu’on utilise ce mode, Python crée toujours un >>> f.close() nouveau fichier (vide), et l’écriture des données commence à partir du début de ce nouveau Voici cette fois ce que ça donne dans le fichier : fichier. S’il existe déjà un fichier de même nom, celui-ci est effacé au préalable.

• Je rappel que notre variable objet-fichier est un objet de la classe « file ». Ainsi, il dispose de plusieurs méthodes : write(), read(), readline(), close(à, etc. La méthode write() réalise l’écriture proprement dite. Les données à écrire doivent être fournies en argument. Ces données sont 7.4 – Lire depuis un fichier enregistrées dans le fichier les unes à la suite des La lecture depuis un fichier peut se fait autres (c’est la raison pour laquelle on parle de séquentiellement. Vous pouvez lire d’au moins 3 façons fichier à accès séquentiel). Chaque nouvel appel de différentes : write() continue l’écriture à la suite de ce qui est • Lire d’un seul coup toutes les données du déjà enregistré. fichier et les mettre dans une variable

• Lire le fichier ligne par ligne • A la fin de l’utilisation d’un fichier, il faut le fermer. • Lire un nombre de caractère bien précis à C’est le but de la méthode close(). Celui-ci est chaque opération de lecture désormais disponible pour tout autre usage. La lecture complète des données se fait par la méthode read() sans préciser d’arguments. Exemple : >>> f = open('texte.txt', 'r') >>> texte = f.read() >>> print(texte)

36

Bonjour à tous Notez-bien la méthode seek(). Elle sert à se positionner c'est une belle journée pour appendre les fichiers dans le fichier. Ainsi, si vous faites seek(5), vous serez Bon courage! placé sur le 6ème caractère de votre fichier :

La lecture ligne par ligne se fait par readline() : >>> f = open('texte.txt', 'r') >>> f.seek(5) >>> f = open('texte.txt', 'r') >>> texte = f.read() >>> ligne1 = f.readline() >>> print texte >>> ligne2 = f.readline() ur à tous >>> ligne3 = f.readline() c'est une belle journée pour appendre les fichiers >>> ligne4 = f.readline() Bon courage!

>>> print(ligne1) 7.5 – Contrôler la lecture d’un fichier Bonjour à tous avec une boucle ?

>>> print(ligne2) Nous avons vue précédemment que lorsque vous êtes à c'est une belle journée pour appendre les fichiers la fin d’un fichier et que vous essayez de lire la suite, il vous renvoi une chaine vide. Donc un moyen de >>> print(ligne3) détecter la fin d’un fichier est de tester si la chaine Bon courage! renvoyée est vide : # -*- coding: utf-8 -*- >>> ligne4 f = open('texte.txt', 'r') '' i=0 while True: Notez-bien que lorsque vous essayez de lire et que vous ligne = f.readline() tes à la fin de votre fichier, la chaine que vous allez if ligne == "": obtenir sera vide. print "Ah! je suis arrivé sur la fin du fichier" break La lecture d’une quantité de caractère à chaque else: lecture : print "voici la ligne ", i print ligne # -*- coding: utf-8 -*- i=i+1 f = open('texte.txt', 'r') f.seek(0) Dans l’exemple ci-dessus, remarquez que nous avons une boucle avec une condition toujours à « vraie ». On texte1 = f.read(7) quitte cette boucle grâce à la commande « break ». print(texte1) Ceci uniquement lorsqu’on détecte la fin di fichier. Cette fin est détectée lorsque la méthode readline() texte2 = f.read(8) renvoi une chaine vide. print(texte2) 7.6 – Ecrire et lire sur un fichier des texte3 = f.read() données de divers formats print(texte3) Jusqu’à présent nous avons parlé de fichier « texte ».

C'est-à-dire que les données sauvées sont uniquement Voici ce que ça donne : des chaines de caractères. Quen est-i-il lorsque j’ai des données diverses : entiers, réels, liste etc. ?

On peut procéder de deux manières :

• Convertir les données en chaines puis les écrire sur le fichier et faire l’inverse lors des lectures • Utiliser des fichiers de types binaire et importé un

module spécial nommé « pickle » qui se chargera de formater comme il se doit les données et ainsi permettre de récupérer ses données correctement.

37

Possibilité 1 : Travailler avec des fichiers texte mais Remarquez que la liste a bel et bien été sauvée dans le opérer avec des conversions : fichier, mais sous forme d’une suite de caractères, y compris les crochets et les guillemets. Ceci ne nous >>> f = open("texte1.txt", "w") permet pas de récupérer facilement nos données ! >>> a = 15.56 Dans ce cas, il faut utiliser la module « pickle » et au >>> f.write(a) lieu des fichiers « texte » utiliser des fichiers binaires. Traceback (most recent call last): File "", line 1, in f.write(a) >>> from pickle import * TypeError: expected a character buffer object >>> promo, groupe, notes = 'STID', 'G1', [12.5,14,16.5] >>> f.write(str(a)) >>> f = open("Notes.txt", "wb") >>> f.close() >>> dump(promo, f) >>> f = open("texte1.txt", "r") >>> dump(groupe, f) >>> texte = f.read() >>> dump(notes, f) >>> print texte >>> f.close() 15.56 Dans l’exemple ci-dessus, on importe le module pickle, On voit que lorsqu’on essaye d’écrire directement une qui nous donne accès à deux méthodes : dump() et variable de type float avec la méthode write(), ça ne load(). Dump() permet d’écrire dans le fichier des fonctionne pas. C’est normal, car cette méthode données de n’importe quel type. Load() fait la lecture s’attend à avoir un « str ». C’est la raison pour laquelle de ces données. Ci-dessous, on les lit les données. lorsqu’on fait >>> f.write(str(a)) ça fonctionne. Remarquez que dans les modes on a rajouté le caractère « b » pour dire fichier binaire. Attention ! Lorsque vous aurez des structures plus complexes comme des conteneurs, vous aurez des >>> f = open("Notes.txt", "rb") surprises ! >>> v1 = '' >>> v2 = '' Exemple : >>> v2 = [] >>> v1=load(f) >>> f = open("texte1.txt", "w") >>> v2=load(f) >>> liste = ['Math', 'Info', 14.56] >>> v3=load(f) >>> f.write(str(liste)) >>> print v1 >>> f.close() STID >>> f = open("texte1.txt", "r") >>> print v2 >>> texte = f.read() G1 >>> texte >>> print v3 "['Math', 'Info', 14.56]" [12.5, 14, 16.5] >>>

38

Quiz 7 – Fichiers

Question 1 : Dans la commande ci_dessous Question 6 : Le mode d’ouverture « ‘w’ » (write) veut dire que le fichier: >>> from os import chdir  doit exister au préalable et que l’on pourra « os » est : écrire des données dedans  Le module comportant les fonctions faisant  s’il existe déjà il sera écrasé appel aux commandes du système  ne doit pas exister au préalable et que l’on d’exploitation () comme pourra uniquement lire des données créer un répertoire et changer de répertoire  doit exister au préalable et que l’on pourra courant uniquement lire des données

 Un module spécifique à python et comportant des commandes comme créer un répertoire Question 7 : Les modes d’ouverture « ‘w’, ‘a’, ‘r’ et et changer de répertoire courant ‘r+’ » permettent d’ouvrir des fichiers:  contenant uniquement du texte Question 2 : La fonction permettant d’ouvrir un fichier  pouvant contenir n’importe quelle données est : (valeurs formaté, images etc…  open()

 ouvrir()  acces() Question 8 : Les modes d’ouverture « ‘wb’, ‘ab’, ‘rb’ et ‘rb+’ » permettent d’ouvrir des fichiers: Question 3 : Deux paramètres peuvent etre donnés à la  contenant uniquement du texte fonction open() :  pouvant contenir n’importe quelle données  le nom d’un fichier physique et un mode (valeurs formaté, images etc… d’ouverture  le nom d’un fichier logique et un mode Question 9 : Après l’exécution des commandes d’adressage suivantes :  le nom d’un fichier logique et un mode d’adressage >>> f = open('etudiants.txt', 'w') >>> f.write('étudiant 1 : Mohand\n') Question 3 : On a plusieurs modes d’ouverture : >>> f.write('étudiant 2 : Amel\n')  ‘a’, ‘r’, ‘w’, ‘r+’ >>>  ‘a’, ‘r’, ‘rw’, ‘r+’

 ‘aw’, ‘r’, ‘w’, ‘r+’  Un fichier physique nommé « etudiants » sera

crée Question 4 : Le mode d’ouverture « ‘a’ » (append) veut  Aucun fichier ne sera crée dire:

 Que le fichier doit exister au préalable et que Question 10 : Après l’exécution des commandes l’on pourra ajouter à sa fin des données suivantes :  Que le fichier ne doit pas exister au préalable et que l’on pourra ajouter à sa fin des >>> f = open('etudiants.txt', 'w') données >>> f.write('étudiant 1 : Mohand\n')  Que le fichier ne doit pas exister au préalable >>> f.write('étudiant 2 : Amel\n') et que l’on pourra uniquement lire des >>> données

Question 5 : Le mode d’ouverture « ‘r’ » (read) veut dire que le fichier :  Le fichier « etudiants » va contenir deux lignes. La première ligne va contenir la chaine  doit exister au préalable et que l’on pourra «étudiant 1 : Mohand » et la seconde va ajouter à sa fin des données contenir la chaine : «étudiant 2 : Amel »  ne doit pas exister au préalable et que l’on  Le fichier « etudiants » va contenir une pourra ajouter à sa fin des données lignequi va contenir la chaine «étudiant 1 :  ne doit pas exister au préalable et que l’on Mohand étudiant 2 : Amel » pourra uniquement lire des données

 doit exister au préalable et que l’on pourra uniquement lire des données

39

Question 11 : Après l’exécution des commandes Question 13 : Après l’exécution des commandes suivantes : suivantes :

>>> f = open('etudiants.txt', 'a') >>> a = {} >>> f.write('étudiant 3 : Saida') >>> f = open("ageEtudiants.txt", "rb")  Le fichier « etudiants » va contenir 3 lignes de >>> a = load(f) texte >>> print(a)  La dernière ligne du fichier « etudiants » sera On affiche «'étudiant 3 : Saida »  Une erreur  Le texte «'étudiant 3 : Saida » sera inséré au  {'Amel': 21, 'Mohand': 22} début du fichier  {21, 22}

 {'Amel', 'Mohand'} Question 12 : Après l’exécution des commandes suivantes :

>>> f = open('etudiants.txt', 'r') >>> l1 = f.readline() >>> l2 = f.readline() >>> l3 = f.readline() >>> f.seek(0) >>> l4 = f.readline() Que vont contenir les variables l1, l2, l3 et l4 :  l1 = 'étudiant 1 : Mohand\n' l2 = 'étudiant 2 : Amel\n' l3 = 'étudiant 3 : Saida’ l4 = 'étudiant 1 : Mohand\n'  l1 = 'étudiant 1 : Mohand\n' l2 = 'étudiant 2 : Amel\n' l3 = 'étudiant 3 : Saida’ l4 = ''  l1 = 'étudiant 1 : Mohand' l2 = 'étudiant 2 : Amel' l3 = 'étudiant 3 : Saida’ l4 = ''  l1 = 'étudiant 1 : Mohand' l2 = 'étudiant 2 : Amel' l3 = 'étudiant 3 : Saida’ l4 = 'étudiant 1 : Mohand\n'

Question 13 : Après l’exécution des commandes suivantes :

>>> from pickle import * >>> ages = {'Mohand' : 22, 'Amel' : 21} >>> f = open("ageEtudiants.txt", "wb") >>> dump(ages, f) >>> f.close()

 On aura crée un fichier binaire comportant les données du dictionnaire « ages »  On aura crée un fichier texte comportant les données du dictionnaire « ages »

40

Chapitre 8 – Fonctions

L’une des puissances les plus 8.2 – Comme utilise-t-on une fonction ? remarquables des langages de programmation évolués est la Il faut savoir que la définition d’une fonction ne signifie possibilité de réutiliser du code à pas qu’elle sera exécutée, même si vous la mettez au volonté. Ceci est rendu possible début de votre programme. La définition de la fonction grâce à la notion de fonction. Nous permet juste de stocker le code de la fonction pour un allons aborder dans ce qui suit : usage ultérieure. Ainsi, c’est lorsque vous faites appelle à cette fonction quelle sera effectivement exécuter. • Comment définit-on une fonction

• Comment utilise-t-on une fonction Exemple : la fonction factorielle définie dans le • C’est quoi la différence entre argument, programme ci-dessous ne sera pas exécutée : paramètre et résultat

• Quelle est la portée d’une variable print ("Ici juste avant la définition de la 8.1 – Comment définit-on une fonction ? fonction") def factorielle(n) : On définit une fonction par deux parties : for i in range(1,n) : • L’entête de la fonction f=f*i • Le corps de la fonction print (f) print ("Ici après la définition de la fonction") L’entête de la fonction est composé du mot clé « def » suivi du nom de la fonction, puis d’une liste de Ce programme va afficher ceci : paramètres séparés par des virgules et encadrées par des parenthèses, le tout terminé par « : ». Ici juste avant la définition de la fonction Exemple : si l’on veut écrire une fonction qui calcul le Ici après la définition de la fonction nombre factorielle d’un nombre n, on écrira son entête comme suit :

def factorielle(n) :

Pour exécuter une fonction, il faut l’appeler à partir de Le corps de la fonction n’est rien d’autre qu’un bloc n’importe endroit de votre programme. Ainsi dans le d’instruction indentée par rapport à l’entête de cette programme suivant, je vais appeler la fonction même fonction. factorielle plusieurs fois :

Exemple : la définition complète de la fonction factorielle est comme suit : print ("Calcul de la factorielle d’un nombre") Nom de la Paramètre Définition de fonction def factorielle(n) : for i in range(1,n) : la fonction Corps de la f=f*i def factorielle(n) : fonction return f

for i in range(1,n) : p = int(input("donnez p ")) Appel de la f=f*i fonction print (f) print(n," !=", factorielle(p))

Indentation

41

liste (l’itirateur for et l’opérateur in démontre ça). Par Dans l’exemple ci-dessus : contre « var » est apparemment un entier.

• factorielle : est le nom de la fonction Remarquez que dans le premier appel à ma fonction • n : est un paramètre (afficher(liste)), j’ai mis un seul argument qui est une • p : est un argument liste et je constate que ma fonction affiche le • return : est un mot clé indiquant ce que va paramètre « var » valant 15 et les éléments de ma liste. retourner la fonction comme résultat. Par contre dans le second appel à ma fonction où j’ai • l’appel à la fonction est fait dans la dernière indiqué un second argument (afficher(liste,’bouzidi’)), ligne ma fonction affiche le paramètre « var » comme valant la chaine « bouzidi ». On dit que ce paramètre est Remarque : optionnel. • il est tout à fait possible de prévoir plusieurs paramètres pour une fonction. Par exemple la 8.3 – Quelle est la différence entre fonction calculant la surface d’un rectangle a argument et paramètre ? besoin de deux paramètres : la longueur et la largeur Les paramètres d’une fonction sont ceux que l’on • on n’a pas besoin d’indiquer le type des définit dans son entête. On les appelle aussi paramètres, Python le reconnait automatiquement paramètres « formels ». Par contre les arguments (on les appelle aussi par paramètres « réels ») sont ceux • vous pouvez indiquer n’importe quel type de que l’on indique lors de l’appel à la fonction. variable dans vos paramètres (des int, float, complexes, listes, tuples, dictionnaires, etc.). • il est possible d’indiquer des paramètres 8.4 – Porté des variables facultatifs, c'est-à-dire que vous ne serez pas La portée d’une variable est l’étendu du code à partir obligé de les indiquer dans l’appel à la fonction. duquel on peu accéder à cette variable. Ainsi, il est très Rappelez-vous la fonction range(), vous pouvez lui important lorsque l’on manipule des fonctions de donner un argument, deux ou trois arguments. connaître la portée des variables. Attention, cependant, les paramètres facultatifs doivent être indiqués après les paramètres • Premièrement, on peut créer des variables au sein obligatoires et doivent être initialisés. d’une fonction qui ne seront pas visibles à l’extérieur de celle-ci ; on les appelle variables Exemple : locales.

Observez le code suivant : >>> def afficher(l, var=15): print("la variable var vaut : ", var) >>> var = 125 for e in l: >>> def fact(n): print(e) f = 1 for i in range(1,n): >>> liste = ['alpha','béta','gama'] f=f*i return f >>> afficher(liste) Appel 1 la variable var vaut : 15 >>> print(i) alpha Traceback (most recent call last): béta Appel 2 File "", line 1, in print(i) gama NameError: name 'i' is not defined >>> afficher(liste, 'bouzidi') >>> print(f) la variable var vaut : bouzidi Traceback (most recent call last): alpha File "", line 1, in print(f) béta NameError: name 'f' is not defined gama >>> print(n) Traceback (most recent call last): File "", line 1, in print(n) Dans l’exemple ci-dessus, la fonction affiché a deux NameError: name 'n' is not defined paramètres : « l » et « var ». Dans le corps de cette >>> print (var) fonction, on comprend que le paramètre « l » est une 125

42

Q3 – Dans le code suivant indiquez l’argument de la Les variables « f », « i » et « n » sont locales à la fonction : fonction « fact ». Par contre, la variable « var » est x = 'pomme' globale, donc accessible depuis l’intérieur et l’extérieur y = min(x) de la fonction. print y print x Si on veut vraiment modifier une variable globale dans  x une fonction, il faut utiliser le mot-clé global :  y  ‘pomme’ >>> def fact(n):  Min globale f f = 1 Q3 – Dans le code suivant indiquez l’instruction qui ne sera for i in range(n): jamais exécutée : f=f*i def stuff(): print 'Hello' >>> fact(5) return >>> print(f) print 'World' 120 stuff() Dans l’exemple ci-dessus, on voit bien que la variable ...... « f », bien qu’elle soit définie à l’origine dans la fonction « fact », elle est accessible depuis l’extérieur du fait Q4 – Que va afficher le code suivant : qu’elle a été déclarée comme globale. def salutation(lang): Par ailleurs, il est tout à fait possible d’utiliser le même if lang == 'es': nom de variable à l’intérieur et à l’extérieur d’une return 'Hola' fonction. Dans ce cas, il faut être vigilant, car, vous avez elif lang == 'fr': en réalité deux variables différentes, l’une est locale à return 'Bonjour' la fonction, l’autre est globale. else: return 'Hello'

print salutation('fr'),'Mohand' Quiz 7 – Fonctions ......

Q5 – Que va afficher le code suivant : Q1 – Quel est le mot clé permettant de déclarer une fonction : def additionner(a, b): added = a + b  break return a  def  return x = additionner(2, 7)  declare print x  function ......

Q6 – Que va afficher le code suivant : Q2 – Qu’affiche le code suivant :

def thing(): print ("Calcul de la factorielle d’un nombre") print 'Bonjour' def factorielle(n) : Définition de print 'les matheux' for i in range(1,n) : la fonction  bonjour les matheux f=f*i  bonjour return f

 les matheux p = int(input("donnez p "))

Appel de la print(n," !=", factorielle(p)) fonction

43

Chapitre 9 – Modules et packages

…….. test test test test test test test test test test test test test test test test test test

44

Chapitre 10 – Interfaces graphiques

……..

45

Chapitre 11 – Python et les mathématiques

……..

46

5.3 – Séquences de séquences ...... 26 Table des matières 5.4 – Tuples ...... 26 5.5 – Opérations communes ...... 26 Chapitre 1 – Concepts de base ...... 3 5.6 – Références ...... 26 I.1 – Programmation ...... 4 Chapitre 6 – Dictionnaires ...... 31 I.2 – Processus de programmation ...... 4 6.1 – Créer un dictionnaire ...... 31 I.3 – Langages de programmation...... 5 6.2 – Comment ajouter une clé ...... 31 I.4 – Choisir un langage de programmation pour 6.3 – Modifier les valeurs d’un dictionnaire ...... 31 débuter ...... 5 6.4 – Quelques méthodes des dictionnaires ...... 32 Chapitre 2 – Environnement de programmation ...... 8 6.5 – Parcourir un dictionnaire ...... 32 2.1 – Environnement de développement intégré ..... 8 Chapitre 7 – Fichiers ...... 35 2.2 – Exemples d’IDE ...... 8 7.1 – C’est quoi un fichier ? ...... 35 2.3 – IDE prenant en charge Python ...... 9 7.2 – Localiser un fichier ...... 35 2.4 – Installer Python ...... 9 7.3 – Ecrire séquentiellement dans un fichier ...... 35 2.5 – Utiliser Python ...... 9 7.4 – Lire depuis un fichier ...... 36 Chapitre 3 - Variables, expressions et opérateurs ...... 12 7.5 – Contrôler la lecture d’un fichier avec une 3.1 – Calculer avec python ...... 12 boucle ? ...... 37 3.2 – Données et variables ...... 12 7.6 – Ecrire et lire sur un fichier des données de divers formats ...... 37 3.3 – Nommer les variables ...... 12 Chapitre 8 – Fonctions...... 41 3.4 – Affectation ...... 13 8.1 – Comment définit-on une fonction ? ...... 41 3.5 – Afficher les valeurs des variables ...... 13 8.2 – Comme utilise-t-on une fonction ? ...... 41 3.6 – Typage des variables ...... 13 8.3 – Quelle est la différence entre argument et 3.7 – Affectation multiple ...... 13 paramètre ? ...... 42 3.8 – Opérateurs et expressions ...... 14 8.4 – Porté des variables ...... 42 3.9 – Composition ...... 14 Chapitre 9 – Modules et packages ...... 44 3.10 – Introduire des données à partir du clavier ... 14 Chapitre 10 – Interfaces graphiques ...... 45 Variable et types ...... 16 Chapitre 11 – Python et les mathématiques ...... 46 Chapitre 4 – Structures de contrôle ...... 17 4.1 – Quelques règles de syntaxe Python ...... 17 4.2 – Séquence d’instructions ...... 17 4.3 – Sélection : exécution conditionnelle ...... 17 4.4 – Imbrication ...... 18 4.5 – Conditions ...... 18 4.6 – La répétition ...... 19 Chapitre 5 – Séquences ...... 21 5.1 – Chaines de caractères ...... 21 5.2 – Listes ...... 24