Python (langage de programmation)

Python (prononcé /pi.tɔ̃/) est un langage de programmation interprété, multi-paradigme et multiplateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il est doté d’un typage dynamique fort, d’une gestion automatique de la mémoire par ramasse-miettes et d’un système de gestion d’exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl.

Le langage Python est placé sous une licence libre proche de la licence BSD et fonctionne sur la plupart des plates-formes informatiques, des smartphones aux ordinateurs centraux, de Windows à Unix avec notamment GNU/Linux en passant par macOS, ou encore Android, iOS, et peut aussi être traduit en Java ou .NET. Il est conçu pour optimiser la productivité des programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser.

Il est également apprécié par certains pédagogues qui y trouvent un langage où la syntaxe, clairement séparée des mécanismes de bas niveau, permet une initiation aisée aux concepts de base de la programmation.

Utilisation

Python est un langage de programmation qui peut s’utiliser dans de nombreux contextes et s’adapter à tout type d’utilisation grâce à des bibliothèques spécialisées. Il est cependant particulièrement utilisé comme langage de script pour automatiser des tâches simples mais fastidieuses, comme un script qui récupérerait la météo sur Internet ou qui s’intégrerait dans un logiciel de conception assistée par ordinateur afin d’automatiser certains enchaînements d’actions répétitives. On l’utilise également comme langage de développement de prototype lorsqu’on a besoin d’une application fonctionnelle avant de l’optimiser avec un langage de plus bas niveau. Il est particulièrement répandu dans le monde scientifique, et possède de nombreuses bibliothèques optimisées destinées au calcul numérique.

Historique

Au CWI
À la fin des années 1980, le programmeur Guido van Rossum participe au développement du langage de programmation ABC au Centrum voor Wiskunde en Informatica (CWI) d’Amsterdam, aux Pays-Bas. Il travaille alors dans l’équipe du système d’exploitation Amoeba dont les appels systèmes sont difficilement interfaçables avec le Bourne shell utilisé comme interface utilisateur. Il estime alors qu’un langage de script inspiré d’ABC pourrait être intéressant comme interpréteur de commandes pour Amoeba.

En 1989, profitant d’une semaine de vacances durant les fêtes de Noël, il utilise son ordinateur personnel8 pour écrire la première version du langage. Fan de la série télévisée Monty Python’s Flying Circus, il décide de baptiser ce projet Python. Il s’est principalement inspiré d’ABC, par exemple pour l’indentation comme syntaxe ou les types de haut niveau mais aussi de Modula-3 pour la gestion des exceptions, du langage C et des outils UNIX.

Durant l’année suivante, le langage commence à être adopté par l’équipe du projet Amoeba, Guido poursuivant son développement principalement pendant son temps libre. En février 1991, la première version publique, numérotée 0.9.0, est postée sur le forum Usenet alt.sources. La dernière version sortie au CWI est Python 1.2.

Au CNRI

En 1995, Van Rossum continue son travail sur Python au CNRI (en) à Reston, aux États-Unis, où il sort plusieurs versions du logiciel.

À partir d’août 1995, l’équipe Python travaille au CNRI sur Grail un navigateur web utilisant Tk. Il est l’équivalent pour Python du navigateur HotJava, permettant d’exécuter des applets dans un environnement sécurisé. La première version publique, disponible en novembre, est la 0.2. Il entraîne le développement de modules pour la bibliothèque standard comme rexec, htmllib ou urllib. La version 0.6 sera la dernière de Grail ; elle est publiée en avril 1999.

En 1999, le projet Computer Programming for Everybody (CP4E) est lancé conjointement entre le CNRI et la DARPA. Il s’agit d’utiliser Python comme un langage d’enseignement de la programmation. Cette initiative conduira à la création de l’environnement de développement IDLE. Cependant, du fait du manque de financement du projet par la DARPA, et du départ de nombreux développeurs Python du CNRI (dont Guido van Rossum), le projet s’éteint en 2000. Python 1.6 est la dernière version sortie au CNRI.

À BeOpen

En 2000, l’équipe principale de développement de Python déménage à BeOpen.com pour former l’équipe PythonLabs de BeOpen. Python 2.0 est la seule version sortie à BeOpen.com. Après cette version, Guido Van Rossum et les autres développeurs de PythonLabs rejoignent Digital Creations (à présent connue sous le nom de Zope Corporation).

Andrew M. Kuchling publie en décembre 1999 un texte nommé Python Warts, qui synthétise les griefs les plus fréquents exprimés à l’encontre du langage. Ce document aura une influence certaine sur les développements futurs du langage.

La Python Software Foundation

Python 2.1 est une version dérivée de Python 1.6.1 et de Python 2.0. Sa licence est renommée Python Software Foundation License. Tout code, documentation et spécification ajouté, depuis la sortie de Python 2.1 alpha, est détenu par la Python Software Foundation (PSF), une association sans but lucratif fondée en 2001, modelée d’après l’Apache Software Foundation.

Afin de réparer certains défauts du langage (par exemple l’orienté objet avec deux types de classes), et pour nettoyer la bibliothèque standard de ses éléments obsolètes et redondants, Python a choisi de casser la compatibilité ascendante dans la nouvelle version majeure, Python 3.0, publié en décembre 2008. Cette version est rapidement suivie par une version 3.1 qui corrige les erreurs de jeunesse de la version 3.0.

Structure de formation pour débutant

Vous avez beaucoup de tâches fastidieuses et répétitives au travail ? Vous voulez être capable de faire des choses plus efficacement ? Python peut vous aider !

Python est l’un des langages de programmation les plus utilisés. Apprendre à coder avec Python est une compétence très recherchée dans beaucoup de métiers. Et pas uniquement pour les développeurs logiciels à temps plein. Tout le monde peut apprendre !

Python vous permet d’automatiser des tâches comme envoyer des emails ou écrire dans des fichiers… Tout ça pour vous aider à terminer des tâches plus efficacement.

Nous allons avancer ensemble pas à pas de façon amusante et facile à comprendre. On sait ce que ça fait d’être intimidé par le code ou de n’y rien comprendre. On veut donc s’assurer que personne ne ressente la même chose. 

Dans ce cours, vous allez enregistrer des informations en tant que données en Python. Vous allez contrôler la logique dans votre code avec des conditions, des boucles et des fonctions. Vous allez aussi automatiser la récupération de données à partir du web avec les packages Requests, Beautiful Soup et CSV dans le processus appelé extraction de données web. Apprendre à coder avec Python c’est instructif et passionnant.

Qu’est-ce qu’on va apprendre ?

La structure, généralement, repose sur deux parties :

  • Partie 1 : créez des données avec Python, où nous travaillerons avec des blocs de code fondamentaux. 
  • Partie 2 : gérez la logique du programme dans Python, où nous exploiterons ces blocs de code pour en faire quelque chose avec de la logique.

Ces deux parties établissent une base à tous vos futurs projets Python.

Une partie supplémentaire est proposée ici  :

  • Partie 3 : extraire des données à partir du web avec les packages Python. Cette partie est facultative mais très recommandée. Dans cette partie, nous allons vous guider dans ce nouveau défi : appliquer vos nouvelles compétences basiques de Python dans une activité pratique du monde réel appelée l’extraction de données web. Nous utiliserons les packages Requests, Beautiful Soup et les CSV pour automatiser la tâche de collecte de données utiles à partir d’internet.

Si c’est facultatif, pourquoi faire une troisième partie ?

Automatiser une tâche et exploiter les packages Python tierces sont des compétences très pratiques à rajouter à votre bagage Python, quelle que soit la direction que prendront vos projets à l’avenir, que vous soyez développeur logiciel, analyste de données, expert en marketing ou autre. De plus, l’extraction de données web, ou plus généralement le processus ETL (de l’anglais extract, transform, load, ou extraction, transformation et chargement en français) est une activité qui peut s’appliquer à n’importe laquelle de ces carrières. Ne ratons pas cette partie !

Conseils pour toute formation

Voici deux astuces pour tirer un maximum de cet apprentissage :

  1. On apprend en faisant. Profitez des exercices. Et allez au-delà de vos capacités. Soyez curieux ! Une fois que vous avez terminé une activité, retournez dans le sandbox et expérimentez ! Utilisez votre imagination et voyez ce que vous pouvez ajouter ou modifier dans le code. Plus vous appliquez les concepts que vous apprenez, plus ils deviendront naturels.
  2. On apprend en se dépassant. Les choses se passent parfaitement uniquement avec de la chance ! Les échecs et les erreurs nous aident à comprendre en détail de nouveaux principes. Ils nous forcent aussi à aborder les défis sous un nouvel angle. On connaît tous la satisfaction qu’on ressent après avoir résolu un problème, donc profitons de cette méthode ! 

Pourquoi utiliser Python ?

Python est un langage de programmation très répandu et facile à apprendre. Il est adapté aussi bien aux débutants qu’aux experts pour sa simplicité, sa syntaxe lisible et sa variété d’usage. Si vous voulez devenir un développeur web, un analyste, un data scientist ou un expert marketing, Python peut vous aider à réaliser vos tâches.

La première fois que vous vous lancez dans le codage, ça peut être intimidant. Il y a beaucoup de choses qui nous paraissent étrangères à assimiler. Mais n’oubliez pas qu’à un moment, tous les experts en Python, même les meilleurs, se sont retrouvés dans votre position.

Le codage sous Python peut paraître étrange, mais c’est une compétence comme une autre. Il faut y consacrer du temps et des efforts, tout comme Excel, une nouvelle langue ou du jardinage. Je dis toujours aux gens que la partie la plus difficile à propos du codage n’est pas la syntaxe ou la logique. C’est l’effort à fournir pour apprendre et pour surpasser la voix dans votre tête qui vous dit que vous n’êtes pas assez bons. Donc n’oubliez pas : si ça devient trop compliqué ou confus, ce n’est PAS grave. Continuez. Vous y arriverez !

Installez Python sur votre ordinateur

L’installation de Python est très simple ! Rendez-vous sur python.org, choisissez votre système d’exploitation (Mac/Windows/etc.) et cliquez sur le bouton de téléchargement pour installer Python sur votre ordinateur.  

Exécutez votre premier programme Python

Maintenant que vous avez installé Python, préparez-vous à exécuter votre premier code Python !

  1. Ouvrez Terminal si vous êtes sur macOS ou sur l’invite de commandes si vous êtes sous Windows. (Si vous n’utilisez pas un terminal souvent, n’hésitez pas à consulter ce chapitre dans notre cours Apprenez à utiliser la ligne de commande dans un terminal pour vous rafraîchir la mémoire ou savoir comment ouvrir un programme.)
  2. Écrivez  python  et vous devriez voir des informations à propos de Python apparaître avec  >>>indiquant où écrire le code. 
  3. Ensuite, écrivez  print("hello, world!") .
  4. Appuyez sur Entrée pour voir le résultat.

Ça y est ! Vous avez exécuté votre premier code Python ! Nous avons ouvert un terminal, démarré une console Python (ou Shell) et écrit « hello, world » sur la console.  

Comme vous l’avez vu, vous pouvez exécuter chaque ligne de code Python directement dans le terminal. Vous pouvez aussi écrire du code dans un éditeur de texte séparé puis l’exécuter en utilisant les commandes du terminal. Vous pouvez utiliser de nombreux éditeurs de texte, mais vous pouvez commencer avec Sublime Text (ressource en anglais). 

Voici comment écrire du code dans un éditeur puis l’exécuter :

Sur la ligne 1 dans l'éditeur, on a écrit print
Écrivez dans l’éditeur.
  1. Dans l’éditeur, écrivez  print("Hello, world")  .
  2. Sauvegardez le fichier (par exemple, sous le nom helloworld.py).
  3. Ouvrez Terminal si vous êtes sur macOS ou sur l’invite de commandes si vous êtes sous Windows. 
  4. Dans le dossier Documents, écrivez « python3 » et le nom du fichier que vous avez créé : python3 helloworld.py  . 
  5. Appuyez sur Entrée pour voir le résultat:  Hello, world  .

Et voilà : code exécuté !

Qu’est-ce qu’une variable ?

Imaginons qu’on s’apprête à déménager et qu’il faut ranger nos affaires dans des cartons. Il nous faut un carton pour la vaisselle, un pour les vêtements et un autre pour la télévision. Quand vous faites les cartons, la bonne chose à faire est de leur donner un nom. Ainsi vous saurez ce qui se trouve à l’intérieur.  

Une variable, c’est comme un carton. C’est un moyen d’enregistrer vos données. En tant que développeur, il vous faudra enregistrer certaines informations et leur donner un nom afin de pouvoir les récupérer plus tard. Un nom d’utilisateur, des tickets d’avion encore disponibles, le jour de la semaine, un inventaire… Toutes ces données sont enregistrées dans les variables.  

Les variables enregistrent les données comme les cartons permettent de ranger les objets.
Les variables enregistrent les données comme les cartons permettent de ranger les objets.

Il est très facile de déclarer une variable dans Python. Le code ci-dessous permet de déclarer une variable.

livre="Gatsby le Magnifique"

Quand on dit déclarer (ou initialiser) une variable, c’est juste une autre façon de dire « créer une variable ».

Une variable dans Python est constituée de trois éléments : son nom, son type et sa valeur. Dans ce chapitre nous allons voir le nom et la valeur, puis nous verrons le type dans le chapitre suivant.

Ici,  livre  est le nom de la variable (donc le nom du carton) et   "Gatsby le Magnifique"  est la valeur de la variable (ce qui se trouve dans le carton). Puis, si vous souhaitez retrouver le titre du livre avec Python, vous pouvez écrire  livre  et vous obtiendrez  "Gatsby le Magnifique"  en retour.

Modifiez une variable

Il est très simple de modifier la valeur d’une variable. Il suffit simplement d’assigner une nouvelle valeur à la variable. Voici l’extrait de code qui déclare  livre  avec la valeur  "Gatsby le Magnifique"  puis qui la modifie avec  "Beloved"  .

Maintenant, essayez cet exercice rapide pour vous assurer que vous suivez bien :

Quel va être le résultat de ce programme ? Prenez une minute pour y réfléchir avant de regarder plus bas !

Si vous aviez deviné  "Pâtes", bravo ! L’extrait de code déclare deux variables,  nourriture_preferee  et  nouvelle_nourriture_preferee. Il définit ensuite  nourriture_preferee  comme étant  "Pâtes", donc ce qui avait été déclaré avant pour  nourriture_preferee  n’est plus pris en compte. En réalité, une variable est simplement un raccourci pour aller chercher ou modifier une valeur dans la mémoire vive de l’ordinateur ! Incroyable, non ? 

Nommez une variable

Un nom de variable doit refléter son contenu comme le nom sur un carton. Voici quelques recommandations générales pour choisir un nom :

  • Utilisez des noms descriptifs dans votre code.
    Vous avez déjà retrouvé un vieux classeur dans un carton avec le nom « Trucs importants » sur la couverture ? C’était frustrant n’est-ce pas ? Les noms de variables descriptifs et spécifiques simplifient la vie et facilitent la lecture et la modification de votre code. Au lieu de  quantite  (ou pire,qte), ajoutez des détails :quantite_en_stock,solde_actuel, etc.
  • Utilisez des mots complets.
    Évitez d’abréger ou de raccourcir les mots autant que possible, même si une alternative plus courte paraît évidente. Par exemple,revenu_annuelest plus clair querev_annuel.
  • Suivez une convention d’appellation commune.
    L’une des conventions d’appellation populaires pour Python est le snake case : des noms composés de plusieurs mots séparés par des tirets bas(_)commenombre_de_chats,  reponse_finale  ,  le_meilleur_developpeur_python_du_monde, etc.
  • Commencez avec une lettre ou le tiret bas.
    Un nom de variable ne peut pas commencer par un nombre.
  • Utilisez uniquement des caractères alphanumériques et des tirets bas… et donc pas d’accents !
    Par exemple, écrivezbonjour_1  mais pasbonjour_#1  .
  • N’oubliez pas que les noms de variables sont sensibles à la casse.
    age,  Age  et  AGE  sont trois variables différentes. 

Qu’est-ce qu’un type de données ?

Un type de données est simplement une façon de classer différents types de variables. Quand vous avez un fruit, vous pouvez le classer dans un type spécifique comme pomme ou orange par exemple. Quand vous avez une variable, l’ordinateur doit la classer dans un type spécifique aussi : un type de données. C’est comme les types de données que vous pouvez utiliser dans un tableur Excel : les nombres, les mots, etc.  

Les types de données les plus simples, ou primitifs, utilisés dans Python sont :

  • Les entiers (Integers en anglais)
  • Les virgules flottantes (Float en anglais)
  • Les chaînes de caractères (Strings en anglais)
  • Les booléens

Commençons par les deux premiers, ce sont tous les deux des valeurs numériques.

Découvrez les types de données numériques : entiers et virgules flottantes

Les types numériques se divisent en deux catégories dans Python : les entiers (Integers en anglais) et les virgules flottantes (Float en anglais).

Un entier est un nombre entier :

  • 1
  • 4
  • 3 934

Une virgule flottante est un nombre décimal :

  • 3,14
  • 563,2
  • 99,9

Les nombres 100 et 100,0 ont l’air de se ressembler, mais dans Python, le premier est un entier et l’autre est une virgule flottante.

Voici des exemples de variables avec des données numériques. Quelles sont les virgules flottantes et quels sont les entiers ?

  • taux_de_conversion = 3.2 
  • nombre_dabonnes = 1304
  • nombre_de_likes = 234 
  • duree_de_lepisode = 29.1

Si vous avez deviné que  taux_de_conversion  et duree_de_lepisode  sont des virgules flottantes et que les deux autres sont des entiers, c’est correct ! Aussi, n’oubliez pas qu’en anglais, les virgules deviennent des points ! Par exemple, si l’on écrit 12,4, dans Python on écrit 12.4.

Tout comme les nombres dans Excel ou avec une calculatrice, vous pouvez réaliser toutes sortes d’opérations arithmétiques avec des entiers et des virgules flottantes dans Python. Voici quelques exemples d’opérateurs arithmétiques que vous pouvez utiliser dans votre code :

  • x + y  : la somme de x et y (x plus y).
  • x - y  : la différence entre x et y (x moins y).
  • x * y  : le produit de x et y (x fois y).
  • x / y  : le quotient de x et y (x divisé par y).
  • x % y  : le reste de x divisé par y.

Expérimenter avec l’arithmétique est un excellent moyen de s’essayer à un peu de programmation basique. Vous pourrez pratiquer avec un exercice à la fin de ce chapitre.

Définissez les chaînes de caractères

Une chaîne de caractères, c’est juste un mot sophistiqué pour ne pas dire … et bien, mots. Une chaîne c’est une information (généralement du texte) entourée de guillemets (soit simples soit doubles). Donc   'bonjour'  avec des guillemets simples et  "bonjour"  avec des guillemets doubles sont tous les deux des chaînes. Et"au revoir"  et  "quoi de neuf"aussi. 

Quand on utilise des nombres dans une variable, il faut juste se rappeler que  '912'  et  "912"  sont des chaînes simplement parce qu’ils sont entourés par des guillemets, alors que  912  est un nombre entier. Concrètement, comme ce sont des informations dans votre code,  '912'  et  "912"  fonctionnent en tant que texte, alors que  912  fonctionne en tant que valeur numérique.

Voici quelques autres exemples de variables de type string (chaîne de caractères) :

  • salutations = "bonjour !"
  • le_professeur = "Paul-Emile"
  • prenom = "Sam"
  • citation_inspirante = "vous ratez 100 % des opportunités que vous ne saisissez pas"

Les booléens : vrai ou faux ?

Ne soyez pas intimidé par ce nom étrange ! Un booléen c’est assez simple. Il n’y a que deux options de valeur :  True  (vrai) ou  False  (faux).   

Les booléens peuvent être très utiles pour déterminer si une action est réussie ou pas.

Par exemple, si vous voulez avoir une variable qui enregistre le fait qu’il y a du soleil dehors ou pas, vous pouvez dire  climat_ensoleille = True. S’il n’y a pas de soleil, alors  climat_ensoleille = False.

Les booléens sont particulièrement importants quand on commence à former le déroulement logique du code dans la partie 2 !

Qu’est-ce qu’une liste et pourquoi l’utiliser ?

Les pommes, les oranges, les poires. Les chiens, les chats, les lapins. Vous utilisez les listes tout le temps dans votre vie quotidienne et c’est pareil dans Python. Vous devez avoir une liste pour y enregistrer une collection d’objets auxquels vous voulez accéder plus tard.

Dans Python, on utilise des crochets   [ ]  pour indiquer une liste. Le code suivant crée une liste de différentes plateformes de réseaux sociaux et la sauvegarde dans une variable appelée  plateformes_sociales.

Savez-vous quel type de données est utilisé dans cette liste ? Si vous avez vu les guillemets, vous avez peut-être immédiatement identifié ces valeurs comme des chaînes de caractères. Les listes acceptent n’importe quel type de données aussi, et même des combinaisons de types de données.

Maintenant que la liste est sauvegardée, il faut que vous puissiez accéder aux éléments à l’intérieur.

Accédez aux éléments d’une liste

Pour accéder aux éléments d’une liste, on utilise un indice. Chaque élément a un indice qui lui correspond, selon sa position dans la liste. Vous obtenez la valeur de cet indice avec la syntaxe suivante :  liste[indice]. Elle vous renverra la valeur de la liste qui est à la position de l’indice.

L’important est de noter que dans la plupart des langages de programmation, y compris Python, l’indice commence à 0, pas 1. Donc si vous voulez accéder au premier élément dans la liste ci-dessus, vous devez taper :

Pour accéder au deuxième élément, tapez :

… et ainsi de suite.

En particulier dans Python, vous pouvez aussi accéder aux éléments en sens inverse, en utilisant des nombres négatifs. Pour accéder au dernier élément de la liste, utilisez l’indice -1.

Accédez aux caractères d’une chaîne comme un élément d’une liste

Les indices fonctionnent aussi avec les chaînes de caractères ! En fait, les chaînes de caractères sont juste des listes de caractères. Chaque caractère correspond à un indice qui va de zéro à la longueur de la chaîne.

Par exemple, dans la chaîne  langage  = "PYTHON"  ,  langage[2]  vous renverra  "T" . Tout simplement parce que l’indice 2 dans le mot « PYTHON » est le « T ». Ou bien, avec l’indice de la position inverse, vous devez utiliser  langage[-4]  pour accéder à  "T"  .

Le mot
Pour la chaîne « Python », vous devez utiliser l’indice « 2 » ou l’indice inversé « -4 » pour accéder au troisième caractère qui est la lettre « T ».

Modifiez, retirez et triez les listes

Dans Python, c’est très simple de réaliser toutes sortes d’opérations avec les listes. À la place de créer une toute nouvelle liste à chaque fois que vous voulez ajouter, retirer ou trier des éléments, vous pouvez faire appel à une méthode de liste. Nous allons voir les méthodes plus tard, mais pour l’instant, vous devez juste savoir qu’une méthode est une façon de réaliser une opération spécifique sur un élément.  

Par exemple, pour ajouter une plateforme de réseau social à la fin de la liste existante, vous pouvez utiliser la méthode append()  :

Pour retirer un élément spécifique d’une liste, vous pouvez utiliser la méthoderemove().

remove() retire uniquement la première instance du terme que vous saisissez.

Pour connaître la longueur de la liste, utilisez la méthode len().

La dernière méthode que nous allons voir estsort(). Elle trie les éléments de la liste. Le tri se fait alphabétiquement pour les listes de chaînes et numériquement pour les listes de nombres.

Il y a beaucoup d’autres méthodes que vous pouvez utiliser avec les listes. Vous les trouverez dans la documentation Python.

Découvrez les tuples

Les tuples sont une autre structure de Python qui sert à enregistrer des données. Au lieu des crochets [ ], ils se caractérisent par les parenthèses  ().

Beaucoup des propriétés des tuples sont similaires à celles des listes normales. Par exemple, les listes et tuples utilisent tous deux les indices. La principale différence est que les tuples sont immuables (ne peuvent pas être modifiés), alors que les listes sont modifiables

Qu’est-ce qu’un dictionnaire ?

Parfois vous avez besoin de représenter des données plus complexes que des nombres, des chaînes ou des listes.

Un dictionnaire est une structure de données qui enregistre des données dans des paires clés-valeurs.  Voici un exemple d’une clé et d’une valeur :  responsable_de_campagne: "Jeanne d'Arc"  . La clé est  "responsable_de_campagne"  et la valeur est  "Jeanne d'Arc"  .

Les dictionnaires sont indiqués par des accolades{}au début et à la fin. Chaque paire clé-valeur comprend un deux-points:placé entre la clé et la valeur et une virgule  ,à la fin. Chaque dictionnaire doit être composé de clés uniques.

Dans le diagramme ci-dessous, le dictionnaire défini a trois éléments et chaque élément est une paire clé-valeur.

Chaque élément dans le dictionnaire est une paire clé-valeur.
Chaque élément dans le dictionnaire est une paire clé-valeur.

Créez un dictionnaire

Imaginons que vous voulez enregistrer des informations à propos d’une nouvelle campagne pour une entreprise de nourriture pour chien. Vous allez probablement devoir sauvegarder un nom de campagne, des dates de début et de fin, le nom d’un responsable de campagne et des influenceurs importants. Vous pouvez sauvegarder toutes ces informations dans une variable avec un dictionnaire.

Pour enregistrer tout cela, vous pouvez sauvegarder un dictionnaire comme ça :

Vous pouvez aussi créer un nouveau dictionnaire avec des accolades vides  {}  ou la fonction  dict()  et avec des paires clés-valeurs comme indiqué ci-dessous :

Accédez à une valeur dans un dictionnaire

Pour accéder aux différentes valeurs, vous pouvez utiliser la clé pour chacune des paires clés-valeurs.

Essayez dans l’activité ci-dessous ! 😁

Réalisez des opérations courantes avec les dictionnaires

Comme pour les listes, plusieurs méthodes (ou opérations) intégrées à Python vous permettent de manipuler les données dans les dictionnaires.

Ajoutez une paire clé-valeur

Pour ajouter une paire clé-valeur à un dictionnaire, ajoutez juste une nouvelle clé dans le dictionnaire existant. Si la clé existe déjà, vous l’écraserez en définissant une valeur. Le code suivant crée un dictionnaire appelé   infos_labradoodle  et enregistre des informations à propos du poids et de l’origine des labradoodles, un croisement de chiens.

Pour ajouter une nouvelle clé-valeur comme le nom scientifique du labradoodle, ajoutez simplement :

 Maintenant,  infos_labradoodle  renvoie :

Si vous écrivez  infos_labradoodle["poids"] = "45 kg"  , la valeur existante sera écrasée et le résultat sera donc :

Supprimez une paire clé-valeur

Pour supprimer une paire clé-valeur, vous pouvez utiliser le mot-clédelet la clé que vous voulez supprimer ou encore la méthode  pop. Pour supprimer la paire clé-valeur"origine"de la paire clé-valeur, écrivez :

Qu’est-ce qu’un mot-clé ? 

Certains mots font partie du langage Python et ne peuvent pas être utilisés comme noms de variables. Par exemple, del, ifet else. Ces mots sont connus comme étant des mots réservés ou des mots-clés.

Vérifiez l’existence d’une clé spécifique

Vous pouvez utiliser le mot-cléinpour vérifier si une clé spécifique existe dans un dictionnaire. Pour faire cela, spécifiez la clé que vous voulez rechercher, écrivez le mot-cléinet le nom de la variable du dictionnaire que vous examinez. Le résultat renvoie un booléen qui indique si la clé est dans ce dictionnaire. Par exemple, si vous voulez voir si la clé « poids » existe dans votre dictionnaire  infos_labradoodle  , écrivez le code qui suit : 

Qu’est-ce que le déroulement du programme ?

Le déroulement du programme est l’ordre dans lequel les lignes de code sont exécutées. Certaines lignes seront lues une fois seulement, d’autres plusieurs fois. D’autres encore pourraient être complètement ignorées, tout dépend de la façon dont vous les avez codées.

Dans ce premier chapitre sur le déroulement du programme, nous allons regarder comment programmer votre code avec des instructions conditionnelles.

Les instructions conditionnelles sont un moyen de contrôler la logique et le déroulement de votre code avec des conditions. Vous prenez tout le temps des décisions d’après des conditions dans votre vie quotidienne.

Par exemple : S’il fait beau dehors, je vais à la plage. Dans ce scénario, votre décision d’aller à la plage dépend du climat. Le climat est donc la condition. 

Voyons comment ce type de logique fonctionne dans le code.

Définissez des conditions avec les instructions if/else

L’un des blocs essentiels à la structure d’un déroulement conditionnel est l’instruction if.

Avec une instruction if, vous pouvez exécuter certaines lignes de code uniquement si une certaine condition est vraie (True). Si cette condition est fausse (False), le code ne s’exécutera pas. 

Voici un exemple sur le climat :

La ligne 2 s’exécute uniquement si la condition ensoleille  est True.

 Nous avons vu les instructions vrai et faux dans la Partie 1 quand nous avons vu les booléens.

Ça a l’air assez simple, alors quand est-ce que « else » entre en jeu ?

Gardons l’exemple du climat et allons plus loin pour y ajouter une instruction « else » :

S’il fait beau dehors, je vais à la plage.

Sinon (par exemple s’il pleut), je reste à la maison !

Avec les instructions if/else dans Python, la syntaxe ressemble à ça :

Donc pour afficher une instruction sous une certaine condition, vous pouvez suivre les étapes suivantes :

Dans cet extrait de code, puisque ensoleille est vrai, vous verrez  on va à la plage !  s’afficher dans votre terminal. Si sa valeur était fausse, le code afficherait  on reste à la maison !

Définissez des conditions alternatives en ajoutant une clause elif

Les instructions if/elif/else vous permettent de définir des conditions multiples. Le mot-clé elif vous permet d’ajouter autant de conditions que vous voulez. Vous devez ensuite terminer avec une instruction else.

Disons que vous voulez aller à la plage s’il fait chaud dehors, et que vous voulez faire un bonhomme de neige s’il neige. Et sinon, vous restez à la maison. Vous pouvez coder tout ça avec la syntaxe ci-dessous :

Ce code va vérifier si ensoleille est vrai, et parce que c’est faux, il va vérifier si  neige est vrai. Comme neige est vrai, le code va afficher faire un bonhomme de neige. Mais si neige était aussi faux, le programme aurait exécuté l’instruction finale else et affiché on reste à la maison !  .

Définissez des conditions multiples avec des opérateurs logiques

Si vous voulez vérifier plusieurs conditions pour un seul résultat dans la même instruction if, vous pouvez utiliser les opérateurs logiques :

  • and : vérifie si deux conditions sont toutes les deux vraies.
  • or : vérifie si au moins une condition est vraie.
  • not : vérifie si une condition n’est pas vraie (c’est-à-dire fausse). 

Ces opérateurs peuvent être combinés et mélangés selon vos besoins.

Admettons que vous voulez aller à la plage seulement s’il y a du soleil et que c’est le weekend. Mais s’il y a du soleil et que nous sommes au milieu de la semaine, vous devez être au travail.

Définissez des conditions complexes avec des expressions comparatives

Les expressions comparatives vous permettent de comparer différentes expressions entre elles et d’évaluer si une expression est vraie ou fausse.

Si vous avez deux valeurs, a et b, vous pouvez utiliser les opérateurs de comparaison suivants dans Python : 

  • Égal à : a  ==  b
  • Non égal à : a !=  b
  • Moins que : a  <  b
  • Moins que ou égal à : a  <=  b
  • Plus que : a  >  b
  • Plus que ou égal à : a  >=  b 

Par exemple :

Attention à ne pas vous tromper avec le comparateur « égal à »  ==. Quand vous testez si une variable est égale à une autre, vous devez utiliser==au lieu de  =. Quand vous voulez assigner une valeur à une variable, vous devez utiliser un « égal à »  =

Assigner à une variable :

Tester si  nombre_de_sieges  est égal à 30 :

Vous pouvez mélanger et combiner autant de ces outils que vous voulez pour avoir du code et des fonctionnalités plus complexes.

Remarque rapide sur les indentations :

Vous avez vu un format spécifique d’indentation dans les exemples de code précédents. Après une instruction if, tout le code qui suit doit être indenté, c’est-à-dire qu’il doit être décalé par rapport à la marge. Sinon Python ne fait pas la différence entre l’instruction et le code à exécuter.

Quand utiliser des boucles

En programmation, il y a des ensembles d’instructions qu’il faut répéter plusieurs fois. Par exemple, si vous voulez réaliser une même tâche sur tous les éléments d’une liste. Et si vous avez une liste de campagnes et que vous voulez les afficher toutes ?

Quand vous avez besoin de répéter un ensemble d’instructions, parfois vous savez combien de fois vous allez le répéter, d’autres fois vous ne savez pas. Parfois, le nombre de répétitions n’est pas important et vous voulez répéter le code jusqu’à ce qu’une certaine condition soit remplie.

Pour tous ces usages, vous allez utiliser des boucles.

La boucle for

La boucle forest le type de boucle centrale dans Python. Une boucle  for  est utilisée pour itérer sur une séquence. Ça peut être une liste, un tuple, un dictionnaire ou même une chaîne de caractères. Avec une bouclefor, vous pouvez exécuter le même code pour chaque élément dans cette séquence. 

Avec Python, c’est très facile de créer des boucles. Si vous voulez afficher tous les éléments dans une liste, le code ressemblera à ça :

Dans ce code, chaque élément dans  races_de_chien  sera affiché dans le terminal.  chien  est un nom de variable qui se met à jour pour être l’élément suivant à chaque fois que la boucle se répète. Vous pouvez modifier  chien  en  cocorico  et il s’exécutera toujours de la même façon, mais cela n’a pas bien d’intérêt !

Le fonctionnement de la boucle for.
Le fonctionnement de la boucle for.

Vous pouvez faire le même genre de boucleforsi vous voulez passer en boucle chaque caractère d’une chaîne.

Pour boucler un certain nombre de fois, vous pouvez utiliser la fonctionrange(). Elle renverra une séquence de nombres qui vont de 0 à un nombre de fin déterminé.

Vous n’avez pas encore appris les fonctions, mais ça ne va pas tarder ! Pour l’instant, vous devez juste savoir qu’on peut saisir un nombre dans la fonctionrange()et qu’elle renvoie une séquence de nombres allant de 0 à ce nombre moins un.

Ce code affichera 0, 1, 2, 3, 4 en séquence.

Les accolades{}ci-dessus prennent n’importe quelle valeur dans la variable  x  et la remplace (n’oubliez pas le  “f”au début de la string qui signifieformat). Donc dans cet exemple, le code va afficher :

La fonction  range()  est réglée sur 0 par défaut pour la valeur de début. Vous pouvez la modifier en ajoutant un autre nombre entier comme ça :  range(4, 10) !

Cette plage renvoie les valeurs de 4 à 9 (sans inclure 10)

La boucle while

La boucle  for  vous permet d’exécuter du code un nombre spécifique de fois, alors que la boucle whilecontinue de s’exécuter jusqu’à ce qu’une certaine condition soit remplie.  

Dans le chapitre précédent, vous avez découvert des conditions, ou instructions, qui évaluent si une expression est vraie ou fausse. C’est la même chose ici : le code dans l’instruction  while  s’exécute jusqu’à ce que la condition devienne fausse.

L’extrait de code ci-dessous vérifie la capacité actuelle et l’augmente d’une unité jusqu’à ce que la capacité maximale soit atteinte (+= 1augmente la valeur actuelle de 1).

Comme cette  capacite_actuelle  commence à 3, ce code s’exécute 7 fois jusqu’à ce que  capacite_actuelle  atteigne 10.

Le fonctionnement de la boucle while
Le fonctionnement de la boucle while

C’est important de connaître les boucles infinies. Si la condition que vous avez réglée est toujours vraie, la boucle va s’exécuter pour toujours !

Par exemple :

Dans cette situation, x n’atteindra jamais 5 !

Qu’est-ce qu’une fonction ?

Une fonction est un bloc de code avec un but spécifique auquel vous pouvez donner un nom. Quand vous appelez cette fonction, vous exécutez le code qu’elle contient. Les fonctions vous laissent saisir des paramètres pour exécuter le même code sur différentes valeurs.  

Il y a différents types de fonctions dans Python :

  1. Les fonctions intégrées fournies avec Python.
  2. Les fonctions définies par l’utilisateur que les développeurs (vous !) créent. 

Vous avez déjà utilisé une fonction intégrée ! range() est une fonction dans laquelle vous pouvez saisir un nombre et elle renverra ou répondra avec une séquence allant de 0 à -1. 

Définissez une fonction

Pensez à une fonction comme à un moyen de réutiliser un ensemble d’instructions répétables. Vous la définissez avec le mot-clé def, le nom de la fonction, des parenthèses et deux-points:. Si la fonction a besoin d’un paramètre ou plus, il faut les saisir à l’intérieur des parenthèses, séparés par des virgules. Admettons que vous voulez ajouter deux nombres ensemble. L’extrait de code ci-dessous est une méthode add()qui prend deux nombres comme paramètres et renvoie la somme. 

 Maintenant que vous connaissez les fonctions, vous pouvez les appeler en y saisissant des valeurs en tant que paramètres. Ces valeurs sont appelées arguments. La fonction renverra les valeurs ajoutées ensemble. 

Quand une valeur est renvoyée dans une fonction, vous pouvez la sauvegarder dans une variable.

 Dans ce cas, qu’est-ce que total va donner comme résultat ?

Si vous avez deviné 5, vous avez juste ! Avec la fonction add()vous pouvez saisir deux nombres et avoir la somme en retour.

Quand utiliser les fonctions

Quand on écrit beaucoup de code, on s’y perd et on fait des erreurs facilement entre les différentes fonctionnalités en cours. Les fonctions vous aident à séparer le code en sections plus petites. Comme ça vous gardez le fil sur ce que chaque partie est censée faire.

Vous en sortirez avec un code mieux écrit, mieux structuré et plus lisible.

Écrivez du code correctement

Pourquoi écrire du code de façon structurée est si important ?

Avant de plonger dans les méthodes de programmation, voyons pourquoi il faut garder le code structuré autant que possible.

Pensez à l’endroit chez vous le moins bien rangé et moins bien organisé. Un tiroir, un placard ou même une pièce entière. C’est difficile de trouver quelque chose au milieu de tout ça, n’est-ce pas ? Si vous venez de vous en servir, ça peut encore aller, mais quand ça fait un moment, ça peut devenir compliqué.

Avec le code, c’est pareil… ou pire. Si vous n’y avez pas touché depuis plusieurs mois et que vous ne l’avez pas écrit avec rigueur, vous allez perdre du temps à vous rappeler des différentes fonctions et de leur structure.

Maintenant, imaginez que vous avez hérité du tiroir/placard/de la pièce d’une personne désorganisée et qui ne vit plus ici. C’est à ça que ça ressemble de travailler avec le code de quelqu’un d’autre qui n’a pas été rigoureux !

Vous devriez avoir une définition partagée avec d’autres développeurs sur ce que signifie « avoir un code structuré ». De cette façon, vous comprendrez mieux le code sans avoir à connaître la personne qui l’a écrit.

Vous comprenez maintenant pourquoi vous devez coder correctement. Voyons comment faire.

Ne vous répétez pas

Le premier commandement de la programmation est le DRY : ne vous répétez pas (Don’t Repeat Yourself en anglais). En tant que développeur, vous voulez que tout soit aussi rapide et efficace que possible et automatiser autant que vous pouvez. Si vous vous retrouvez à copier et coller souvent des morceaux de code, c’est un signe que vous pouvez isoler ce à quoi servent ces lignes de code.  

Admettons que vous voulez calculer le taux de conversion et l’afficher dans plusieurs campagnes. Vous pouvez le copier et coller pour chaque campagne comme dans le code ci-dessous :

Si vous commencez à écrire du code comme ça, la première chose à faire est de le transformer en fonction. Vous pouvez écrire une fonction appelée calculer_taux_de_conversion et tout faire en une fois.

Les deux extraits de code ci-dessus font la même chose, mais il y en a un mieux structuré que l’autre et qui suit le principe DRY !

Le principe de responsabilité unique

Quand vous organisez quelque chose, il vaut mieux avoir un endroit où ranger chaque objet, car vous savez qu’il sera plus facile à retrouver. C’est pareil pour écrire des fonctions. Chaque fonction doit être responsable d’une seule et unique fonctionnalité, et rien de plus.

Disons que vous voulez calculer les taux de conversion pour plusieurs campagnes et sauvegarder les données dans un fichier CSV.

CSV signifie comma-separated values (valeurs séparées par des virgules). Le format de fichier CSV est utilisé pour enregistrer des données tabulaires (c’est-à-dire des informations structurées dans un tableau), comme un tableur ou une base de données. 

Au lieu d’appeler une fonction  calculer_taux_de_conversion_sauvegarder_csv(), nous allons séparer deux tâches en fonctions séparées :

  • calculer_taux_de_conversion()
  • sauvegarder_csv()

Chaque fonction doit être responsable d’une seule tâche. Dès que vous essayez d’accomplir plus d’une chose dans une seule fonction, vous risquez de ne plus comprendre ce que vous vouliez faire à l’origine.

Le fait de séparer les responsabilités vous permet de définir un nom plus descriptif pour la fonction, de débugger le code plus facilement et de mieux comprendre le code.

Commentez votre code

Les commentaires sont un moyen très pratique de rappeler, à vous et aux autres développeurs, ce qu’un morceau de code est censé faire.

Il y a différents standards pour les commentaires. Votre code doit être suffisamment lisible pour ne pas avoir besoin de trop de commentaires pour que quelqu’un d’autre le comprenne.

Dans Python, on trouve des commentaires à ligne unique et multiple.

Les commentaires à ligne unique sont indiqués par  #  avant et après. La phrase juste en-dessous est un commentaire à ligne unique à propos d’une méthode.

Les commentaires à lignes multiples sont entourés de trois guillemets  """  :

« Les commentaires qui contredisent le code sont pires qu’aucun commentaire. Gardez en priorité les commentaires à jour quand le code change ! »

– PEP 8 guide de style pour le code Python

Respectez les standards du code

En général, vous lisez du code bien plus souvent que vous n’en écrivez. C’est pour ça que c’est important d’avoir des lignes directrices pour améliorer sa lisibilité et le rendre aussi cohérent que possible.

Le guide de style officiel pour le code Python est un document appelé PEP 8(ressource en anglais). Il contient des règles et des bonnes pratiques qui aident à standardiser l’écriture en Python par les développeurs.

Globalement, les philosophies derrière l’écriture correcte en Python sont répertoriées dans un document appelé PEP 20 (ressource en anglais) : 

Explicite vaut mieux qu’implicite.

La simplicité est meilleure que la complexité.

(…)

LA LISIBILITÉ COMPTE AUSSI.

Il est vital de connaître ces préceptes du « Zen de Python » comme on les appelle. Je vous recommande aussi de consulter le PEP quand vous avez des questions qui surviennent dans vos projets de programmation en Python.

Même si les PEP sont des ressources en anglais, il existe aussi des ressources en français basées sur les PEP, comme la traduction française de The Hitchhiker’s Guide to Python.

Vous en apprendrez plus sur les standards de programmation de Python dans le cours Écrivez du code Python maintenable.

C’est quoi les packages ?

Un package (une bibliothèque en français) est une collection de fonctions qui peuvent être ajoutées au code Python et appelées au besoin, comme n’importe quelle autre fonction. Il n’y a aucune raison de réécrire du code pour réaliser une tâche standard. Avec les packages, vous pouvez importer des fonctions préexistantes et étendre efficacement les fonctionnalités de votre code.

Voici quelques exemples de packages populaires et leurs fonctions :

  • Requests: un package HTTP élégant et simple pour Python. Fréquemment utilisé pour les appels d’interface REST. 
  • Beautiful Soup (ressource anglais) : un package pour récupérer des données de fichiers HTML et XML.  
  • Pandas (ressource anglais): un outil open source rapide, puissant et accessible pour l’analyse et la manipulation de données. 

Des milliers de packages Python sont disponibles pour votre code !

Installez les packages avec Pip

Pip est un gestionnaire de packages Python.

Qu’est-ce qu’un gestionnaire de packages ?

Un gestionnaire de packages est un outil qui permet d’installer et de gérer des packages supplémentaires dans votre terminal. Pip est déjà installé dans Python, comme ça vous êtes prêt à vous y mettre !

Pour installer un package avec pip dans votre terminal, utilisez la méthode suivante :

Pour voir les packages déjà installés, vous pouvez écrire le code qui suit :

Il va afficher une liste de tous les packages existants, qu’on appelle dépendances, dans votre terminal.

Regardez la capture vidéo ci-dessous pour savoir comment installer et voir vos packages Python avec pip !

Importez les packages dans votre code

Pour importer une fonctionnalité du package dans votre code, utilisez le mot-clé  import  . (C’est surprenant je sais 😄 )

En utilisant le mot-clé  import  tout en haut de votre fichier de code, vous pourrez importer certaines fonctions d’un package ou le package entier d’un coup. Par exemple, pour importer le package Requests entier, vous devez d’abord installer Requests avec votre terminal en utilisant  pip install requests. Ensuite vous pouvez écrire le code suivant dans votre éditeur de texte :

 

Après, pour appeler la fonction get()dans le package Requests, écrivez :

Si vous voulez importer une seule fonction appelée get à partir du package Requests, écrivez ceci :

Maintenant vous n’avez plus besoin d’écrire requests avant get()parce que la méthode elle-même a déjà été importée.

2 Variables

2.1 Définition

Une variable est une zone de la mémoire de l’ordinateur dans laquelle une valeur est stockée. Aux yeux du programmeur, cette variable est définie par un nom, alors que pour l’ordinateur, il s’agit en fait d’une adresse, c’est-à-dire d’une zone particulière de la mémoire.

En Python, la déclaration d’une variable et son initialisation (c’est-à-dire la première valeur que l’on va stocker dedans) se font en même temps. Pour vous en convaincre, testez les instructions suivantes après avoir lancé l’interpréteur :





Ligne 1. Dans cet exemple, nous avons déclaré, puis initialisé la variable x avec la valeur 2. Notez bien qu’en réalité, il s’est passé plusieurs choses :

  • Python a « deviné » que la variable était un entier. On dit que Python est un langage au typage dynamique.
  • Python a alloué (réservé) l’espace en mémoire pour y accueillir un entier. Chaque type de variable prend plus ou moins d’espace en mémoire. Python a aussi fait en sorte qu’on puisse retrouver la variable sous le nom x.
  • Enfin, Python a assigné la valeur 2 à la variable x.

Dans d’autres langages (en C par exemple), il faut coder ces différentes étapes une par une. Python étant un langage dit de haut niveau, la simple instruction x = 2 a suffi à réaliser les 3 étapes en une fois !

Lignes 2 et 3. L’interpréteur nous a permis de connaître le contenu de la variable juste en tapant son nom. Retenez ceci car c’est une spécificité de l’interpréteur Python, très pratique pour chasser (debugger) les erreurs dans un programme. Par contre, la ligne d’un script Python qui contient seulement le nom d’une variable (sans aucune autre indication) n’affichera pas la valeur de la variable à l’écran lors de l’exécution (pour autant, cette instruction reste valide et ne générera pas d’erreur).

Sachez par ailleurs que l’opérateur d’affectation = s’utilise dans un certain sens. Par exemple, l’instruction x = 2 signifie qu’on attribue la valeur située à droite de l’opérateur = (ici, 2) à la variable située à gauche (ici, x). D’autres langages de programmation comme R utilisent les symboles <- pour rendre l’affectation d’une variable plus explicite, par exemple x <- 2.

Enfin, dans l’instruction x = y - 3, l’opération y - 3 est d’abord évaluée et ensuite le résultat de cette opération est affecté à la variable x.

2.2 Les types de variables

Le type d’une variable correspond à la nature de celle-ci. Les trois principaux types dont nous aurons besoin dans un premier temps sont les entiers (integer ou int), les nombres décimaux que nous appellerons floats et les chaînes de caractères (string ou str). Bien sûr, il existe de nombreux autres types (par exemple, les booléens, les nombres complexes, etc.). Si vous n’êtes pas effrayés, vous pouvez vous en rendre compte ici.

Dans l’exemple précédent, nous avons stocké un nombre entier (int) dans la variable x, mais il est tout à fait possible de stocker des floats, des chaînes de caractères (string ou str) ou de nombreux autres types de variable que nous verrons par la suite :





>>> y = 3.14 >>> y 3.14 >>> a = "bonjour" >>> a 'bonjour' >>> b = 'salut' >>> b 'salut' >>> c = """girafe""" >>> c 'girafe' >>> d = '''lion''' >>> d 'lion'

Remarque

Python reconnaît certains types de variable automatiquement (entier, float). Par contre, pour une chaîne de caractères, il faut l’entourer de guillemets (doubles, simples, voire trois guillemets successifs doubles ou simples) afin d’indiquer à Python le début et la fin de la chaîne de caractères.

Dans l’interpréteur, l’affichage direct du contenu d’une chaîne de caractères se fait avec des guillemets simples, quel que soit le type de guillemets utilisé pour définir la chaîne de caractères.

En Python, comme dans la plupart des langages de programmation, c’est le point qui est utilisé comme séparateur décimal. Ainsi, 3.14 est un nombre reconnu comme un float en Python alors que ce n’est pas le cas de 3,14.

2.3 Nommage

Le nom des variables en Python peut être constitué de lettres minuscules (a à z), de lettres majuscules (A à Z), de nombres (0 à 9) ou du caractère souligné (_). Vous ne pouvez pas utiliser d’espace dans un nom de variable.

Par ailleurs, un nom de variable ne doit pas débuter par un chiffre et il n’est pas recommandé de le faire débuter par le caractère _ (sauf cas très particuliers).

De plus, il faut absolument éviter d’utiliser un mot « réservé » par Python comme nom de variable (par exemple : print, range, for, from, etc.).

Enfin, Python est sensible à la casse, ce qui signifie que les variables TesT, test ou TEST sont différentes.

2.4 Écriture scientifique

On peut écrire des nombres très grands ou très petits avec des puissances de 10 en utilisant le symbole e :





>>> 1e6 1000000.0 >>> 3.12e-3 0.00312

On appelle cela écriture ou notation scientifique. On pourra noter deux choses importantes :

  • 1e6 ou 3.12e-3 n’implique pas l’utilisation du nombre exponentiel e mais signifie 1×106

ou 3.12×10−3

  • respectivement ;
  • Même si on ne met que des entiers à gauche et à droite du symbole e (comme dans 1e6), Python génère systématiquement un float.

Enfin, vous avez sans doute constaté qu’il est parfois pénible d’écrire des nombres composés de beaucoup de chiffres, par exemple le nombre d’Avogradro 6.02214076×1023

ou le nombre d’humains sur Terre (au 26 août 2020) 7807568245. Pour s’y retrouver, Python autorise l’utilisation du caractère « souligné » (ou underscore) _ pour séparer des groupes de chiffres. Par exemple :





>>> avogadro_number = 6.022_140_76e23 >>> print(avogadro_number) 6.02214076e+23 >>> humans_on_earth = 7_807_568_245 >>> print(humans_on_earth) 7807568245

Dans ces exemples, le caractère _ est utilisé pour séparer des groupes de 3 chiffres mais on peut faire ce qu’on veut :





>>> print(7_80_7568_24_5) 7807568245

2.5 Opérations

2.5.1 Opérations sur les types numériques

Les quatre opérations arithmétiques de base se font de manière simple sur les types numériques (nombres entiers et floats) :





>>> x = 45 >>> x + 2 47 >>> x - 2 43 >>> x * 3 135 >>> y = 2.5 >>> x - y 42.5 >>> (x * 10) + y 452.5

Remarquez toutefois que si vous mélangez les types entiers et floats, le résultat est renvoyé comme un float (car ce type est plus général). Par ailleurs, l’utilisation de parenthèses permet de gérer les priorités.

L’opérateur / effectue une division. Contrairement aux opérateurs +, - et *, celui-ci renvoie systématiquement un float :





>>> 3 / 4 0.75 >>> 2.5 / 2 1.25

L’opérateur puissance utilise les symboles ** :





>>> 2**3 8 >>> 2**4 16

Pour obtenir le quotient et le reste d’une division entière (voir ici pour un petit rappel sur la division entière), on utilise respectivement les symboles // et modulo % :





>>> 5 // 4 1 >>> 5 % 4 1 >>> 8 // 4 2 >>> 8 % 4 0

Les symboles +, -, *, /, **, // et % sont appelés opérateurs, car ils réalisent des opérations sur les variables.

Enfin, il existe des opérateurs « combinés » qui effectue une opération et une affectation en une seule étape :





>>> i = 0 >>> i = i + 1 >>> i 1 >>> i += 1 >>> i 2 >>> i += 2 >>> i 4

L’opérateur += effectue une addition puis affecte le résultat à la même variable. Cette opération s’appelle une « incrémentation ».

Les opérateurs -=, *= et /= se comportent de manière similaire pour la soustraction, la multiplication et la division.

2.5.2 Opérations sur les chaînes de caractères

Pour les chaînes de caractères, deux opérations sont possibles, l’addition et la multiplication :





>>> chaine = "Salut" >>> chaine 'Salut' >>> chaine + " Python" 'Salut Python' >>> chaine * 3 'SalutSalutSalut'

L’opérateur d’addition + concatène (assemble) deux chaînes de caractères.

L’opérateur de multiplication * entre un nombre entier et une chaîne de caractères duplique (répète) plusieurs fois une chaîne de caractères.

Attention

Vous observez que les opérateurs + et * se comportent différemment s’il s’agit d’entiers ou de chaînes de caractères : 2 + 2 est une addition alors que "2" + "2" est une concaténation. On appelle ce comportement redéfinition des opérateurs. Nous serons amenés à revoir cette notion dans le chapitre 19 Avoir la classe avec les objets.

2.5.3 Opérations illicites

Attention à ne pas faire d’opération illicite car vous obtiendriez un message d’erreur :





>>> "toto" * 1.3 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't multiply sequence by non-int of type 'float' >>> "toto" + 2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "int") to str

Notez que Python vous donne des informations dans son message d’erreur. Dans le second exemple, il indique que vous devez utiliser une variable de type str c’est-à-dire une chaîne de caractères et pas un int, c’est-à-dire un entier.

2.6 La fonction type()

Si vous ne vous souvenez plus du type d’une variable, utilisez la fonction type() qui vous le rappellera.





>>> x = 2 >>> type(x) <class 'int'> >>> y = 2.0 >>> type(y) <class 'float'> >>> z = '2' >>> type(z) <class 'str'>

Nous verrons plus tard ce que signifie le mot class.

Attention

Pour Python, la valeur 2 (nombre entier) est différente de 2.0 (float) et est aussi différente de '2' (chaîne de caractères).

2.7 Conversion de types

En programmation, on est souvent amené à convertir les types, c’est-à-dire passer d’un type numérique à une chaîne de caractères ou vice-versa. En Python, rien de plus simple avec les fonctions int(), float() et str(). Pour vous en convaincre, regardez ces exemples :





>>> i = 3 >>> str(i) '3' >>> i = '456' >>> int(i) 456 >>> float(i) 456.0 >>> i = '3.1416' >>> float(i) 3.1416

On verra au chapitre 7 Fichiers que ces conversions sont essentielles. En effet, lorsqu’on lit ou écrit des nombres dans un fichier, ils sont considérés comme du texte, donc des chaînes de caractères.

Toute conversion d’une variable d’un type en un autre est appelé casting en anglais, il se peut que vous croisiez ce terme si vous consultez d’autres ressources.

2.8 Note sur la division de deux nombres entiers

Notez bien qu’en Python 3, la division de deux nombres entiers renvoie par défaut un float :





>>> x = 3 / 4 >>> x 0.75 >>> type(x) <class 'float'>

Remarque

Ceci n’était pas le cas en Python 2. Pour en savoir plus sur ce point, vous pouvez consulter le chapitre 21 Remarques complémentaires.

2.9 Note sur le vocabulaire et la syntaxe

Nous avons vu dans ce chapitre la notion de variable qui est commune à tous les langages de programmation. Toutefois, Python est un langage dit « orienté objet », il se peut que dans la suite du cours nous employions le mot objet pour désigner une variable. Par exemple, « une variable de type entier » sera pour nous équivalent à « un objet de type entier ». Nous verrons dans le chapitre 19 Avoir la classe avec les objets ce que le mot « objet » signifie réellement (tout comme le mot « classe »).

Par ailleurs, nous avons rencontré plusieurs fois des fonctions dans ce chapitre, notamment avec type(), int(), float() et str(). Dans le chapitre 1 Introduction, nous avons également vu la fonction print(). On reconnaît qu’il s’agit d’une fonction car son nom est suivi de parenthèses (par exemple, type()). En Python, la syntaxe générale est fonction().

Ce qui se trouve entre les parenthèses d’une fonction est appelé argument et c’est ce que l’on « passe » à la fonction. Dans l’instruction type(2), c’est l’entier 2 qui est l’argument passé à la fonction type(). Pour l’instant, on retiendra qu’une fonction est une sorte de boîte à qui on passe un (ou plusieurs) argument(s), qui effectue une action et qui peut renvoyer un résultat ou plus généralement un objet. Par exemple, la fonction type() renvoie le type de la variable qu’on lui a passé en argument.

Si ces notions vous semblent obscures, ne vous inquiétez pas, au fur et à mesure que vous avancerez dans le cours, tout deviendra limpide.

2.10 Minimum et maximum

Python propose les fonctions min() et max() qui renvoient respectivement le minimum et le maximum de plusieurs entiers et / ou floats :





>>> min(1, -2, 4) -2 >>> pi = 3.14 >>> e = 2.71 >>> max(e, pi) 3.14 >>> max(1, 2.4, -6) 2.4

Par rapport à la discussion de la rubrique précédente, min() et max() sont des exemples de fonction prenant plusieurs arguments. En Python, quand une fonction prend plusieurs arguments, on doit les séparer par une virgule. min() et max() prennent en argument autant d’entiers et de floats que l’on veut, mais il en faut au moins deux.

2.11 Exercices

Conseil : utilisez l’interpréteur Python pour les exercices suivants.

2.11.1 Prédire le résultat : opérations

Essayez de prédire le résultat de chacune des instructions suivantes, puis vérifiez-le dans l’interpréteur Python :

  • (1+2)**3
  • "Da" * 4
  • "Da" + 3
  • ("Pa"+"La") * 2
  • ("Da"*4) / 2
  • 5 / 2
  • 5 // 2
  • 5 % 2

2.11.2 Prédire le résultat : opérations et conversions de types

Essayez de prédire le résultat de chacune des instructions suivantes, puis vérifiez-le dans l’interpréteur Python :

  • str(4) * int("3")
  • int("3") + float("3.2")
  • str(3) * float("3.2")
  • str(3/4) * 2

3 Affichage

3.1 La fonction print()

Dans le chapitre 1, nous avons rencontré la fonction print() qui affiche une chaîne de caractères (le fameux "Hello world!"). En fait, la fonction print() affiche l’argument qu’on lui passe entre parenthèses et un retour à ligne. Ce retour à ligne supplémentaire est ajouté par défaut. Si toutefois, on ne veut pas afficher ce retour à la ligne, on peut utiliser l’argument par « mot-clé » end :

>>> print("Hello world!")
Hello world!
>>> print("Hello world!", end="")
Hello world!>>>

Ligne 1. On a utilisé l’instruction print() classiquement en passant la chaîne de caractères "Hello world!" en argument.

Ligne 3. On a ajouté un second argument end="", en précisant le mot-clé end. Nous aborderons les arguments par mot-clé dans le chapitre 9 Fonctions. Pour l’instant, dites-vous que cela modifie le comportement par défaut des fonctions.

Ligne 4. L’effet de l’argument end="" est que les trois chevrons >>> se retrouvent collés après la chaîne de caractères "Hello world!".

Une autre manière de s’en rendre compte est d’utiliser deux fonctions print() à la suite. Dans la portion de code suivante, le caractère « ; » sert à séparer plusieurs instructions Python sur une même ligne :

>>> print("Hello") ; print("Joe")
Hello Joe
>>> print("Hello", end="") ; print("Joe")
HelloJoe
>>> print("Hello", end=" ") ; print("Joe")
Hello Joe

La fonction print() peut également afficher le contenu d’une variable quel que soit son type. Par exemple, pour un entier :

>>> var = 3
>>> print(var)
3

Il est également possible d’afficher le contenu de plusieurs variables (quel que soit leur type) en les séparant par des virgules :

>>> x = 32
>>> nom = "John"
>>> print(nom, "a", x, "ans")
John a 32 ans

Python a écrit une phrase complète en remplaçant les variables x et nom par leur contenu. Vous remarquerez que pour afficher plusieurs éléments de texte sur une seule ligne, nous avons utilisé le séparateur « , » entre les différents éléments. Python a également ajouté un espace à chaque fois que l’on utilisait le séparateur « , ». On peut modifier ce comportement en passant à la fonction print() l’argument par mot-clé sep :

>>> x = 32
>>> nom = "John"
>>> print(nom, "a", x, "ans", sep="")
Johna32ans
>>> print(nom, "a", x, "ans", sep="-")
John-a-32-ans

Pour afficher deux chaînes de caractères l’une à côté de l’autre, sans espace, on peut soit les concaténer, soit utiliser l’argument par mot-clé sep avec une chaîne de caractères vide :

>>> ani1 = "chat"
>>> ani2 = "souris"
>>> print(ani1, ani2)
chat souris
>>> print(ani1 + ani2)
chatsouris
>>> print(ani1, ani2, sep="")
chatsouris

3.2 Écriture formatée

3.2.1 Définitions

Que signifie « écriture formatée » ?

Définition

L’écriture formatée est un mécanisme permettant d’afficher des variables avec un certain format, par exemple justifiées à gauche ou à droite, ou encore avec un certain nombre de décimales pour les floats. L’écriture formatée est incontournable lorsqu’on veut créer des fichiers organisés en « belles colonnes » comme par exemple les fichiers PDB (pour en savoir plus sur ce format, reportez-vous à l’annexe A Quelques formats de données rencontrés en biologie).

Depuis la version 3.6, Python a introduit les f-strings pour mettre en place l’écriture formatée que nous allons décrire en détail dans cette rubrique. Il existe d’autres manières pour formatter des chaînes de caractères qui étaient utilisées avant la version 3.6, nous en avons mis un rappel bref dans la rubrique suivante. Toutefois, nous conseillons vivement l’utilisation des f-strings si vous débutez l’apprentissage de Python.

Que signifie f-string ?

Définition

f-string est le diminutif de formatted string literals. Mais encore ? Dans le chapitre précédent, nous avons vu les chaînes de caractères ou encore strings qui étaient représentées par un texte entouré de guillemets simples ou doubles. Par exemple :

"Ceci est une chaîne de caractères"

L’équivalent en f-string est tout simplement la même chaîne de caractères précédée du caractère f sans espace entre les deux :

f"Ceci est une chaîne de caractères"

Ce caractère f avant les guillemets va indiquer à Python qu’il s’agit d’une f-string permettant de mettre en place le mécanisme de l’écriture formatée, contrairement à une string normale.

Nous expliquons plus en détail dans le chapitre 10 Plus sur les chaînes de caractères pourquoi on doit mettre ce f et le mécanisme sous-jacent.

3.2.2 Prise en main des f-strings

Les f-strings permettent une meilleure organisation de l’affichage des variables. Reprenons l’exemple ci-dessus à propos de notre ami John :

>>> x = 32
>>> nom = "John"
>>> print(f"{nom} a {x} ans")
John a 32 ans

Il suffit de passer un nom de variable au sein de chaque couple d’accolades et Python les remplace par leur contenu ! Première remarque, la syntaxe apparait plus lisible que l’équivalent vu ci-avant print(nom, "a", x, "ans"). Bien sûr, il ne faut pas omettre le f avant le premier guillemet, sinon Python prendra cela pour une chaîne de caractères normale et ne mettra pas en place ce mécanisme de remplacement :

>>> print("{nom} a {x} ans")
{nom} a {x} ans

Remarque

Une variable est utilisable plus d’une fois pour une f-string donnée :

>>> var = "to"
>>> print(f"{var} et {var} font {var}{var}")
to et to font toto
>>>

Enfin, il est possible de mettre entre les accolades des valeurs numériques ou des chaînes de caractères :

>>> print(f"J'affiche l'entier {10} et le float {3.14}") J'affiche l'entier 10 et le float 3.14
>>> print(f"J'affiche la chaine {'Python'}")
J'affiche la chaine Python

Même si cela ne présente que peu d’intérêt pour l’instant, il s’agit d’une commande Python parfaitement valide. Nous verrons des exemples plus pertinents par la suite. Cela fonctionne avec n’importe quel type de variable (entiers, chaînes de caractères, floats, etc.). Attention toutefois pour les chaînes de caractères, utilisez des guillemets simples au sein des accolades si vous définissez votre f-string avec des guillemets doubles.

3.2.3 Spécification de format

Les f-strings permettent de remplacer des variables au sein d’une chaîne de caractères. On peut également spécifier le format de leur affichage.

Prenons un exemple. Imaginez maintenant que vous vouliez calculer, puis afficher, la proportion de GC d’un génome. La proportion de GC s’obtient comme la somme des bases Guanine (G) et Cytosine (C) divisée par le nombre total de bases (A, T, C, G) du génome considéré. Si on a, par exemple, 4500 bases G et 2575 bases C, pour un total de 14800 bases, vous pourriez procéder comme suit (notez bien l’utilisation des parenthèses pour gérer les priorités des opérateurs) :

>>> prop_GC = (4500 + 2575) / 14800
>>> print("La proportion de GC est", prop_GC)
La proportion de GC est 0.4780405405405405

Le résultat obtenu présente trop de décimales (seize dans le cas présent). Pour écrire le résultat plus lisiblement, vous pouvez spécifier dans les accolades {} le format qui vous intéresse. Dans le cas présent, vous voulez formater un float pour l’afficher avec deux puis trois décimales :

>>> print(f"La proportion de GC est {prop_GC:.2f}")
La proportion de GC est 0.48
>>> print(f"La proportion de GC est {prop_GC:.3f}")
La proportion de GC est 0.478

Détaillons le contenu des accolades de la première ligne ({prop_GC:.2f}) :

  • D’abord on a le nom de la variable à formatter, prop_GC, c’est indispensable avec les f-strings.
  • Ensuite on rencontre les deux-points :, ceux-ci indiquent que ce qui suit va spécifier le format dans lequel on veut afficher la variable prop_GC.
  • À droite des deux-points on trouve .2f qui indique ce format : la lettre f indique qu’on souhaite afficher la variable sous forme d’un float, les caractères .2 indiquent la précision voulue, soit ici deux chiffres après la virgule.

Notez enfin que le formatage avec .xf (x étant un entier positif) renvoie un résultat arrondi.

Vous pouvez aussi formater des entiers avec la lettre d (ici d veut dire decimal integer) :

>>> nb_G = 4500
>>> print(f"Ce génome contient {nb_G:d} guanines")
Ce génome contient 4500 guanines

ou mettre plusieurs nombres dans une même chaîne de caractères.

>>> nb_G = 4500
>>> nb_C = 2575
>>> print(f"Ce génome contient {nb_G:d} G et {nb_C:d} C, soit une prop de GC de {prop_GC:.2f}")
Ce génome contient 4500 G et 2575 C, soit une prop de GC de 0.48
>>> perc_GC = prop_GC * 100
>>> print(f"Ce génome contient {nb_G:d} G et {nb_C:d} C, soit un %GC de {perc_GC:.2f} %")
Ce génome contient 4500 G et 2575 C, soit un %GC de 47.80 %

Enfin, il est possible de préciser sur combien de caractères vous voulez qu’un résultat soit écrit et comment se fait l’alignement (à gauche, à droite ou centré). Dans la portion de code suivante, le caractère ; sert de séparateur entre les instructions sur une même ligne :

Notez que > spécifie un alignement à droite, < spécifie un alignement à gauche et ^ spécifie un alignement centré. Il est également possible d’indiquer le caractère qui servira de remplissage lors des alignements (l’espace est le caractère par défaut).

Ce formatage est également possible sur des chaînes de caractères avec la lettre s (comme string) :

Vous voyez tout de suite l’énorme avantage de l’écriture formatée. Elle vous permet d’écrire en colonnes parfaitement alignées. Nous verrons que ceci est très pratique si l’on veut écrire les coordonnées des atomes d’une molécule au format PDB (pour en savoir plus sur ce format, reportez-vous à l’annexe A Quelques formats de données rencontrés en biologie).

Pour les floats, il est possible de combiner le nombre de caractères à afficher avec le nombre de décimales :

L’instruction 7.3f signifie que l’on souhaite écrire un float avec 3 décimales et formaté sur 7 caractères (par défaut justifiés à droite). L’instruction 10.3f fait la même chose sur 10 caractères. Remarquez que le séparateur décimal . compte pour un caractère. De même, si on avait un nombre négatif, le signe - compterait aussi pour un caractère.

3.2.4 Autres détails sur les f-strings

Si on veut afficher des accolades littérales avec les f-strings, il faut les doubler pour échapper au formatage :

Une remarque importante, si on ne met pas de variable à formater entre les accolades dans une f-string, cela conduit à une erreur :

Enfin, il est important de bien comprendre qu’une f-string est indépendante de la fonction print(). Si on donne une f-string à la fonction print(), Python évalue d’abord la f-string et c’est la chaîne de caractères qui en résulte qui est affichée à l’écran. Tout comme dans l’instruction print(5*5), c’est d’abord la multiplication (5*5) qui est évaluée, puis son résultat qui est affiché à l’écran. On peut s’en rendre compte de la manière suivante dans l’interpréteur :

Python considère le résultat de l’instruction f"{perc_GC:10.3f}" comme une chaîne de caractères et la fonction type() nous le confirme.

3.2.5 Expressions dans les f-strings

Une fonctionnalité extrêmement puissante des f-strings est de supporter des expressions Python au sein des accolades. Ainsi, il est possible d’y mettre directement une opération ou encore un appel à une fonction :

Nous aurons l’occasion de revenir sur cette fonctionnalité au fur et à mesure de ce cours.

Les possibilités offertes par les f-strings sont nombreuses. Pour vous y retrouver dans les différentes options de formatage, nous vous conseillons de consulter ce mémo (en anglais).

3.3 Écriture scientifique

Pour les nombres très grands ou très petits, l’écriture formatée permet d’afficher un nombre en notation scientifique (sous forme de puissance de 10) avec la lettre e :

Il est également possible de définir le nombre de chiffres après la virgule. Dans l’exemple ci-dessous, on affiche un nombre avec aucun, 3 et 6 chiffres après la virgule :

3.4 Ancienne méthode de formatage des chaînes de caractères

Conseil : Pour les débutants, tout ce qui est écrit dans cette rubrique n’est pas à retenir.

Dans les premières versions de Python jusqu’à la 2.6, il fallait utiliser l’opérateur %, puis de la version 2.7 jusqu’à la 3.5 il était plutôt conseillé d’utiliser la méthode .format() (voir la rubrique suivante pour la définition du mot « méthode »). Même si les f-strings sont devenues la manière conseillée pour mettre en place l’écriture formatée, ces deux anciennes manières, sont encore pleinement compatibles avec les versions modernes de Python.

Même si elle fonctionne encore, la première manière avec l’opérateur % est maintenant clairement déconseillée pour un certain nombre de raisons. Néanmoins, nous rappelons ci-dessous son fonctionnement, car il se peut que vous tombiez dessus dans d’anciens livres ou si vous lisez de vieux programmes Python.

La deuxième manière avec la méthode .format() est encore largement utilisée et reste tout à fait valide. Elle est clairement plus puissante et évite un certain nombre de désagréments par rapport à l’opérateur %. Vous la croiserez sans doute très fréquemment dans des programmes et ouvrages récents. Heureusement elle a un fonctionnement relativement proche des f-strings, donc vous ne serez pas totalement perdus !

Enfin, nous indiquons à la fin de cette rubrique nos conseils sur quelle méthode utiliser.

3.4.1 L’opérateur %

On a vu avec les entiers que l’opérateur % ou modulo renvoyait le reste d’une division entière. Cet opérateur existe aussi pour les chaînes de caractères mais il met en place l’écriture formatée. En voici un exemple :

La syntaxe est légèrement différente. Le symbole % est d’abord appelé dans la chaîne de caractères (dans l’exemple ci-dessus %d, %d et %.2f) pour :

  • Désigner l’endroit où sera placée la variable dans la chaîne de caractères.
  • Préciser le type de variable à formater, d pour un entier (i fonctionne également) ou f pour un float.
  • Éventuellement pour indiquer le format voulu. Ici .2 signifie une précision de deux décimales.

Le signe % est rappelé une seconde fois (% (nb_G, nb_C, prop_GC)) pour indiquer les variables à formater.

3.4.2 La méthode .format()

Depuis la version 2.7 de Python, la méthode .format() (voir la rubrique suivante pour la définition d’une méthode) a apporté une nette amélioration pour mettre en place l’écriture formatée. Celle-ci fonctionne de la manière suivante :

  • Dans la chaîne de caractères, les accolades vides {} précisent l’endroit où le contenu de la variable doit être inséré.
  • Juste après la chaîne de caractères, l’instruction .format(nom, x) fournit la liste des variables à insérer, d’abord la variable nom puis la variable x.
  • On peut éventuellement préciser le formatage en mettant un caractère deux-points : puis par exemple ici .2f qui signifie 2 chiffres après la virgule.
  • La méthode .format() agit sur la chaîne de caractères à laquelle elle est attachée par le point.

Tout ce que nous avons vu avec les f-strings sur la manière de formatter l’affichage d’une variable (après les : au sein des accolades) est identique avec la méthode .format(). Par exemple {:.2f}, {:0>6d}, {:.6e}, etc., fonctionneront de la même manière. La différence notable est qu’on ne met pas directement le nom de la variable au sein des accolades. Comme pour l’opérateur %, c’est l’emplacement dans les arguments passés à la méthode .format() qui dicte quelle variable doit être remplacée. Par exemple, dans "{} {} {}".format(bidule, machin, truc), les premières accolades remplaceront la variable bidule, les deuxièmes la variable machin, les troisièmes la variable truc.

Le formattage avec la méthode .format() se rapproche de la syntaxe des f-strings (accolades, deux-points), mais présente l’inconvénient — comme avec l’opérateur % — de devoir mettre la liste des variables tout à la fin, alourdissant ainsi la syntaxe. En effet, dans l’exemple avec la proportion de GC, la ligne équivalente avec une f-string apparait tout de même plus simple à lire :

Conseils

Pour conclure, ces deux anciennes façons de formater une chaîne de caractères avec l’opérateur % ou la méthode .format() vous sont présentées à titre d’information. La première avec l’opérateur % est clairement déconseillée. La deuxième avec la méthode .format() est encore tout à fait valable. Si vous débutez Python, nous vous conseillons fortement d’apprendre et d’utiliser les f-strings. C’est ce que vous rencontrerez dans la suite de ce cours. Si vous connaissez déjà Python et que vous utilisez la méthode .format(), nous vous conseillons de passer aux f-strings. Depuis que nous les avons découvertes, aucun retour n’est envisageable pour nous tant elles sont puissantes et plus claires à utiliser !

Enfin, si vous souhaitez aller plus loin, voici deux articles en anglais très bien fait sur le site RealPython: sur l’écriture formatée et sur les f-strings

3.5 Note sur le vocabulaire et la syntaxe

Revenons quelques instants sur la notion de méthode abordée dans ce chapitre avec .format(). En Python, on peut considérer chaque variable comme un objet sur lequel on peut appliquer des méthodes. Une méthode est simplement une fonction qui utilise et/ou agit sur l’objet lui-même, les deux étant connectés par un point. La syntaxe générale est de la forme objet.méthode().

Dans l’exemple suivant :

la méthode .format() est liée à "Joe a {} ans" qui est un objet de type chaîne de caractères. La méthode renvoie une nouvelle chaîne de caractères avec le bon formatage (ici, 'Joe a 20 ans').

Nous aurons de nombreuses occasions de revoir cette notation objet.méthode().

3.6 Exercices

Conseil : utilisez l’interpréteur Python pour les exercices 2 à 5.

3.6.1 Affichage dans l’interpréteur et dans un programme

Ouvrez l’interpréteur Python et tapez l’instruction 1+1. Que se passe-t-il ?

Écrivez la même chose dans un script test.py que vous allez créer avec un éditeur de texte. Exécutez ce script en tapant python test.py dans un shell. Que se passe-t-il ? Pourquoi ? Faites en sorte d’afficher le résultat de l’addition 1+1 en exécutant le script dans un shell.

3.6.2 Poly-A

Générez une chaîne de caractères représentant un brin d’ADN poly-A (c’est-à-dire qui ne contient que des bases A) de 20 bases de longueur, sans taper littéralement toutes les bases.

3.6.3 Poly-A et poly-GC

Sur le modèle de l’exercice précédent, générez en une ligne de code un brin d’ADN poly-A (AAAA…) de 20 bases suivi d’un poly-GC régulier (GCGCGC…) de 40 bases.

3.6.4 Écriture formatée

En utilisant l’écriture formatée, affichez en une seule ligne les variables a, b et c dont les valeurs sont respectivement la chaîne de caractères "salut", le nombre entier 102 et le float 10.318. La variable c sera affichée avec 2 décimales.

3.6.5 Écriture formatée 2

Dans un script percGC.py, calculez un pourcentage de GC avec l’instruction suivante :

perc_GC = ((4500 + 2575)/14800)*100

Ensuite, affichez le contenu de la variable perc_GC à l’écran avec 0, 1, 2 puis 3 décimales sous forme arrondie en utilisant l’écriture formatée et les f-strings. On souhaite que le programme affiche la sortie suivante :





4 Listes

4.1 Définition

Une liste est une structure de données qui contient une série de valeurs. Python autorise la construction de liste contenant des valeurs de types différents (par exemple entier et chaîne de caractères), ce qui leur confère une grande flexibilité. Une liste est déclarée par une série de valeurs (n’oubliez pas les guillemets, simples ou doubles, s’il s’agit de chaînes de caractères) séparées par des virgules, et le tout encadré par des crochets. En voici quelques exemples :





Lorsque l’on affiche une liste, Python la restitue telle qu’elle a été saisie.

4.2 Utilisation

Un des gros avantages d’une liste est que vous pouvez appeler ses éléments par leur position. Ce numéro est appelé indice (ou index) de la liste.





Soyez très attentifs au fait que les indices d’une liste de n éléments commence à 0 et se termine à n-1. Voyez l’exemple suivant :





Par conséquent, si on appelle l’élément d’indice 4 de notre liste, Python renverra un message d’erreur :





N’oubliez pas ceci ou vous risquez d’obtenir des bugs inattendus !

4.3 Opération sur les listes

Tout comme les chaînes de caractères, les listes supportent l’opérateur + de concaténation, ainsi que l’opérateur * pour la duplication :





L’opérateur + est très pratique pour concaténer deux listes.

Vous pouvez aussi utiliser la méthode .append() lorsque vous souhaitez ajouter un seul élément à la fin d’une liste.

Dans l’exemple suivant nous allons créer une liste vide :





puis lui ajouter deux éléments, l’un après l’autre, d’abord avec la concaténation :





puis avec la méthode .append() :





Dans l’exemple ci-dessus, nous ajoutons des éléments à une liste en utilisant l’opérateur de concaténation + ou la méthode .append(). Nous vous conseillons dans ce cas précis d’utiliser la méthode .append() dont la syntaxe est plus élégante.

Nous reverrons en détail la méthode .append() dans le chapitre 11 Plus sur les listes.

4.4 Indiçage négatif

La liste peut également être indexée avec des nombres négatifs selon le modèle suivant :





ou encore :





Les indices négatifs reviennent à compter à partir de la fin. Leur principal avantage est que vous pouvez accéder au dernier élément d’une liste à l’aide de l’indice -1 sans pour autant connaître la longueur de cette liste. L’avant-dernier élément a lui l’indice -2, l’avant-avant dernier l’indice -3, etc.





Pour accéder au premier élément de la liste avec un indice négatif, il faut par contre connaître le bon indice :





Dans ce cas, on utilise plutôt animaux[0].

4.5 Tranches

Un autre avantage des listes est la possibilité de sélectionner une partie d’une liste en utilisant un indiçage construit sur le modèle [m:n+1] pour récupérer tous les éléments, du émième au énième (de l’élément m inclus à l’élément n+1 exclu). On dit alors qu’on récupère une tranche de la liste, par exemple :





Notez que lorsqu’aucun indice n’est indiqué à gauche ou à droite du symbole deux-points, Python prend par défaut tous les éléments depuis le début ou tous les éléments jusqu’à la fin respectivement.

On peut aussi préciser le pas en ajoutant un symbole deux-points supplémentaire et en indiquant le pas par un entier.





Finalement, on se rend compte que l’accès au contenu d’une liste fonctionne sur le modèle liste[début:fin:pas].

4.6 Fonction len()

L’instruction len() vous permet de connaître la longueur d’une liste, c’est-à-dire le nombre d’éléments que contient la liste. Voici un exemple d’utilisation :





4.7 Les fonctions range() et list()

L’instruction range() est une fonction spéciale en Python qui génère des nombres entiers compris dans un intervalle. Lorsqu’elle est utilisée en combinaison avec la fonction list(), on obtient une liste d’entiers. Par exemple :





La commande list(range(10)) a généré une liste contenant tous les nombres entiers de 0 inclus à 10 exclu. Nous verrons l’utilisation de la fonction range() toute seule dans le chapitre 5 Boucles et comparaisons.

Dans l’exemple ci-dessus, la fonction range() a pris un argument, mais elle peut également prendre deux ou trois arguments, voyez plutôt :





L’instruction range() fonctionne sur le modèle range([début,] fin[, pas]). Les arguments entre crochets sont optionnels. Pour obtenir une liste de nombres entiers, il faut l’utiliser systématiquement avec la fonction list().

Enfin, prenez garde aux arguments optionnels par défaut (0 pour début et 1 pour pas) :





Ici la liste est vide car Python a pris la valeur du pas par défaut qui est de 1. Ainsi, si on commence à 10 et qu’on avance par pas de 1, on ne pourra jamais atteindre 0. Python génère ainsi une liste vide. Pour éviter ça, il faudrait, par exemple, préciser un pas de -1 pour obtenir une liste d’entiers décroissants :





4.8 Listes de listes

Pour finir, sachez qu’il est tout à fait possible de construire des listes de listes. Cette fonctionnalité peut parfois être très pratique. Par exemple :





Dans cet exemple, chaque sous-liste contient une catégorie d’animal et le nombre d’animaux pour chaque catégorie.

Pour accéder à un élément de la liste, on utilise l’indiçage habituel :





Pour accéder à un élément de la sous-liste, on utilise un double indiçage :





On verra un peu plus loin qu’il existe en Python des dictionnaires qui sont également très pratiques pour stocker de l’information structurée. On verra aussi qu’il existe un module nommé NumPy qui permet de créer des listes ou des tableaux de nombres (vecteurs et matrices) et de les manipuler.

4.9 Minimum, maximum et somme d’une liste

Les fonctions min(), max() et sum() renvoient respectivement le minimum, le maximum et la somme d’une liste passée en argument.





Même si en théorie ces fonctions peuvent prendre en argument une liste de strings, on les utilisera la plupart du temps avec des types numériques (liste d’entiers et / ou de floats).

Nous avions déjà croisé min(), max() dans le chapitre 2 Variables. On avait vu que ces deux fonctions pouvaient prendre plusieurs arguments entiers et / ou floats, par exemple :





Attention toutefois à ne pas mélanger entiers et floats d’une part avec une liste d’autre part, car cela renvoie une erreur :





Soit on passe plusieurs entiers et / ou floats en argument, soit on passe une liste unique.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s