Programmation et langages (partie 1) : Programmation en Python

31
Programmation et langages (partie 1) : Programmation en Python I. Introduction. Python est un langage de programmation facile à apprendre (en tout cas en comparaison d’autres langages), avec des lignes de commande claires et concises. Il fonctionne sur tous les sys- tèmes d’exploitation (Windows, Mac et Linux), il est gratuit et est sous licence libre. Python est utilisé dans de nombreux domaines, particulièrement dans la data science (analyse de don- nées/statistiques), en machine learning (intelligence artificielle, en gros c’est lorsqu’on essaie d’apprendre aux machines à réfléchir en analysant des données), dans le développement Web et même en robotique. Des sites très connus ont été développés en Python comme par exemple, Dropbox, Youtube, Spotify, Reddit ou encore Pinterest. Depuis quelques années il fait parti des 3-4 langages les plus utilisés dans le monde. Python est un langage relativement ancien, il a été développé à la fin des années 80. Ce n’est pas du tout à cause du serpent que Python s’appelle comme ça, mais parce que son créateur hollandais Guido van Rossum était un fan des Monty Python (une série anglaise des années 70). Guido van Rossum s’est inspiré du langage ABC pour élaborer son propre langage, le Python qui a vu le jour en 1991. Il a reçu en 2002 le prix du logiciel libre pour Python. Bien sûr, depuis Python a été grandement amélioré au fil des années. Actuellement, on utilise au lycée la version 3.7 de Python et la 3.9 est disponible depuis la fin de l’année 2020, c’est cette version qu’il est donc conseillé d’installer. Programmer, c’est créer des programmes (suite d’instructions données à l’ordinateur) ! Un ordina- teur sans programme ne sait rien faire. Il existe différents langages qui permettent de programmer un ordinateur et le seul directement utilisable directement par le processeur est le langage machine (suite de 1 et de 0). Aujourd’hui plus personne ne programme en langage machine c’est bien trop compliqué. Les informaticiens utilisent des "instructions" (mots souvent en anglais) qui seront ensuites "traduites" en langage machine (ou en assembleur) par un programme spécialité qui assure cette traduction. Ce système de traduction s’appelle un interpréteur ou bien un compilateur. Python utilise un interpréteur pour être "traduit", il convertit le programme ligne par ligne en code machine alors qu’un compilateur prend tout le programme et le convertit en code objet qui est 1

Transcript of Programmation et langages (partie 1) : Programmation en Python

Page 1: Programmation et langages (partie 1) : Programmation en Python

Programmation et langages (partie 1) : Programmation en Python

I. Introduction.

Python est un langage de programmation facile à apprendre (en tout cas en comparaison d’autreslangages), avec des lignes de commande claires et concises. Il fonctionne sur tous les sys-tèmes d’exploitation (Windows, Mac et Linux), il est gratuit et est sous licence libre. Pythonest utilisé dans de nombreux domaines, particulièrement dans la data science (analyse de don-nées/statistiques), en machine learning (intelligence artificielle, en gros c’est lorsqu’on essaied’apprendre aux machines à réfléchir en analysant des données), dans le développement Webet même en robotique. Des sites très connus ont été développés en Python comme par exemple,Dropbox, Youtube, Spotify, Reddit ou encore Pinterest. Depuis quelques années il fait parti des3-4 langages les plus utilisés dans le monde.

Python est un langage relativement ancien, il a été développé à la fin des années 80. Ce n’est pasdu tout à cause du serpent que Python s’appelle comme ça, mais parce que son créateur hollandaisGuido van Rossum était un fan des Monty Python (une série anglaise des années 70). Guido vanRossum s’est inspiré du langage ABC pour élaborer son propre langage, le Python qui a vu lejour en 1991. Il a reçu en 2002 le prix du logiciel libre pour Python.

Bien sûr, depuis Python a été grandement amélioré au fil des années. Actuellement, on utiliseau lycée la version 3.7 de Python et la 3.9 est disponible depuis la fin de l’année 2020, c’est cetteversion qu’il est donc conseillé d’installer.

Programmer, c’est créer des programmes (suite d’instructions données à l’ordinateur) ! Un ordina-teur sans programme ne sait rien faire. Il existe différents langages qui permettent de programmerun ordinateur et le seul directement utilisable directement par le processeur est le langage machine(suite de 1 et de 0). Aujourd’hui plus personne ne programme en langage machine c’est bien tropcompliqué.

Les informaticiens utilisent des "instructions" (mots souvent en anglais) qui seront ensuites"traduites" en langage machine (ou en assembleur) par un programme spécialité qui assure cettetraduction. Ce système de traduction s’appelle un interpréteur ou bien un compilateur. Pythonutilise un interpréteur pour être "traduit", il convertit le programme ligne par ligne en codemachine alors qu’un compilateur prend tout le programme et le convertit en code objet qui est

1

Page 2: Programmation et langages (partie 1) : Programmation en Python

généralement stocké dans un fichier, c’est le ce qui est utilisé si vous programmer en C, par exem-ple.

Il existe 2 grandes familles de langages de programmation :

• Les langages de bas niveau qui sont très complexes à utiliser, car très éloignés du langagenaturel. On dit que ce sont des langages "proches de la machine", en contrepartie ils per-mettent de faire des programmes très rapides à l’exécution. L’assembleur est le langage debas niveau (on fera une introduction à ce langage dans l’année). Certains "morceaux" deprogrammes sont écrits en assembleur encore aujourd’hui.

• Les langages de haut niveau qui eux sont plus "faciles" à utiliser, car plus proches du langagenaturel comme par exemple Python, C++, Javascript, PHP. . . ce qui facilite l’écriture desprogrammes.

En NSI, notre langage de prédilection sera Python (nous aborderons aussi un tout petit peud’autres langages).

Un programmeur combine des constructions intellectuelles semblables à celles des mathémati-ciens, des ingénieurs et des scientifiques d’une manière générale. Il utilise des langages formelspour décrire des algorithmes, comme les mathématiciens pour décrire des raisonnements. Ilconçoit des dispositifs et assemble des composants pour réaliser des mécanismes dont il évalueleurs performances, comme les ingénieurs. Enfin, il observe le comportement de systèmes com-plexes, crée des modèles et teste des prédictions, comme tout scientifique.

L’activité essentielle d’un programmeur consiste à résoudre des problèmes.

En classe, nous utiliserons l’IDE (environnement de développement intégré) Pyzo pour écrire etexécuter nos programmes (du moment qu’un interpréteur Python est installé). Ce n’est pas laseule façon de coder en Python mais cet IDE a pour avantage d’être assez léger et très facile àprendre en main. On peut utiliser d’autres logiciels pour coder en Python, comme par exempleVisual Studio Code qui est un éditeur de code (pas un IDE) très polyvalent, gratuit et disponiblepour tous les OS et qui permet de faire autre chose que programmer en Python (contrairement àPyzo), ou encore l’IDE Pycharm qui est une référence mais qui est plus délicat à utiliser.

Il est conseillé d’installer Anaconda (distribution libre et open source qui permet d’avoir de nom-breux modules et paquets déjà installées : anaconda.com puis Pyzo Pyzo chez soi pour pouvoirécrire les programmes et faire les projets qui seront à rendre dans l’année. Sinon vous pouvezaussi simplement télécharger Python https://www.python.org/ puis Pyzo et installer au fur et àmesure les modules qui nous seront utiles (nous verrons comment le faire en classe).

Pour "dépanner" et faire des essais sans rien installer, on peut utiliser en ligne le site (avec inscrip-tion gratuite) : repl.it (il faut ensuite choisir un projet en Python). L’avantage de cette solutionc’est qu’on peut faire du Python sur une simple tablette (un clavier physique est tout de mêmevivement conseillé). On peut aussi utiliser le très bon site : pythontutor qui a pour avantaged’exécuter pas à pas les programmes, ce qui permet de comprendre ce qui se passe exactementlors de l’exécution.

II. Prise en main (rapide) de Pyzo.

Pyzo est un IDLE : environnement de développement intégré. Si vous avez installé Anaconda, unautre IDLE a été automatiquement installé, il s’agit de Spyder. Les programmes de mathématiques

2

Page 3: Programmation et langages (partie 1) : Programmation en Python

de lycée faisant déjà référence à Pyzo depuis plusieurs années, nous travaillerons avec Pyzo (etaussi parce que Pyzo est très simple à utiliser).

On peut fermer les fenêtres "Sources structure" et "File browser" qui ne vont pas nous apportergrand-chose et conserver 2 grandes fenêtres : celle de gauche qui est celle de l’éditeur (là où onva taper les programmes) et celle de droite qui est celle de la console (ou du Shell), là où lesprogrammes vont s’exécuter (en mode "texte").

On peut alors taper des commandes directement dans le shell pour qu’elles s’exécutent immé-diatement (en validant par la touche <Entrée>) ou les taper dans l’éditeur mais dans ce cas, ilfaudra cliquer sur Exécuter > Exécuter le contenu de l’onglet courant (ou utiliser la combinaisonde touches <Control> + <E>) pour que les lignes tapées soient interprétées et s’exécutent dans leshell.

Exemple :

Tapez puis validez dans le shell :

[1]: print("Hello world")

Hello world

Allez dans l’éditeur puis tapez le même texte et validez avec la touche <Entrée>. Cette fois ilne se passe rien, le curseur retourne simplement à la ligne. Utilisez la combinaison de touches(<Control> + <E>) (ou cliquez sur la touche et le (mini) programme s’exécute alors dans la fenêtredu shell et affiche Hello world (et il prévient qu’il exécute le fichier tmp 1).

Remarque :

3

Page 4: Programmation et langages (partie 1) : Programmation en Python

À partir du moment où on écrit un programme dans l’éditeur, il faut prendre l’habitude de lesauvegarder IMMÉDIATEMENT. Il ne faut pas attendre d’avoir tapé 50 lignes pour penser àsauvegarder, sinon en cas de plantage de Pyzo ou de coupure de courant, tout le travail déjà faitest à refaire entièrement ! Dès que vous sauvegardez, le nom du fichier n’est plus "tmp x", il estremplacé par le nom que vous avez choisi suivi de l’extension .py.

III. Notion de variables et de types "simples".

1. Les types numériques.

Un ordinateur est "une machine automatique de traitement de l’information, obéissant à desprogrammes formés par des suites d’opérations arithmétiques et logiques". (Définition du petitLarousse)

Qui dit "traitement de l’information", dit donc données à manipuler. Un programme passe sontemps à traiter des données. Pour pouvoir traiter ces données, l’ordinateur doit les placer danssa mémoire vive, la RAM (Random Access Memory). Pour simplifier, nous dirons que la RAMse compose de "cases" dans lesquelles l’ordinateur range les données (une donnée par case) qu’ildoit utiliser et chaque case a une adresse (ce qui permet au processeur de savoir où sont rangéesles données). Ces notions seront développées et approfondies au cours de l’année.

Une variable est un symbole qui permet d’associer un nom à une valeur. On peut voir une vari-able comme un "conteneur", donc une sorte de boite, utilisé par un programme pour stocker del’information, cette boite étant elle même stockée dans la RAM qui peut être comparée à une sortede grande étagère. On dit qu’elle est "variable", car c’est une valeur qui peut changer pendant ledéroulement du programme.

Une variable est constituée de 2 parties : - Une valeur, c’est la donnée qu’elle stocke (par exempleun nombre entier, une chaine de caractères, etc.). - Un nom qui permet de la reconnaître et ainsinous n’aurons besoin de connaître l’adresse mémoire pour travailler avec cette variable. Ce nompeut être un seul caractère (comme x en maths) mais aussi une suite de caractères et de chiffres.

Le nom d’une variable doit commencer par une lettre et ne doit contenir que des caractèresalphanumériques courants. Les caractères spéciaux ne sont pas autorisés, tout comme les espaceset il vaut mieux éviter les caractères accentués. Pour respecter les règles d’écriture en Python, lesnoms de variables doivent être en minuscules.

En pseudo-code, on peut par exemple noter : variable <- valeur, ce qui signifie que valeurdevient le contenu de variable. On dit qu’on affecte la valeur à la variable. En Python, c’estl’opérateur = qui est utilisé pour l’affectation et non la flèche comme notée précédement.

Par exemple, si on tape (et qu’on valide) dans la console :

[2]: nombre1 = 10

On définit alors la variable nommée "nombre1" à qui on affecte la valeur 10 (nombre entier).

Si maintenant on tape nombre1 directement dans la console de Pyzo (et qu’on valide), le shell vanous renvoyer la valeur de cette variable, c’est à dire 10.

Une variable peut "référencer" un nombre entier, comme dans l’exemple précédent mais elle peutaussi référencer un nombre décimal (à virgule) et bien d’autres types de valeurs que nous allons

4

Page 5: Programmation et langages (partie 1) : Programmation en Python

voir peu à peu.

En programmation, les données qu’on va manipuler avec un langage (Python ou autre) sontclassées par "type". Un "type" de données pour un langage de programmation définit la naturedes valeurs que peut prendre une donnée et les manipulations qu’on va pouvoir faire sur ces don-nées : on va pouvoir effectuer les mêmes opérations sur chaque donnée d’un même type et desopérations différentes sur différents types de données.

Les nombres entiers sont appelés "integer" en anglais et abrégés en "int" dans Python. C’est l’undes trois types numériques natifs en Python. Dans un premier temps par soucis de simplifier,nous allons associer les nombres décimaux (à virgule) à ce qu’on appelle en français des nombres"flottants" ou "float" en anglais. Nous verons la différence plus tard entre ces nombres et les nom-bres décimaux vus en mathématiques depuis des années, pour l’instant nous les assimilerons àdes décimaux. Le type de ces nombres en le type float en Python, c’est le 2ème type numérique.

Remarques : - Il est possible de connaitre le type d’une variable à l’aide de la fonctiontype(nom_variable). - Il existe un 3ème type numérique qui est le type "complex" pour les nom-bres complexes (qui seront vus en terminale par les élèves qui choisissent maths expertes) maisnous ne l’utiliseront pas en NSI.

[3]: x = 2.3type(x)

[3]: float

[4]: y = 12type(y)

[4]: int

Attention, la virgule est remplacée par le ".", si vous utilisez une virgule, le shell ne renverra pasune erreur mais interprétera cette saisie comme étant d’un autre type qu’un nombre flottant (çaaussi nous allons le voir plus tard dans l’année).

Remarque : Contrairement à de nombreux langages, on n’a pas besoin de déclarer la variable etson type avant de l’utiliser en Python. On dit que Python est un langage typé dynamiquement,c’est à dire que les variables ne sont pas typées à l’avance, leur type est défini en fonction de lavaleur qu’elles contiennent et peut changer au fur et à mesure de l’exécution du programme.

2. Opérations sur les types numériques.

a. Calculs "de base".

Python est capable d’effectuer des opérations mathématiques "de base". On peut étendre ses ca-pacités avec des modules dont nous verrons plus tard l’utilisation.

Les signes utilisés pour les différentes opérations en Python sont : +, - , * (multiplication), / (divi-sion), // (quotient d’une division euclidienne), % (modulo c’est à dire reste d’une division eucli-dienne) et ** pour calculer la puissance d’un nombre en utilisant.

Remarques :

5

Page 6: Programmation et langages (partie 1) : Programmation en Python

• a / b retourne un nombre de type float même si a et b sont des entiers et que a est unmultiple de b alors que // retourne un nombre entier si a et b sont entiers.

• Python respecte les priorités opératoires et les parenthèses peuvent être utilisées pour fairedes regroupements

Exemple :

[5]: 2**3

[5]: 8

[6]: 1 + 3.5 * 4 #le résultat est de type float

[6]: 15.0

[7]: 22 % 5

[7]: 2

[8]: 22 // 5 #le résultat est de type int

[8]: 4

[9]: 20 / 5 #le résultat est de type float

[9]: 4.0

[10]: 12.3 - (7.2 * 4)

[10]: -16.5

Exercices : 1. Dans l’éditeur, définir 2 variables a et b de type numérique puis une 3ème nommée"resultat" qui ajoute le contenu des 2 variables a et b. Testez votre programme en utilisant laconsole pour vérifier la valeur référencée par la variable "resultat".

2. Quelle sera la valeur de a après l’exécution du script ci-dessous ?

[ ]: a = 5a = a + 1a = a * 2

3. a et b sont deux variables de type numérique. En utilisant une variable c, écrire un script quipermet "d’inverser" les valeurs de a et de b (celle de a devient celle de b et réciproquement).

Remarques :

• Attention, en programmation une égalité du type "a = a + 1" n’est pas du tout la même qu’enmathématiques. Avec ces égalités, il faut toujours commencer par évaluer l’expression setrouvant à droite du signe égal, c’est cette valeur qui est ensuite stockée dans la variable

6

Page 7: Programmation et langages (partie 1) : Programmation en Python

située à gauche du signe =. Ici, cette notation signifie que la valeur de la variable a doit êtreremplacée par la valeur de a à laquelle on ajoute 1.

• Notation : En Python, l’écriture a = a + 10 est équivalent à a += 10 ou encore a = 3 * aest équivalent à a *= 3.

b. Calculs plus complexes.

Il est aussi possible d’effectuer des calculs mathématiques plus complexes utilisant, par exemple,des racines carrées ou des fonctions trigonométriques mais ce n’est pas faisable nativement dansPython, pour cela il faut utiliser des "modules" qui permettent d’étendre les possiblités de base dulangage (c’est un fichier écrit généralement en Python qui regroupe des fonctions et qui, une foisimporté, permet d’accéder à ces fonctions et ainsi étendre les possibilités du langage).

Pour utiliser des fonctions mathématiques plus avancées, il est nécessaire d’utiliser le modulemath. Comme pour n’importe quel module, il existe différentes méthodes pour l’importer. Danstous les cas, il faut ajouter une ligne au début du programme.

Voici les différentes façon de faire.

[ ]: from math import * #on importe toutes les fonctions du module (pratique mais à␣↪→éviter)

a = sqrt(5) #pour calculer la racine carrée de 5

Dans la pratique, plutôt que de charger toutes les fonctions d’un module en une seule fois, il estconseillé d’utiliser les méthodes suivantes :

[ ]: from math import sqrt #on importe juste la fonction dont on a besoin, ici racine␣↪→carrée

a = sqrt(5) #pour calculer la racine carrée de 5

[ ]: import math #méthode recommandée : on importe le module mais pas les fonctionsa = math.sqrt(5) #il faut préciser le nom du module pour calculer la racine␣

↪→carrée de 5

[ ]: import math as mt #on renomme un module (pour que ce soit + rapide à utiliser␣↪→ensuite)

a = mt.sqrt(5) #il faut préciser le "nouveau" nom du module pour calculer la␣↪→racine carrée de 5

Attention, Python ne calcule que des valeurs approchées et ne peut pas effectuer des calculs avecdes valeurs exactes comme le fait la calculatrice. De plus, certaines valeurs décimales données parPython sont parfois des valeurs approchées alors que ce devrait être des valeurs exactes (nousverrons la raison dans un prochain chapitre).

Exemple :

[11]: 0.1 + 0.2

[11]: 0.30000000000000004

7

Page 8: Programmation et langages (partie 1) : Programmation en Python

Remarque : Nous aurons l’occasion de croiser différents modules dans l’année, pour l’instantnous n’aurons besoin que du module math et du module random qui permet de manipuler etgénérer des nombres pseudo-aléatoires.

3. Les chaînes de caractères : le type str.

a. Généralités.

Les variables peuvent aussi référencer des suites de caractères, qu’on appelle "chaînes de carac-tères". Le type de ces variables est le type "string" (chaîne en anglais), abrégé par str en Python.Elles peuvent être écrites entre guillemets simples (‘. . . ’) ou entre guillemets (". . . ") sans distinc-tion pour attribuer une valeur de type str à une variable. Les caractères spéciaux sont "protégés"avec des barres obliques inverses ( : backslash).

Exemple :

[ ]: nom = 'Touille'prenom = "Sacha"loisir1 = "l'informatique" #si on veut utiliser un caractère ' dans ce cas,␣

↪→mettre le str entre ""loisir2 = 'l\'informatique' #ou bien utiliser le caractère \ pour "échapper" le␣

↪→guillemet '

Attention, il ne faut pas oublier les " " ou les ’ ’ sinon Python ne comprendra pas que c’est unechaîne de caractères. Si on tape ch=bonjour Python va vouloir attribuer la valeur de variablebonjour à la variable ch. Soit bonjour a déjà été défini comme une variable et Python ne renverrapas d’erreur soit bonjour n’a pas déjà défini et dans ce cas Python va renvoyer une erreur maisdans les 2 cas, ch ne reférencera pas la chaîne de caractères "bonjour" (sauf bien sûr si "bonjour" aété affecté à a variable nommé bonjour).

Remarque :

La fonction print() affiche les chaînes en retirant les guillemets et en affichant les caractères spéci-aux qui étaient protégés par une barre oblique inverse :

[12]: loisir2 = 'l\'informatique'print(loisir2)

l'informatique

b. Quelques opérations sur les chaînes à connaître.

Le signe + qui a été vu pour ajouter des nombres sert aussi à "coller" des chaînes de caractères. Ondit alors qu’on concatène deux chaînes de caractères.

Exemple :

[13]: ch1 = 'bonjour'ch2 = 'le monde'ch3 = ch1 + ch2

8

Page 9: Programmation et langages (partie 1) : Programmation en Python

[14]: ch3

[14]: 'bonjourle monde'

Remarque : il n’est pas possible de concaténer un nombre et une chaîne de caractères, d’ailleursPython le dit lui-même, il suffit de lire le message qu’il indique si on essaye. Il faut d’ailleurs pren-dre l’habitude de chercher à comprendre les messages d’erreurs renvoyés par Python, il donnesouvent une explication (en anglais) qui permet de comprendre et retrouver ses erreurs.

[15]: ch1 = 'toto'nb = 2ch1 = ch1 + nbch1

---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-15-02abf07151a5> in <module>

1 ch1 = 'toto'2 nb = 2

----> 3 ch1 = ch1 + nb4 ch1

TypeError: can only concatenate str (not "int") to str

On peut aussi utiliser le signe * entre un nombre entier (int) et un str pour répéter une chaîne decaractère. Par contre les signes - et / ne sont pas utilisés sur les chaînes de caractères.

Exemple :

[16]: ch1 = 'Bonjour'ch1 = ch1 * 3

[17]: ch1

[17]: 'BonjourBonjourBonjour'

On peut aussi noter ch1 = 3 * ch1 pour obtenir le même résultat.

On peut "transformer" un nombre (int ou float) en chaîne de caractères avec la fonction str() etinversement (quand cela est possible) avec les fonctions int() ou float().

Exemple :

[18]: a = str(5)type(a)

[18]: str

9

Page 10: Programmation et langages (partie 1) : Programmation en Python

[19]: b = "12"print(type(b))b = int(b)print(type(b))

<class 'str'><class 'int'>

[20]: c = float("2.35")type(c)

[20]: float

Exercices : 1. On donne le code :

[ ]: a = "bonjour"b = "tout le monde"

Comment définir une variable c en fonction de a et de b qui contiendra la chaîne de caractères :"bonjour tout le monde" ?

2. On donne le code :

[ ]: a = "Bonjour"b = "Sacha"a += b

Quelle est la valeur de la variable a ?

On peut connaître la longueur d’une chaîne de caractères en utilisant la fonction len().

Exemple :

[ ]: ch = 'Coucou'len(ch)

Remarque : Le caractère (antislash) est dit "caractère d’échappement" car, placé devant un autrecaractère, il permet d’annuler son sens spécial. Par exemple,pour un guillemet, il va donc annulerla fonction de délimiteur d’une chaîne de caractères :

[21]: print("Il m'a dit \"Bonjour\" !")

Il m'a dit "Bonjour" !

peut également être utilisé pour donner un sens particulier à caractère ; par exemple, \n symboliseun retour à la ligne, et \t symbolise une tabulation.

[22]: print("Hello\nWorld !")

HelloWorld !

10

Page 11: Programmation et langages (partie 1) : Programmation en Python

c. Indices d’une chaîne de caractères. On peut accéder à chaque caractère d’une chaîne de car-actères grâce à son indice qui est un nombre entier qui va de 0 (pour le premier caractère) à n-1(pour le dernier). On peut accéder au caractère d’indice i en tapant : ch[i].

Attention :

• On peut accéder à un caractère d’une chaîne de caractères mais pas le modifier.

• le 1er caractère d’une chaîne de caractères a pour indice 0 et non pas 1.

• Il ne faut pas confondre l’indice du caractère et sa position dans la chaîne (il y a un décalagede 1 puisqu’on commence à 0).

Exemples :

[23]: ch1 = 'Sacha'ch2 = 'Touille'ch1[2]

[23]: 'c'

[24]: ch2[3]

[24]: 'i'

[25]: len(ch1)

[25]: 5

On peut aussi accéder à une suite de caractères d’une chaîne de caractères avec la notation ch[i:j]qui sera formée des caractères de la chaîne ch de l’indice i (inclus) à l’indice j (exclu). Attention jest exclu. On dit alors qu’on récupère une tranche (ou slice en anglais) de la chaîne de caractères.

Exemple :

[26]: ch1[1:4]

[26]: 'ach'

Remarque : On peut aussi taper ch[:j] au lieu de ch[0:j] et de même ch[i:] au lieu dech[i:n-1].

[27]: ch1[:3]

[27]: 'Sac'

[28]: ch1[2:]

[28]: 'cha'

Exercices : On donne le code :

11

Page 12: Programmation et langages (partie 1) : Programmation en Python

[ ]: ch1 = 'hello'ch2 = 'l\'univers'

Que doit-on taper sur la 3ème ligne pour que Python affiche le caractère qui est en dernière posi-tion de la chaîne b ?

On peut aussi repérer un caractère par un indice négatif. Dans ce cas, le dernier caractère d’unechaîne de caractères notée ch a pour indice -1, l’avant dernier a pour indice -2, . . . et le 1er a pourindice -len(ch).

Exemple :

[29]: ch = 'abcdef'ch[-1]

[29]: 'f'

4. Les booléens.

Les variable de type booléen (bool en Python) sont des variables qui ne peuvent prendre quedeux valeurs : True et False (attention à bien respecter les majuscules).

Pour stocker un booléen dans une variable, il ne faut pas utiliser de guillemets sinon Python vales interpréter comme des chaînes de caractères. Les valeurs booléennes sont très utilisées en pro-gramamtion et comme nous allons le voir dans les prochains paragraphes, elles sont notammenttrès utiles pour valider ou invalider un test.

Exemple :

[30]: a = Truetype(a)

[30]: bool

[31]: b = 5 < 10print(b)type(b)

True

[31]: bool

[32]: c = 5 > 10print(c)type(c)

False

[32]: bool

12

Page 13: Programmation et langages (partie 1) : Programmation en Python

Remarque : Le mot "booléen" vient de George Boole (1815-1864) qui était un logicien, mathé-maticien et philosophe britannique. Il est le créateur de la logique moderne que l’on appelleaujourd’hui algèbre de Boole.

Nous verrons dans la suite du chapitre d’autres types plus complexes que les 3 types évoqués danscette partie. Pour ceux qui voudraient en savoir plus sur les types natifs en Python, vous pouvezregarder : types natifs Python mais attention certaines notions abordées dépassent largement lecadre de ce début d’année et même parfois le cadre du programme de NSI.

IV. Les fonctions.

1. Définition et généralités.

Une fonction est un bloc de code qui a un nom et qui est formé par un ensemble d’instructionscréées pour effectuer une tâche précise qui pourra être répétée autant de fois que l’on veut dansle programme (on dit qu’on appelle une fonction) sans avoir à la réécrire à chaque fois. Elles per-mettent de décomposer un programme complexe en une série de sous-programmes plus simpleset rendent ainsi le code plus lisible.

Le programme principal désigne le code qui est exécuté lorsqu’on lance le script Python, c’est-à-dire toute la suite d’instructions en dehors des fonctions. En général, dans un script Python, onécrit d’abord les fonctions puis le programme principal.

En mathématiques, une fonction est un procédé qui permet d’associer à un nombre, un uniqueautre nombre appelé image. En quelque sorte on "rentre" un nombre x dans la fonction et elle"renvoie" un autre nombre (qui peut d’ailleurs être le même) qui est appelé l’image de x. Commesouvent en informatique, la notion mathématique n’est pas loin et une fonction en informatiqueest aussi basée sur cette idée :

Le langage utilisé n’est pas le même qu’en mathématiques. La variable "rentrée" dans la fonc-tion est appelée paramètre ou argument (il peut y avoir plusieurs valeurs et donc plusieursparamètres).

Pour définir une fonction en Python, on utilise cette syntaxe :

[ ]: def ma_fonction(valeur1,valeur2,..): #le caractère : est obligatoire tout comme␣↪→les parenthèses

instruction1instruction2... #on parle de bloc d'instructions et le décalage de 4 pixels appelé␣

↪→indentation est obligatoirereturn valeur #valeur renvoyée par la fonction

Le mot def est un mot clé du langage Python. Il permet de définir le nom de la fonction, ici lafonction se nomme nom_fonction. Il est possible qu’une fonction n’ait pas besoin de paramètres

13

Page 14: Programmation et langages (partie 1) : Programmation en Python

pour fonctionner mais les parenthèses sont tout de même obligatoires (il n’y a rien dedans dansce cas).

La première ligne se termine obligatoirement par le signe ":".

Quand on appuie sur Entrée après avoir mis ce signe, le curseur n’est plus aligné avec le reste dutexte, il est décalé de quelques caractères (même si on peut paramétrer le nombre de caractères, ilfaut laisser ce décalage à 4 caractères). Ce décalage est appelé indentation. L’indentation permetde définir ce qu’on appelle un bloc de code ou bloc d’instructions (même s’il n’y a qu’une seuleinstruction).

Dans l’exemple ci-dessus, l’indentation nous permet de savoir que "instruction1", "instruction2". . . et "return valeur" constituent un bloc de code et ce bloc correspond au contenu de la fonc-tion. ma_fonction Tout ce qui n’est pas indenté ne fera pas parti de cette fonction. On peutensuite continuer le programme (ou commencer une autre fonction) en repartant du bord gauchede l’écran sans indentation. Il est recommandé de sauter 2 lignes entre 2 fonctions pour que lecode soit plus lisible.

Remarque : Pour indenter du code, on peut utiliser la touche <Tab> (tabulation).

Par exemple, pour faire le parallèle avec une fonction mathématique, on va définir une fonctionqui calcule l’image d’un nombre x par la fonction (mathématique cette fois) qui à tout réel x associele nombre 3x – 4 :

[34]: def f(x): #ça ressemble à la définition mathématique en utilisant ces lettresy = 3 * x - 4 #on calcule l'image de x et on stocke le résultat dans la␣

↪→variable yreturn y #la fonction renvoie la valeur de y

Pour renvoyer un résultat, le corps de la fonction doit contenir l’instruction return. Il peut y avoirplusieurs instructions return dans une même fonction mais chacune interrompt l’exécution dela fonction en renvoyant un résultat dans le programme principal, il faut donc faire attention à lafaçon de les utiliser.

Une fonction qui ne renvoie pas de valeur (pas de return) est appelée une procédure, mais Pythonne fait pas la différence entre les deux (contrairement à certains langages), nous utiliserons, ducoup, toujours le mot fonction.

Attention, il ne faut pas confondre afficher et renvoyer une valeur.

L’utilisation de la fonction print() que nous avons déjà croisée affiche uniquement quelque choseà l’écran mais ne renvoie aucune valeur dans le programme.

Par exemple :

[33]: def ma_fonction_affiche(x):print(x + 1)

def ma_fonction_retourne(x):return x + 1

14

Page 15: Programmation et langages (partie 1) : Programmation en Python

a = ma_fonction_affiche(5) #on appelle la fonction et on affecte son résultat à␣↪→la variable a

b = ma_fonction_retourne(5)

print("a =", a)print("b =", b)

6a = Noneb = 6

La fonction ma_fonction_affiche a affiché 6 (c’est le 1er 6 qui apparaît) par contre, elle ne retourneaucune valeur et donc la variable a ne recevant aucune valeur de la part de la fonction, vaut None(c’est à dire rien). Par contre la fonction ma_fonction_retourne() n’affiche rien (il n’y a pas de 6affiché) mais elle renvoie une valeur et la variable b récupère cette valeur. Contrairement à lavariable a, la variable b ne vaut pas None, mais bien 6.

La majorité des fonctions n’affichent rien, mais renvoient une valeur qui pourra donc être affectéeà une variable pour être ensuite utilisée dans le programme. Cette différence n’est pas simple àcomprendre, mais ça viendra peu à peu. . .

En reprenant l’exemple de la fonction f :

[35]: f(5)

[35]: 11

L’interpréteur a renvoyé la valeur 11.

[36]: a = f(5)

La valeur de f(5) est affectée à la variable a, rien n’est affiché. On peut vérifier :

[37]: a

[37]: 11

Remarques :

• Depuis le début de ce cours, on a utilisé des fonctions sans avoir expliqué ce que c’était : lesfonctions print() ou encore type(), ou str(). . .

• Juste après avoir défini une fonction, on doit normalement placer une "docstring" (chaînede documentation, en français). C’est une chaîne de caractères qui permet de documenter lafonction. Si on précise une docstring dans une fonction, la fonction help(fonction) permettraau shell d’afficher la chaîne correspondant à la docstring. On utilise toujours des guillemetstriples """ autour des docstrings.

Exemple :

15

Page 16: Programmation et langages (partie 1) : Programmation en Python

[38]: def fonction_inutile():"""fonction qui ne sert à rienne prend aucun paramètrene retourne rien"""return #elle ne retourne rien...

[39]: help(fonction_inutile)

Help on function fonction_inutile in module __main__:

fonction_inutile()fonction qui ne sert à rienne prend aucun paramètrene retourne rien

Exercices :

1. Coder en Python la fonction f qui prend en paramètre un nombre x et qui renvoie (pas quiaffiche) l’image de x par la fonction (mathématique) qui à x associe 3x2− 2x + 5. Que faut-iltaper dans l’interpréteur pour obtenir l’image de 3 ?

2. On donne la fonction :

[ ]: def f(a,b):return a**2 - b**2

Que va retourner f(2, 3)?

3. On donne la fonction :

[ ]: def name(ch):print('Hello', ch)

ch2 = name('Toto')

Quelle est la valeur de ch2 ? Qu’affiche name('Sacha') ? Qu’affiche name(The Best) ?

Remarque : Il est possible de passer un ou plusieurs argument(s) de manière facultative et de leurattribuer une valeur par défaut avec la syntaxe : def fct(arg = val):. Par exemple :

[40]: def fct(x = 0, y = 0, z = 0):return x + y + z

print(fct())#on ne passe pas de paramètres lors l'appel de la fonction#la fonction va prendre les arguments par défaut donc 0, 0 et 0.

print(fct(1, 2, 3))#on passe des paramètres lors de l'appel de la fonction

16

Page 17: Programmation et langages (partie 1) : Programmation en Python

print(fct(1, 2))#on passe 2 paramètres lors de l'appel de la fonction#le dernier reste à 0

print(fct(z = 8, x = 1))#on passe 2 paramètres en précisant lesquels lors de l'appel de la fonction#le dernier (y non précisé) reste à 0

0639

2. Deux fonctions particulières.

a. La fonction print()

Nous avons rencontré la fonction print() qui affiche une chaîne de caractères dès le début ducours. En fait cette fonction affiche l’argument qu’on lui passe en paramètre (entre parenthèses)et un retour à ligne. Ce retour à ligne supplémentaire est ajouté par défaut. Si toutefois, on neveut pas afficher ce retour à la ligne, on peut utiliser l’argument end : print('Coucou', end ='') annulera le retour à la ligne.

La fonction print() peut également afficher le contenu d’une variable quel que soit son type voirede plusieurs variables en les séparant par des virgules :

[41]: ch1 = 'Bonjour'x = 2print(ch1, 'Sacha, j\'ai', x, 'nouveaux jeux vidéo')

Bonjour Sacha, j'ai 2 nouveaux jeux vidéo

On remarque que par défaut le shell ajoute automatiquement des espaces (ce n’est pas le cas surMacOs) et on peut là-aussi changer ce comportement en utilisant l’argument sep (séparateur)utilisé pour indiquer avec quel caractère séparer ce qui est affiché (on peut séparer avec ce qu’onveut, pas forcément des espaces) :

[42]: print(ch1, 'Sacha, j\'ai', x, 'nouveaux jeux vidéo', sep = '')

BonjourSacha, j'ai2nouveaux jeux vidéo

[43]: print(ch1,'Sacha, j\'ai', x, 'nouveaux jeux vidéo', sep = ' ')

Bonjour Sacha, j'ai 2 nouveaux jeux vidéo

[44]: print(ch1, 'Sacha, j\'ai', x, 'nouveaux jeux vidéo', sep = '..')

Bonjour..Sacha, j'ai..2..nouveaux jeux vidéo

17

Page 18: Programmation et langages (partie 1) : Programmation en Python

Il y a d’autres façons d’écrire du texte (formatage de texte) avec Python en utilisant la fonctionprint() mais nous ne l’aborderons pas dans ce chapitre.

b. La fonction input()

De nombreux programmes nécessitent à un moment ou l’autre une intervention de l’utilisateur(entrée d’un paramètre au clavier, clic de souris, etc.). Dans un script simple en mode texte (commeceux que nous avons créés jusqu’à présent), la méthode la plus simple consiste à employer la fonc-tion input(). Cette fonction provoque une interruption dans le programme en cours d’exécution.L’utilisateur est invité à entrer des caractères au clavier et à terminer avec la touche . Lorsquecette touche est enfoncée, l’exécution du programme se poursuit, et la fonction fournit en retourune valeur correspondant à ce que l’utilisateur a entré. Cette valeur peut alors être assignée à unevariable quelconque.

La fonction input() retourne une chaîne de caractères donc même si l’utilisateur veut saisir unnombre, Python comprendra que c’est une chaîne de caractères (mais on peut ensuite le "trans-former" avec int() ou float() en nombre).

Exemple :

[ ]: nom = input('Quel est ton nom ? ') #le paramètre 'Quel est ton nom ? ' est un␣↪→texte affiché à l'écran

#la variable nom va contenir la chaîne de caractères retournée par la fonction␣↪→input()

print('Bonjour', nom, 'content de te voir')

Remarque : Nous éviterons d’utiliser cette fonction input qui peut provoquer des confusions avecl’utilisation de paramètres d’une fonction.

3. Espace et portée des variables.

Dans un programme, on distingue différents espaces :

• un espace global (le programme principal) dans lequel des variables dites globales sontdéfinies, ce sont des variables dont la portée s’étend à tout le programme, c’est à dire qu’elleest visible dans le programme principal ainsi que dans toutes les fonctions.

• un espace local pour chaque fonction distinct des autres espaces dans lequel des variablesdites locales sont définies.

Lorsqu’une variable est déclarée dans le programme principal, elle est visible dans celui-ci ainsique dans toutes les fonctions. On a vu qu’on parlait de variable globale.

Il est très important lorsque l’on manipule des fonctions de connaître la portée des variables (scopeen anglais), c’est-à-dire savoir là où elles sont visibles. Les variables créées au sein d’une fonctionne sont pas visibles à l’extérieur de celle-ci, elles sont locales à la fonction. L’espace local d’unefonction contient les paramètres qui lui sont passés et les variables définies dans le corps de lafonction. Ces variables locales n’existent qu’à l’intérieur de la fonction et seulement pendantson utilisation.

Contrairement aux variables locales qui ne sont utilisables que dans la fonction dans laquelle ellessont déclarées, les variables globales peuvent être utilisées par n’importe quelle fonction du

18

Page 19: Programmation et langages (partie 1) : Programmation en Python

programme mais, attention, une variable globale ne sera pas modifiée par la fonction.

Exemples :

[45]: def ma_fonction(x):y = x + 1 #y est une variable locale (définie uniquement dans la fonction)return y

a = 5 #a est une variable globale (définie dans le programme principal)print(y) #déclenche une erreur car b n'est pas définie dans le programme␣

↪→principal

12

[46]: def f(x):b = a + 1 #b est une variable locale qui utilise a qui est une variable␣

↪→globaleprint('b =', b) #on affiche la valeur de b, on constate que Python a bien␣

↪→fait 2+1return x**2

a = 2 #a est une variable globaleprint('l\'image de 4 est :', f(4)) #l'appel f(4) affiche la valeur de b puis␣

↪→retourne le carré de 4

b = 3l'image de 4 est : 16

La variable a n’est pas déclarée dans la fonction mais Python "reconnaît" qu’une variable a estdéclarée dans le programme principal, il va alors utiliser cette valeur pour obtenir la valeur àstocker dans b. Pour autant b est une variable locale qui n’existe que dans la fonction et qu’onne peut donc utiliser ni dans le programme principal ni dans une autre fonction (voir l’exempleci-dessous).

[47]: def f(x):a = 2 #a est une variable locale bien qu'il soit déclaré comme variable␣

↪→globale en dehors de fb = a + 1 #b est une variable localeprint('b =',b) #on affiche la valeur de b, on constate que Python a bien␣

↪→fait 2+1return x + b

a = 5 #a est une variable globaleprint(f(4))

b = 37

On constate que b a bien été calculé à partir de la valeur a = 2 (variable locale) et non a = 5 (variable

19

Page 20: Programmation et langages (partie 1) : Programmation en Python

globale).

Pour éviter les confusions, il est donc vivement recommandé de ne pas utiliser les mêmes nomspour les variables locales et les variables globales.

Par défaut, on ne peut pas modifier la valeur d’une variable globale de type numérique, booléenou str à l’intérieur d’une fonction . Même si ce n’est pas recommandé, il existe tout de même unefaçon de le faire quand même. Si on doit modifier la valeur d’une variable globale dans unefonction, on va déclarer dans la fonction la variable à modifier comme étant une variable globale.Pour que la variable soit considérée comme globale par Python dans une fonction, on utilise lemot-clé : global suivi du nom de la variable. On le place juste après la définition de la fonction(en-dessous de la docstring, s’il y en a une), cela permet de retrouver rapidement les variablesglobales sans parcourir tout le code (c’est une simple convention).

Exemple :

[48]: def f(): #fonction qui affiche uniquementglobal a #on déclare a comme étant une variable globale => elle peut être␣

↪→modifiée dans la fonctiona += 1 #on modifie la valeur de aprint('Dans la fonction a =', a) #on affiche a dans la fonction

a = 12print('1. a =', a) #on affiche la valeur de a avant d'exécuter la fonctionf() #on appelle la fonction fprint('2. a =', a) #on affiche de nouveau la valeur de a, cette fois dans le␣

↪→programme principal

1. a = 12Dans la fonction a = 132. a = 13

On constate que, cette fois, la variable globale a est bien modifiée lors de l’appel de la fonction.

Remarque : Cette distinction entre variables locales et variables globales se retrouve dans d’autreslangages. D’une manière générale il est très fortement déconseillé d’utiliser des variables glob-ales, moins on en utilise et mieux c’est (nous verrons pourquoi peu à peu dans l’année et commenten éviter l’année prochaine), malgré tout, ce n’est pas une règle absolue (certains informaticiensdiront que si) et puisque le langage nous permet de le faire, il ne faut pas non plus se l’interdire sicela permet de simplifier un programme.

V. Les expressions et les booléens.

Si on vous dit que "4 est égal à 5", vous répondez que "c’est faux" (enfin j’espère) ! Si maintenanton vous dit que "7 est égal à 7", vous répondrez que "c’est vrai".

En Python, ces deux "affirmations" ("4 est égal à 5" et "7 est égal à 7") s’écrivent 4 == 5 et 7 == 7(avec un double signe égal).

Ce type d’égalité, comme 4 == 5 est appelé une expression et une expression est soit vraie (True),soit fausse (False), ça devrait vous rappeler un type de variables déjà croisé. . . les booléens !

20

Page 21: Programmation et langages (partie 1) : Programmation en Python

Exemples :

[49]: 1 == 1

[49]: True

[50]: 2 == 3

[50]: False

[51]: 1 + 1 == 2

[51]: True

Jusqu’à là tout va bien, ça reste logique.

[52]: 0.1 + 0.2 == 0.3

[52]: False

Là ça se gâte. . . Cette égalité est, bien sûr, vraie en mathématiques mais on a déjà vu que Python aun peu de mal avec les nombres décimaux flottants et du coup il peut parfois y avoir des bugs :-(.

Il ne faut donc pas faire des tests d’égalités sur des flottants !

On peut aussi utiliser les opérateurs mathématiques de comparaison avec Python, on peut donctester si deux nombres (entiers) sont égaux avec == mais aussi utiliser les symboles supérieur,inférieur, etc. avec <, >, <=, >= et même différent avec !=.

Exemples :

[53]: 2 < 3

[53]: True

[54]: 2 <= 2

[54]: True

[55]: 2 != 3 #différent

[55]: True

[56]: x = 2 == 3 #plus étrange... on affecte à x la valeur 2==3 donc Falseprint(x)

False

[57]: b = 2 < 3 #on affecte à b la valeur 2<3 donc Trueprint(b)

21

Page 22: Programmation et langages (partie 1) : Programmation en Python

True

VI. Instructions conditionnelles.

1. Si. . . alors. . .

Nous allons maintenant voir une structure fondamentale en programmation le " si . . . . . . alors. . . . . . . sinon . . . . . . ..". La structure est la suivante :

[ ]: if condition: #le : est obligatoire comme pour les fonctionsbloc_instructions1 #l'indentation est, elle aussi, obligatoire

else:bloc_instructions2

Si (if en anglais) "condition" est vérifiée (donc True) alors "bloc_instructions1" est exécutéeet " bloc_instructions2" est ignorée, sinon (else en anglais), sous-entendu que "condition" est"False", "bloc_instructions2" est exécutée et "bloc_instructions1" est ignorée.

Comme pour une fonction, "bloc_instructions1" et de "bloc_instructions2" forment des blocsd’instructions définis par l’indentation qui est obligatoire (il peut y avoir plusieurs indentations sile if est à l’intérieur du bloc d’instruction d’une fonction).

Exemple : On rappelle qu’un nombre entier pair est un nombre divisible par 2.

[58]: def parite(n):"""teste la parité d'un nombre entier n"""if n % 2 == 0: #on teste si le reste de la division par 2 est 0

return Trueelse:

return False

parite(12) #teste la parité de 12

[58]: True

Remarque : Le code tapé est facile à comprendre mais n’est pas optimisé, on aurait pu l’écrire enPython de façon beaucoup plus concise (mais moins évidente à comprendre) :

[59]: def parite_bis(n):return n % 2 == 0 #la fonction va retourner True si n est pair et False sinon

parite_bis(12)

[59]: True

Remarque :

Il existe aussi le mot clé elif qui est la contraction de "else if" (sinon si) et qui permet ainsi deraccourcir, un peu le code.

22

Page 23: Programmation et langages (partie 1) : Programmation en Python

Exemple :

[60]: def note(n): #fonction qui ne renvoie rien, elle affiche du texteif n >= 15:

print('Super')elif 10 <= n < 15:

print('Ça va, ouf !')else:

print('Oups...')

note(16) #la note est de 16note(12) #la note est de 12note(4) #la note est de 4

SuperÇa va, ouf !Oups...

Remarque : ifet elif sont suivies d’une expression qui a la valeur True ou False et la ligne setermine par le signe ":" mais par contre else est immédiatement suivie du signe ":".

Exercices : 1. a. Écrire une fonction age1, qui prend en paramètre un âge et qui affiche le message"vous êtes majeur" ou "vous êtes mineur" en fonction de votre âge (elle ne renvoie rien).

b. Écrire la fonction \texttt{age2} qui cette fois renvoie "Majeur" ou "Mineur".

2. Écrire une fonction max(), qui prend en paramètre 2 nombres a et b et qui renvoie le plusgrand des deux. En cas d’égalité, elle renvoie l’un des 2 nombres.

3. Vous êtes gérant d’un magasin et vous désirez écrire une fonction Python qui calculera au-tomatiquement le montant de la facture des clients. Tout client qui achète au moins 5 fois lemême article se voit octroyer une remise de 8% sur cet article (et uniquement sur cet article).Afin de simplifier le problème, on considère qu’un client n’achète qu’un seul type d’article.Écrire une fonction facture() qui prend en paramètre le prix unitaire de l’article et le nombred’articles achetés et qui renvoie le montant de la facture.

4. Écrire une fonction qui permet de déterminer si une année est bissextile. On rappelle lesrègles qui déterminent si une année est bissextile ou non : une année est dite bissextile sic’est un multiple de 4, sauf si c’est un multiple de 100. Toutefois, elle est considérée commebissextile si c’est un multiple de 400. Elle doit retourner Vrai si l’année est bissextile et Fauxsi ce n’est pas le cas.

5. Écrire une fonction convertir(), qui effectue une conversion euros en dollars. Elle prend 2paramètres : un nombre et un caractère : soit ‘E’ pour euro (et donc convertir des dollardsen euros) soit ‘D’ pour dollar (et donc convertir des euros en dollars). On prendra 1 $ = 0,84Euro.

ATTENTION : On a vu que Python ne sait pas coder de façon exacte certains nombres comme 0.3par exemple donc il ne faut surtout pas tester si un nombre de type float est égal à une certainevaleur. Par exemple, nous avons vu que 0.1 + 0.2 == 0.3 retourne False. Si vous devez tout demême impérativement faire un test sur des flottants, dans ce cas, la bonne pratique est de vérifiersi un flottant est compris dans un intervalle avec une certaine précision. Par exemple :

23

Page 24: Programmation et langages (partie 1) : Programmation en Python

[61]: abs(0.1 + 0.2 - 0.3) <= 0.000000001 #abs = valeur absolue

[61]: True

On peut donc considérer que 0.1 + 0.2 est tellement proche de 0.3 (puisque la différence est trèsproche de 0) que la somme 0.1 + 0.2 est égale à 0.3 (horreur en mathématiques, acceptable enphysique. . . ).

2. Des opérateurs logiques.

Nous allons commencer par parler de 2 opérateurs logiques : le "ou" (or en Python) et le "et" (anden Python).

• (expression1 or expression2) est vraie si au moins l’une des expressions 2 est vraie.

• (expression1 and expression2) est vraie si les 2 expressions sont vraies.

Exemples :

[62]: def heureux(ch):if ch == 'yes' or ch == 'oui': #si le paramètre est 'oui' ou 'yes' la␣

↪→condition sera vérifiéeprint(':-)')

else:print(':-(')

[63]: heureux('oui') #le paramètre est 'oui' donc la condition est vérifiée

:-)

[64]: heureux('yes') #le paramètre est 'yes' donc la condition est vérifiée

:-)

[65]: heureux('no') #le paramètre n'est ni 'oui' ni 'yes' donc la condition n'est pas␣↪→vérifiée

:-(

[66]: def f(a,b):if a == 2 and b == 5: #il faut que a soit égal à 2 et qu'en mm temps b soit␣

↪→égal à 5 pour que ce soit vraiprint('ok')

else:print('pas ok')

[67]: f(2,6) #a vaut bien 2 mais b ne vaut pas 5 donc la condition n'est pas vérifiée

pas ok

24

Page 25: Programmation et langages (partie 1) : Programmation en Python

[68]: f(2,5) #a vaut 2 ET b vaut 5 en même temps donc la condition est vérifiée

ok

Nous reviendrons (encore) sur ces notions et nous les développerons dans un prochain chapitre.

On peut aussi nier une expression avec not. not retourne l’opposé d’une expression c’est à direque si A est vrai alors not A est faux et réciproquement.

Exemple :

[69]: a = 5if not(a == 3): #on teste si a==3 est faux donc si a est différent de 3, on␣

↪→peut aussi utiliser != dans ce casprint('bravo')

else:print('...')

bravo

[70]: b = Truenot(b)

[70]: False

VII. Boucle conditionnelle : la boucle while.

La notion de boucle est fondamentale en informatique. Une boucle permet d’exécuter plusieursfois à la suite des instructions qui ne sont présentes qu’une seule fois dans le code.

Par exemple si on veut écrire un programme qui génère la table de multiplication par 7, de 1 × 7 à10 × 7 : La première solution serait de répéter 10 fois le calcul et de l’afficher (avec son résultat) àl’aide de la fonction print(). Cela va fonctionner mais il faudra répéter 10 fois de suite (presque)la même ligne de code sans pouvoir utiliser de copier/coller (puisque les nombres vont changer àchaque ligne). C’est là que la notion de boucle qui va nous éviter ce travail est intéressante.

Une boucle conditionnelle permet de répéter un bloc d’instructions tant qu’une condition estvraie. On utilise pour cela l’instruction while en Python (qui signifie "tant que" en anglais).

La structure est la suivante :

[ ]: while condition:bloc_instructions

Une nouvelle fois la structure est identique à celles déjà vues (fonctions et instructions condition-nelles). La condition qui suit while est une expression dont la valeur est True ou False. Tant quel’expression est vraie (True), le bloc d’instruction qui suit sera exécuté.

Attention : La valeur de l’expression doit être modifiée dans le bloc d’instruction, sinon la condi-tion restera toujours vraie et le programme bouclera à l’infini (on parle d’ailleurs de boucle infiniedans ce cas).

25

Page 26: Programmation et langages (partie 1) : Programmation en Python

Exemples :

[71]: a = 5while a > 0: #tant que a>0 est vrai, on exécute le bloc ci-dessous

print(a, end = ' ') #affiche la valeur de aa -= 1 #on retire 1 à chaque passage, dès que 'a>0' devient faux, la␣

↪→boucle sera arrétée

print('la nouvelle valeur de a est :',a)

5 4 3 2 1 la nouvelle valeur de a est : 0

On constate que a est passé à 0 donc a>0 est faux et la boucle a bien été stoppée (par contre,attention la valeur de a est 0 et non 1).

[72]: a = 5while a > 5:

print('coucou') #à ne pas lancer, le programme part dans une boucle␣↪→infinie !

a reste toujours égal à 5 donc a>0 sera toujours vrai et donc le programme part dans une boucleinfinie.

Exercices : 1. Que va afficher le script suivant ?

[ ]: a = 0while a < 6:

a += 2print(a)

2. Par quoi remplacer les . . . pour que le programme suivant affiche 0 // 3 // 6 // 9 // 12 (unnombre par ligne) ?

[ ]: n = 0while ... :

print(n)n += 3

3. Écrire un script qui affiche les nombres entiers pairs de 0 à 100 (inclus).4. Écrire une fonction qui prend un entier n en paramètre et qui affiche la liste de tous les

nombres impairs de 1 à n (inclus éventuellement).5. Écrire une fonction qui prend un entier n en paramètre et qui affiche la table de multiplica-

tion de n de 1 à 10.6. Écrire une fonction somme() qui prend un entier n en paramètre et qui renvoie la somme de

tous les entiers de 1 à n (inclus).

VIII. Boucle non conditionnelle : la boucle for.

Tout comme une boucle conditionnelle, une boucle non conditionnelle permet de répéter un blocd’instructions à la suite. Mais contrairement à la boucle conditionnelle, le nombre de répétitions

26

Page 27: Programmation et langages (partie 1) : Programmation en Python

doit être précisé et donc connu dès le départ de la boucle. Pour cela on utilise les mots clés for(pour) et in (dans).

La syntaxe est :

[ ]: for i in range(n): #range() est une fonction qui permet d'indiquer les valeurs␣↪→que i va prendre

bloc_instructions

La fonction range() renvoie la séquence des entiers successifs de 0 inclus à n exclu donc i vaprendre les valeurs de 0 à n− 1 et donc i prend successivement n valeurs, en mathématiques, onnoterait : i ∈ [[0; n[[

Exemple :

[73]: for i in range(3):print(i)

012

On constate que i prend les valeurs de 0 à 2 (et non de 1 à 3)

Remarque : Une boucle non conditionnelle peut toujours être remplacée par une boucle condi-tionnelle, par exemple, on peut remplacer la boucle précédente par :

[74]: i = 0while i < 3:

print(i)i += 1

012

Remarques : La fonction range() offre différentes possibilités :

• On peut obtenir la séquence de tous les entiers successifs compris entre 2 entiers m et n (avecm ≥ n) avec range(m, n) (équivalent à la notation mathématique i ∈ [[m; n[[ ).

• On peut aussi préciser le pas, p, avec range(m, n, p). Le pas peut être un nombre entiernégatif, ce qui permet d’obtenir, dans ce cas, une séquence décroissante de nombres entiers :

[75]: for i in range(7, 3, -1):print(i)

7654

27

Page 28: Programmation et langages (partie 1) : Programmation en Python

La boucle for en Python propose d’autres possibilités. On peut remplacer la fonction range() parune chaîne de caractère ou une liste (on verra cette notion dans la partie suivante). La bouclefor "parcourt" alors les caractères de la chaîne un à un et la variable prend successivement cesdifférents caractères. Un objet que l’on peut parcourir avec une boucle for est dit "itérable".

Exemple :

[76]: ch = "bonjour"for i in ch: #i prend successivement les caractères de ch

print(i)

bonjour

L’instruction break permet d’interrompre une boucle (mais ce n’est pas recommandé de l’utiliser,d’ailleurs nous ne l’utiliserons presque jamais) :

[77]: for i in range(12):if i == 3:

break #la boucle va être arrétée si i est égal à 3else:

print(i)

012

Exercices : 1. Écrire une fonction somme() qui prend un entier n en paramètre et qui renvoie lasomme de tous les entiers de 1 à n (inclus) en utilisant une boucle for.

2. Écrire une fonction carre() qui prend en paramètre un nombre n, entier supérieur ou égal à1 et qui renvoie la somme des carrés de 1 à n.

3. Écrire une fonction diviseurs() qui prend un entier naturel n en paramètre et qui affiche laliste des diviseurs de n.

4. Écrire une fonction premier() qui prend un entier naturel n en paramètre et qui renvoie Truesi le nombre est premier et False s’il ne l’est pas.

Rappel : un nombre premier est un nombre qui a exactement 2 diviseurs : 1 et lui-même.Indication : Il suffit de tester si n a un diviseur compris entre 2 et

√n. On pourra utiliser la

fonction round() qui permet d’arrondir à l’unité. Attention aux cas 0 et 1.

IX. Un 1er type construit : le type list (1ère partie).

Les types simples qu’on a vu au début de ce chapitre ne sont plus suffisants si on a besoin degarder en mémoire un grand nombre de valeurs comme dans le cas d’un traitement de données

28

Page 29: Programmation et langages (partie 1) : Programmation en Python

statistiques. Il en est de même si l’on souhaite regrouper des valeurs, par exemple afin d’avoir unevariable représentant les coordonnées d’un point. L’objectif est donc de construire un type de vari-able capable de contenir plusieurs valeurs, on parle alors d’un type construit (construit à partirdes types simples). Il existe différents types construits et un chapitre sera consacré à leur étudedans l’année mais pour l’instant nous allons aborder le type list qui est un type particulièrementimportant en Python.

Un objet de type list, que nous appelons une liste est un ensemble ordonné d’éléments repéréspar des indices. C’est un tableau qui peut contenir toute sorte d’objets comme des chaînes decaractères ou des nombres et même d’autres listes. Les éléments d’une liste sont séparés par desvirgules et entourés de crochets.

Exemple :

[78]: liste1 = [1, 2, 5] #une liste formée d'entiersliste2 = ['Alpha', 3, 12, 'Bravo', 'Charly', True] #une liste formée d'éléments␣

↪→de différents typesliste3 = [liste1, liste2] #une liste de liste

[79]: print(liste3)

[[1, 2, 5], ['Alpha', 3, 12, 'Bravo', 'Charly', True]]

Il y a de nombreuses similitudes dans la façon de manipuler les listes et les chaînes de caractères.Comme pour les chaînes de caractères, les éléments d’une liste sont repérés par leur indice et onpeut obtenir la valeur de l’élément d’indice i en tapant liste[i] :

[80]: liste2[0] #l'indice 0 est le 1er élément de la liste

[80]: 'Alpha'

Dans le cas d’une liste de listes, pour accéder à un élément, on utiliser la syntaxe suivante :liste[x][y] où x et y sont des entiers. Par exemple avec la liste précédente, si on veut affecter‘Charly’ à une variable a, on va écrire :

[81]: a = liste3[1][4] #le [1] désigne le 2ème élt de la liste et le [4] désigne le␣↪→5ème élt du 2ème élt

print(a)

Charly

Remarque : Comme avec une chaîne de caractères, une liste peut être indexée avec des nombresnégatifs. L’indice du dernier élèment de la liste est alors l’indice -1 et on les lit dans le sens in-verse (vers la gauche) en retirant 1 à chaque fois : liste1 = ['A','B','C','D','E','F'] indicespositifs : de 0 à 5 indices négatifs : de -6 (pour ‘A’) à -1 (pour ‘F’)

Par contre, contrairement aux chaines de caractères, on peut modifier un élément d’une liste enconnaissant son indice (on parle de type mutable) :

[82]: liste2[0] = 'coucou' #on remplace le 1er élèment de la liste par 'coucou'print(liste2)

29

Page 30: Programmation et langages (partie 1) : Programmation en Python

['coucou', 3, 12, 'Bravo', 'Charly', True]

Comme pour les chaînes de caractères, on peut concaténer les listes avec "+" :

[83]: liste4 = liste1 + liste2print(liste4)

[1, 2, 5, 'coucou', 3, 12, 'Bravo', 'Charly', True]

On a "fusionné" les 2 listes dans la liste liste4. Une nouvelle fois, comme pour les chaînes decaractères, la fonction len() retourne la longueur d’une liste :

[84]: len(liste3)

[84]: 2

Enfin, toujours comme avec les chaînes de caractères, on peut itérer (avec for. . . in. . . ) directementune liste :

[85]: l = ['alpha', 'bravo', 'charly']for i in l: #i va prendre successivement les valeurs des éléments de l

print(i)

alphabravocharly

Pour finir cette introduction au type list, nous allons parler d’une "méthode" (on ne détaillera pasdans ce cours ce qu’est une méthode, on se contentera de l’utiliser) qui permet de construire uneliste en ajoutant des élèments à la fin de cette liste. Cette méthode est la méthode : .append().Exemple :

[86]: liste1.append(12) #cette syntaxe permet de dire qu'on applique la méthode␣↪→directement à la liste liste1

print(liste1)

[1, 2, 5, 12]

On constate que le nombre 12 a bien été ajouté à la fin de la liste. On peut ajouter un élèmentde n’importe quel type (ici c’est un entier). Par exemple en tapant liste1.append('coucou'), onajoutera la chaîne ‘coucou’ comme dernier élèment de la liste liste1. On peut alors entièrementconstruire une liste en partant d’une liste vide avec cette méthode. Exemples :

[87]: l = [] #on définit l comme une liste videfor i in range(1, 11):

l.append(i) #les valeurs de i vont être successivement ajoutées à lprint(l)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

30

Page 31: Programmation et langages (partie 1) : Programmation en Python

[88]: l=[]for i in 'abcdefghijklmnopqrstuvwxyz':

l.append(i)print(l)

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p','q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

Nous verrons plus en détail les listes et d’autres types construits dans un chapitre plus tard dansl’année, pour ce début d’année ces notions sont suffisantes.

Exercices : 1. Écrire une fonction qui prend une liste de flottants en paramètre et qui retournela somme de ces nombres. 2. Écrire une fonction qui prend une liste de flottants en paramètreet qui retourne la moyenne de ces nombres. 3. Écrire une fonction "liste_premiers" prend unentier naturel "n" en paramètre et qui renvoie la liste des nombres premiers compris entre 0 etn. Indication : On pourra utiliser une fonction déjà vue et utiliser une liste pour stocker lesnombres premiers. 4. Écrire une fonction qui prend en paramètre une liste d’entiers et qui retournele plus grand nombre de la liste. 5. Écrire une fonction qui prend en paramètre une liste d’entiers etqui retourne la liste des nombres pairs inclus dans cette liste. 6. Écrire une fonction qui prend uneliste de listes formées de 2 éléments : un flottant et un entier (par exemple [[12.3,4],[3.5,1]]en paramètres et qui retourne la moyenne pondérée des flottants (les entiers étant les coefficients).

31