Chapitre 03 - Introduction À L'informatique Avec Python
Chapitre 03 - Introduction À L'informatique Avec Python
3
Chapitre
Python
Résumé
YTHON est un langage de programmation que nous allons utiliser en mathématiques pour diffé-
P rentes utilisations. Ce chapitre contient la totalité des structures de base qu’il faut connaître.
Le reste des connaissances Python sera vu au fur et à mesure des chapitres de mathématiques.
Plan du cours
Chapitre 3. Introduction à l’informatique avec Python
I. Expressions et types simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
II. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
III. Types composés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
IV. Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
V. Instructions conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
VI. Boucles inconditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
VII. Boucles conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
VIII. Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
IX. Modules et paquetages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Corrigés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
« J’ai une théorie. C’est en fait une grave erreur que notre cervelet n’ait pas
été correctement connecté à notre cerveau. Il s’agit là sans doute du plus grand
bug survenu dans notre programmation. Quelqu’un nous a mal conçus. C’est
pourquoi on aurait dû nous remplacer par un autre modèle. Si notre cervelet
avait été connecté au cerveau, nous aurions joui de la pleine connaissance de
notre anatomie, des processus survenant à l’intérieur de notre corps. »
Olga Tokarczuk (1962 – ). Sur les ossements des morts
1
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Objectifs
La liste ci-dessous représente les éléments à maitriser absolument. Pour cela, il faut savoir
refaire les exemples et exercices du cours, ainsi que ceux de la feuille de TD.
A. Crouzet 2 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
>>> 42
42
>>> 1+4
5
Les valeurs en Python sont typés selon l’objet qu’elles représentent. Une valeur peut ainsi être
de type entier, de type flottant, de type chaı ̂ne de caractères ... Des types similaires existent
dans la plupart des langages de programmation. Leur représentation en mémoire varie beaucoup
d’un langage à l’autre, mais ce sont souvent les mêmes objets que l’on cherche à traduire.
Une expression en Python n’a pas de type a priori car le type de sa valeur dépend de l’environ-
nement, plus précisément des types de ses sous-expressions. Pour simplifier, on considèrera dans
un premier temps des expressions dont les valeurs sont toutes d’un même type. L’expression 42
est de type entier alors que 1.2 / 3.0 est de type flottant.
Pour afficher le type d’une expression après l’avoir évaluée, on utilise type :
Console Python
>>> type(42)
<class 'int'>
>>> type(1.2/3.0)
<class 'float'>
Le mot retourner par la fonction type indique le type de la valeur, entier (int pour integer en
anglais) pour la première expression et flottant (float en anglais) pour la seconde.
Dans la plupart des langages de programmation, une expression est :
• soit une constante, comme 42 ;
• soit un nom de variable (valeurs littérales comme x ou compteur) ;
• soit une expression entre parenthèses, comme en mathématiques (2-3) ;
• soit composée de plusieurs expressions réunies à l’aide d’un opérateur, comme 1 + (3 * 4)
où les expressions 1 et 3 * 4 sont réunies par l’opérateur + ;
• soit composée d’une fonction appliquée à d’autres expressions, comme fact(4).
Dans les prochaines sections, on présente les constantes et les opérateurs sur les types simples
usuels, puis on verra la notion de variable. On présentera enfin des types plus complexes. La
notion de fonction sera l’objet de la partie suivante.
2. Entiers
a. Constantes
Les constantes entières sont écrites en base 10 avec des nombres ayant autant de chiffres qu’on
le souhaite.
On dit que Python utilise des entiers longs ; par abus de langage, on parle également de précision
arbitraire pour exprimer que tous les chiffres significatifs sont mémorisés.
A. Crouzet 3 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
>>> 42
42
>>> -12
-12
>>> 123456789123456789123456789
123456789123456789123456789
>>> 17//5
3
>>> 17%5
2
>>> 10**50
100000000000000000000000000000000000000000000000000
• l’opposé utilisant également le symbole - mais devant une expression, on parle alors de
position préfixe.
Console Python
>>> -(2+3)
-5
Remarque
Dans le contexte de la programmation on parle de division entière et de modulo plutôt que
de quotient et de reste. Ainsi l’expression 2 % 5 se lit 2 modulo 5 ;
A. Crouzet 4 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Remarque
Ces règles ne résolvent pas toutes les ambigüités. Il reste toujours le cas des expressions telles
que 1-3-2, qu’on peut comprendre comme (1-3)-2 (de valeur −4) ou comme 1-(3-2)
(de valeur 0). Pour la plupart des opérateurs, on choisit toujours la première possibilité
(associativité à gauche). Une exception notable est l’exponentiation, qui dans une expression
comme 2**1**3 est calculée à droite d’abord. Dans le doute mettre des parenthèses !
3. Flottants
a. Constantes
Les nombres à virgules sont appelés dans le cadre de l’informatique des nombres à virgules
flottantes. Pour écrire un nombre flottant on utilise le symbole . à la place de la virgule.
Console Python
>>> 3.2
3.2
>>> type(3.2)
<class 'float'>
>>> type(2.)
<class 'float'>
>>> type(2)
<class 'int'>
Remarque
Attention, l’exemple ci-dessus montre que 2. et 2 ne sont pas le même objet, ils ne seront
pas codés de la même façon en mémoire. Et notamment alors que en python les entiers
ont une précision arbitraire (tant que l’ordinateur peut fournir la mémoire nécessaire) les
flottants sont codés sur un nombre de bits fixes (64 généralement). Ils n’auront donc pas
une précision arbitraire.
On peut vouloir écrire un flottant sous la forme 𝑚 × 10𝑛 , où 𝑚 la mantisse et 𝑛 l’exposant sont
des nombres relatifs. Pour traduire cela en Python, on utilise la lettre e pour séparer la mantisse
et l’exposant :
Console Python
>>> 12e-4
0.0012
>>> -123e1
-1230.0
On remarque que Python ajoute .0 même quand il s’agit d’un entier au sens mathématique du
terme. Cela permet de rappeler d’un coup d’oeil qu’il est du type flottant.
Les opérateurs +, -, *, ** sont également définis sur les flottants, avec les mêmes règles de
précédence.
On peut remarquer ici que les flottants offrent une précision moins bonne que les entiers pour
les calculs sur des valeurs entières :
Console Python
>>> 2**50
1125899906842624
>>> 2.0**100
1.2676506002282294e+30
A. Crouzet 5 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
1 Attention
Attention, lors d’une opération entre un flottant et un entier, l’entier considéré est converti
à la volée en flottant.
Console Python
>>> 1.2*2
2.4
>>> 1.0/3.0
0.3333333333333333
Remarque
Il est important de faire attention aux types des expressions sur lesquelles on travaille.
Notamment pour savoir quels sont les opérateurs qu’on peut leur appliquer, mais également
comme on l’a vu ici car cela a une incidence sur la précision du résultat mais également
sur l’efficacité du calcul. Un processeur est généralement beaucoup plus rapide dans les
opérations sur les entiers que sur les flottants.
Il faudra par exemple faire attention pour utiliser le nombre 42, on écrira 42 si l’on veut un
entier et 42.0 ou simplement 42. si l’on veut un flottant.
On peut, en cas de besoin, convertir un entier en flottant en lui appliquant la fonction float
et un flottant en un entier par la fonction int.
Attention toutefois : int(x) ne calcule pas la partie entière de x mais le tronque, c’est-à-dire
calcule la partie entière de |x| puis affecte le résultat du signe de x.
4. Booléens
a. Constantes
Les booléens constituent un type spécial, le type bool, dont les constantes sont particulièrement
simples : il n’y en a que deux, True et False. Ils servent à représenter le résultat de l’évaluation
d’expressions logiques qui peuvent prendre soit la valeur vraie, représentée par True, soit la
valeur fausse, représentée par False.
Console Python
>>> type(True)
<class 'bool'>
Les opérateurs sur les booléens correspondent aux connecteurs logiques que l’on manipule en
mathématiques :
• La négation ou non logique, dont le symbole Python est not. L’expression not b a la
valeur True si b s’évalue à False, et la valeur False si b s’évalue à True.
• La conjonction ou et logique, dont le symbole Python est and . L’expression b1 and b2 a
la valeur True si b1 et b2 s’évaluent à True. Si une des deux expressions s’évalue à False
alors b1 and b2 a la valeur False.
• La disjonction ou ou logique, dont le symbole Python est or. L’expression b1 or b2 a la
valeur False si b1 et b2 s’évaluent à False. Si une des deux expressions s’évalue à True
alors b1 or b2 a la valeur True.
En voici quelques exemples :
A. Crouzet 6 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Console Python
Remarque
Les opérateurs and et or sont dits paresseux : ils ne calculent que ce qui est nécessaire pour
évaluer une expression. Par exemple :
Console Python
Le booléen situé à gauche de and valant False, celui de droite n’est pas évalué. Écrite
dans l’ordre inverse, l’expression aurait produit une erreur de division par zéro. De même,
l’opérateur or n’évalue pas son membre droit si son membre gauche vaut True.
d. Opérateurs de comparaison
>>> 1 == 3-2
True
>>> 1 == 0
False
Python dispose d’un raccourci pour l’expression not (e1 == e2), à savoir e1 != e2.
Les types que l’on va considérer dans ce cours sont pour la plupart également comparables pour
une relation d’ordre fixée. On peut alors utiliser cet ordre pour comparer deux expressions.
L’ordre strict :
Console Python
>>> 1<3
True
A. Crouzet 7 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
>>> 1>3
False
Pour effectuer des comparaisons au sens large, on ajoute = après le symbole de comparaison :
Console Python
>>> 1 <= 3
True
>>> 1 <= 1
True
Enfin, il est possible d’effectuer des comparaisons avec plus de deux éléments. On écrit alors cela
comme en mathématiques :
Console Python
>>> 1<2<3
True
II. Variables
1. Notion de variable
a. État, valeur d’une variable et valeur d’une expression
Pour mémoriser une valeur, on va la stocker en mémoire. On peut représenter l’adresse mémoire
par un identificateur. Le couple (identificateur, valeur) est appelé une variable. En fait, il faut
imaginer que l’identificateur est une version simplifiée de l’adresse mémoire à laquelle sera stockée
la valeur de la variable.
Le nom de la variable est une chaı ̂ne de caractères, arbitrairement longue. Seuls quelques expres-
sions (fonctions primitives de Python) ne peuvent être utilisés. Python distingue les majuscules,
des minuscules. Ainsi, les chaı ̂nes Aa et aa sont deux identificateurs différents.
L’ensemble des variables définies à un instant donné de l’exécution d’un programme est appelé
l’état. La valeur de toute expression contenant un nom de variable dépend donc de l’état courant.
Lors de l’évaluation de l’expression, le compilateur remplace tous les identificateurs par leur
valeur courante.
Au cours de l’évaluation d’une expression, l’état ne peut pas changer. Ainsi, dans l’expression
x*x, aux deux occurrences du nom x sera substituée la même valeur.
Console Python
Si, lors de l’évaluation d’une expression, un nom de variable est utilisé alors qu’il n’apparaı ̂t
pas dans l’état courant, il devient impossible d’attribuer une valeur à cette expression. Python
renvoie alors le message suivant :
>>> x
Traceback (most recent call last):
A. Crouzet 8 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
b. Mots réservés
Comme nom de variable, on peut utiliser toute chaı ̂ne de caractères alphanumériques (qui ne
commence pas par un chiffre) à l’exception de quelques mots réservés dont voici la liste des plus
courants :
and assert break class continue def del elif else except exec finally for from global if import
in is lambda not or pass print raise return try while yield True False
Déclarer une variable consiste à l’ajouter à l’état. En Python, cette déclaration est toujours
accompagnée d’une initialisation. Elles se font en évaluant une instruction de la forme :
nom de variable = expression.
Jusqu’ici, on a uniquement évalué des expressions. Une instruction est une autre forme d’inter-
action qui demande d’effectuer une modification de l’état. En général, une instruction n’a pas
de valeur après l’avoir exécutée, Python n’affiche rien. Par exemple :
Console Python
>>> x=2
redonne directement l’invite de l’interpréteur, non sans avoir modifié l’état. Il suffit d’évaluer
une expression à la suite pour le constater :
Console Python
>>> x+1
3
d. Affectation
Pour changer la valeur d’une variable, on utilise la même instruction que pour la déclaration.
Si on est dans l’état où x vaut 1, l’instruction :
Console Python
>>> x=2
>>> x = x+1
Dans cette instruction, x joue deux rôles bien différents. À gauche, il s’agit du nom de la variable
sur laquelle s’effectue l’affectation. À droite, il apparaı ̂t comme élément de l’expression qui va
être évaluée. Dans une affectation, on commence tout d’abord par évaluer l’expression de droite,
puis on affecte cette valeur à la variable de gauche.
Remarque
Python apporte un raccourci à l’instruction x=x+1, cette dernière peut s’écrire de façon
A. Crouzet 9 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
équivalente x+=1, qu’on peut lire « ajouter 1 à x ». Les autres raccourcis sont présentés dans
le paragraphe suivant.
Il est très fréquent d’avoir à incrémenter une variable, c’est-à-dire à augmenter sa valeur de 1.
On a vu que Python permet de raccourcir l’instruction x=x+1 en x+=1. On dit que += est un
opérateur avec assignation. Plus généralement
• x += y équivaut à x = x + y
• x -= y équivaut à x = x - y
• x *= y équivaut à x = x * y
• x **=y équivaut à x = x ** y
• x /= y équivaut à x = x / y
• x //= y équivaut à x = x // y
• x %= y équivaut à x = x % y
2. Types de variables
Une variable peut contenir des données de n’importe lequel des types que nous avons déjà étudié.
En Python, il n’est pas nécessaire de préciser le type de valeur que l’on va placer dans une
variable. En fait, un même identificateur peut être successivement associé à des types de données
totalement différentes. En fait le type est déterminé seulement au moment de l’évaluation, c’est
ce que l’on appelle un typage dynamique.
Console Python
On précisera un peu les types str (pour string ou chaine en français) et list dans la suite.
Exercice 3.1
On suppose que l’on a deux variable x et y dont on souhaite échanger le contenu. Écrire la
suite d’instruction afin que x contienne le contenu de y, et y celui de x.
Solution
Une première idée serait de faire naïvement ceci :
A. Crouzet 10 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Console Python
>>> x = 1
>>> y = 2
>>> x = y
>>> y = x
>>> x,y
(2, 2)
Le problème vient évidemment du fait que lorsqu’on modifie la valeur de y, celle de x a déjà
été modifiée. Pour contourner cette difficulté, on peut utiliser une variable auxiliaire :
Console Python
>>> x = 1
>>> y = 2
>>> t = x
>>> x = y
>>> y = t
>>> x,y
(2, 1)
>>> x = 1
>>> y = 2
>>> x,y = y,x # ou �(x,y)=(y,x), ou [x,y]=[y,x]
>>> x,y
(2, 1)
1. Les listes
Une liste en python est une collection (on peut dire aussi une séquence ou un tableau) ordonnée
d’éléments quelconques (de n’importe quel type de python, ça peut par exemple être une autre
liste). La liste est dite ordonnée car à chaque élément (on parlera également de composante
d’une liste) est associé un numéro, son indice, donnant son rang dans la liste.
On se concentrera ici sur les éléments essentiels liés aux listes.
a. Construction
Pour construire une liste il suffit de placer ses éléments entre crochets séparés par des virgules.
Voici une liste composé d’un entier et d’un flottant :
Console Python
>>> [1,2.2]
[1, 2.2]
>>> type([1,2.2])
<class 'list'>
Il est bien sûr possible d’affecter une liste à une variable pour l’ajouter à l’état :
A. Crouzet 11 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Console Python
>>> L = [1,2.2]
>>> L
[1, 2.2]
Remarque
Il est possible de construire une liste vide, c’est-à-dire une liste ne contenant pas d’éléments,
avec l’instruction [].
Par exemple, avec l’instruction :
Console Python
>>> V = []
on défini une liste V. Cela peut paraitre inutile au premier abord, mais l’on verra que c’est
une façon d’initialiser une liste pour ensuite la faire grandir avec des éléments voulus. Le
point important est que cela permet de dire à Python que V est de type list, on pourra
donc l’impliquer dans des opérations spécifiques aux listes telle que la concaténation.
Pour accéder aux composantes d’une liste, c’est-à-dire aux sous-valeurs qu’elle contient, on utilise
l’expression L[i] où i est le rang de la composante, on parle de son indice.
En python, comme dans la plupart des langages de programmation, on commence à numéroter
à partir de 0 et non de 1.
En ayant définie la liste L comme précédemment, pour obtenir sa première composante on pourra
évaluer :
Console Python
>>> L[0]
1
et pour la seconde :
Console Python
>>> L[1]
2.2
c. Déconstruction
Il est également possible de déconstruire une liste en affectant simultanément ses composantes
à différentes variables.
La liste L étant la liste précédemment définie, l’instruction :
Console Python
>>> x,y = L
>>> x
1
>>> y
2.2
permet de déclarer et d’initialiser les variables x et y avec respectivement les valeurs L[0] et
L[1].
La composante d’une liste se comporte comme une variable, on peut la voir comme un empla-
cement mémoire.
A. Crouzet 12 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
De la même façon qu’avec une variable on peut affecter une valeur à une composante d’une liste
déjà formée :
Console Python
>>> L
[1, 2.2]
>>> L[1] = 3
>>> L
[1, 3]
Tous les types composés proposés par python (tels que le n-uplets ou les chaines de caractères)
ne permettent pas d’affecter de nouvelles valeurs aux composantes (voir le paragraphe sur les
chaines de caractères). On dit de ces types qu’ils sont immuables. Les listes sont plus souples
que ces types mais le prix à payer est qu’elles sont moins efficaces.
Remarque
Il n’est bien sûr pas possible d’affecter une valeur à une composante qui n’existerait pas.
Python renvoie dans ce cas un message d’erreur. Par exemple :
L
L[2] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range�
e. Concaténation
Il est possible de coller une liste à 𝑛 éléments à une liste à 𝑝 éléments pour en obtenir une à (𝑛+𝑝)
éléments. On parle de concaténation. L’opérateur correspondant en Python est l’opérateur +.
Exemples :
Console Python
Cette opération est particulièrement utile pour faire grandir une liste à partir d’une liste initiale.
Si on ajouter un élément à une liste, il faut bien faire attention à lui concaténer une liste à un
1 élément.
En effet, l’expression suivante produit une erreur :
>>> [1,2]+3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list
Par contre la suite d’instructions suivantes permet de construire une liste à 1 élément :
Console Python
>>> L=[]
>>> L = L+[1]
>>> L
[1]
A. Crouzet 13 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
On présente ces méthodes bien qu’elles ne soient pas explicitement au programme car elles
apparaissent la plupart du temps en annexe des sujets. Il faut donc savoir les utiliser.
Une méthode est une fonction associée à un type d’objet en particulier. On les appelle avec
l’opérateur . à la suite d’un objet avec des expressions de la forme : objet.methode(arguments).
La méthode append associée aux listes permet d’ajouter un élément en paramètre de la fonction
en bout de liste.
Exemple :
Console Python
>>> L = [1,2]
>>> L.append(3)
>>> L
[1, 2, 3]
La méthode pop permet de supprimer le dernier élément d’une liste si on ne lui donne pas
d’arguments et l’élément au rang donné en paramètre sinon.
Exemple :
Console Python
>>> L = [1,2,3,4]
>>> L.pop()
4
>>> L
[1, 2, 3]
>>> L.pop(0)
1
>>> L
[2, 3]
On obtient la longueur, c’est-à-dire le nombre d’éléments, d’une liste à l’aide de la fonction len :
Console Python
>>> len([2,3,5])
3
>>> len([])
0
h. Sous-liste : slicing
Le terme anglais de slice est associé à l’idée de découpage (une part de gâteau ou de pizza). En
Python en particulier, un slice permet le découpage de structures de types composés comme les
listes.
Les slices sont des expressions du langage Python qui vous permettent en une ligne de code
d’extraire des sous-listes d’une liste.
Par exemple l’expression L[i:j] représente la sous-liste de L allant de l’indice i à l’indice j
exclu.
Console Python
>>> L = [1,2,3,4]
>>> L[1:3]
[2, 3]
Pour extraire les éléments depuis le rang 0 jusqu’au rang 𝑖 exclu on pourra utiliser le raccourci
suivant L[:i].
A. Crouzet 14 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Et extraire les éléments depuis le rang 𝑖 jusqu’au dernier on pourra utiliser le raccourci suivant
L[i:].
i. Test d’appartenance
Il est possible de tester si une valeur appartient à une liste à l’aide de l’opérateur in :
Console Python
>>> 3 in [1,2,3]
True
>>> 4 in [1,2,3]
False
Le type des chaı ̂nes de caractères, string en anglais et dans Python, est celui permettant de re-
présenter des textes. On considère dans un premier temps des textes élémentaires, ceux composés
d’une unique lettre ; on les appelle les caractères.
En Python, les caractères peuvent être n’importe quelle lettre de l’alphabet, mais aussi des
symboles, comme les signes de ponctuation :
Console Python
>>> 'a'
'a'
>>> type('a')
<class 'str'>
Une chaı ̂ne de caractères est une suite finie de caractères consécutifs, qu’on note entre apos-
trophes ou guillemets :
Console Python
b. Accès à un caractère
Comme pour les listes, on peut stocker une chaı ̂ne dans une variable et accéder à chacun des
caractères à l’aide de la construction s[i] :
Console Python
Par contre contrairement aux listes, les chaines sont immuables, on ne peut pas modifier leurs
caractères un à un :
>>> s = "Ceci est une chaîne"
>>> s[1] = 'd'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment�
A. Crouzet 15 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
c. Concaténation
On remarquera au passage que l’espace au bout de la chaine ’Bonjour ’ est un caractère comme
un autre.
d. Longueur
Comme pour les listes, on utilise len pour obtenir la longueur d’une chaı ̂ne :
Console Python
>>> len("Bonjour")
7
e. Sous-chaines
Comme pour les listes on peut réaliser du slicing de chaines pour obtenir des sous-chaines avec
la même syntaxe que pour les listes :
Console Python
f. Test d’appartenance
Comme pour les lites il est possible de tester si un caractère appartient à une chaine à l’aide de
l’opérateur in :
Console Python
Toutefois cet opérateur n’étant pas au programme on cherchera à s’en passer dans les problèmes
sauf si il est rappelé en annexe.
3. 𝑛-uplets
Le 𝑛-uplet (ou tuple en anglais) est un type de python très similaire aux listes. C’est aussi une
collection d’éléments ordonnés quelconques.
Ce n’est pas un type au programme c’est pourquoi on ne s’y attardera pas.
On dira juste qu’on les construit en écrivant leurs éléments entre parenthèses séparés par des
virgules. L’accès aux éléments se fait de façon analogue aux listes par contre ce sont des objets
non mutables. Ils peuvent ainsi paraitres moins intéressants que les listes, leur intérêt est qu’ils
sont beaucoup plus efficace pour certaines opérations.
Console Python
>>> n = (1,2,3)
>>> type(n)
<class 'tuple'>
>>> n[1]
2
A. Crouzet 16 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
IV. Instructions
1. Notion de programme
On peut utiliser Python en mode interactif, à la manière d’une calculatrice : les instructions
(ou commandes) sont ainsi, l’une après l’autre, entrées au clavier, interprétées et suivies d’un
résultat souvent réutilisé par la suite.
Si elle en vaut la peine, une séquence d’instructions peut être sauvegardée dans un fichier texte,
un programme (on parle aussi de script Python). On peut dès lors ouvrir ce script et l’exécuter,
de façon automatisée, comme si les instructions qu’il contient étaient à nouveau entrées au clavier
(chronologiquement de la première à la dernière ligne). Dérouler les mêmes instructions dans le
même ordre doit bien sûr posséder un minimum d’intérêt. Pour apporter un peu de profondeur
et/ou de fantaisie à tout ça, on peut, à l’intérieur du script lui-même :
• répéter un certain nombre de fois un bloc d’instructions ;
• n’exécuter certaines instructions que si (ou que tant qu’) une condition est vraie ;
• appeler un autre script ;
• orienter le déroulement du script suivant certaines informations fournies par l’utilisateur
(informations qui pourraient par exemple être passées au démarrage du script : on parle
alors des paramètres d’appel).
Évidemment, tout cela est possible en Python. On se contentera ici d’une première approche
modeste.
3. Entrées sorties
a. Affectation par l’utilisateur
Il existe une expression particulière, input(), qui attend que l’utilisateur saisisse une expression
au clavier.
Pour être utile cette expression est alors affectée à une variable :
>>> n=input('entre ton age : n= ')
entre ton age : n= 23
>>> n
'23'
A. Crouzet 17 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Remarque
Attention, on remarque sur l’exemple précédent que bien que l’utilisateur est entré un entier
sans guillemets la variable n est une chaine de caractères. Retenir donc que la fonction
input interprète systématiquement la donnée entrée par l’utilisateur comme une chaine de
caractère. Si le but est de récupérer un entier pour ensuite pouvoir effectuer des calculs
dessus il faut convertir la chaine de caractères en entier. Exemple :
>>> n=input('entre ton age : n= ')
entre ton age : n= 23
>>> n+2
Traceback (most recent call last):
>>> n
23
>>> n+2
25
Inversement, l’instruction print affiche à l’écran les instructions qui lui sont données en argu-
ment. Elle ne modifie pas l’état, mais seulement l’aspect de l’écran. On s’en sert souvent pour
afficher des chaı ̂nes de caractères, mais elle peut afficher des expressions quelconques.
4. Séquences d’instructions
En programmation, pour combiner (ou imbriquer) des séquences d’instructions, on est amené
à grouper des instructions successives, et à considérer ce groupe comme une seule instruction.
Mais encore faut-il trouver un moyen de marquer (par des éléments du langage et/ou par des
dispositions visuelles) les limites d’un tel groupe d’instructions.
Notons par exemple groupe une suite d’instructions instruction 1, instruction 2, …, instruction p.
Imaginons également une condition test, vraie ou fausse à un moment donné du déroulement
du script.
On cherche à écrire une séquence d’instructions du genre :
Commencer ici ...
Si la condition test est vraie , alors évaluer les instructions de groupe
De toutes façons , continuer là...
Voici deux formulations possibles. La première solution est pour le moins ambigüe (est-ce qu’on
évalue uniquement instruction 1 si la condition test est vraie ?).
# Formulation incorrecte
Commencer ici ...
Si la condition test est vraie, alors
instruction 1
instruction 2 ...
instruction p
De toutes façons , continuer là . . .
La seconde solution est correcte car elle indique clairement les limites du groupe d’instructions
A. Crouzet 18 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
En algorithmique, on délimite les groupes d’instructions par les mots clés Début et Fin.
En Python, deux instructions de même profondeur logique doivent avoir la même indenta-
tion (décalage par rapport à la marge de gauche). Du coup, avec une telle convention, il est
inutile de délimiter les blocs d’instruction par un begin group, end group, par contre, il faut
scrupuleusement respecter l’indentation.
en−tête1 : # entête du bloc 1
instruction
en−tête2 : # entête du bloc 2
instruction
...
instruction
instruction # instruction en dehors du bloc 2
instruction # instruction en dehors du bloc 1 et du bloc 2�
Remarque
On remarquera dans l’exemple générique précédent que chaque est introduit par un entête
terminé par le symbole :, ça sera systématiquement le cas quelque soit la structure. Donc
ne pas oublier ces : et l’indentation qui va derrière puisqu’en python un bloc doit contenir
au minimum une instruction.
V. Instructions conditionnelles
1. Test simple
Une instruction conditionnelle n’est exécutée que si une condition est vérifiée par l’état courant.
Pour la programmer, on utilise l’instruction
CODE Code Python
if condition:
instruction
instruction
...
instruction
Le bloc d’instruction n’est exécuté que si la condition est vérifiée. Dans l’exemple qui suit, on
multiplie 𝑥 par 3 et on lui rajoute 1 si 𝑥 est impair.
CODE Code Python
if x%2 != 0:
x = 3*x+1
A. Crouzet 19 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
if condition:
instruction
instruction
...
instruction
else:
instruction
instruction
...
instruction
Dans le bloc suivant, on multiplie 𝑥 par 3 et on lui rajoute 1 si 𝑥 est impair, on le divise par 2
s’il est pair :
CODE Code Python
if x%2 != 0:
x = 3*x+1
else:
x = x/2
a. Test imbriqués
Plutôt que d’emboı ̂ter des clauses if, on peut scinder le flot d’instructions suivant plusieurs cas :
CODE Code Python
if condition1:
instruction
instruction
...
instruction
elif condition2:
instruction
instruction
...
instruction
elif condition3:
instruction
instruction
...
instruction
else: # si toutes les conditions sont fausses on exécute ce bloc
instruction
instruction
...
instruction
En pratique : pour écrire une instruction conditionnelle, avec alternatives, éventuellement im-
briquées, vous devez
1. identifier les cas qui nécessitent un traitement différent
2. déterminer des expressions booléennes qui traduisent chaque cas
3. remplir les différents blocs d’instruction correspondant à chacun des cas en n’oubliant pas
de respecter l’indentation !
A. Crouzet 20 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
3. Expressions conditionnelles
Python offre la possibilité de former des expressions dont l’évaluation est soumise à une condition.
La syntaxe est la suivante
expression1 if condition else expression2.
Console Python
En fait, objet est ici toute construction susceptible d’être parcourue : on pense bien sûr aux
intervalles (qui utiliseront la notion de range), mais aussi aux chaı ̂nes (parcourues caractère par
caractère), aux listes, aux n-uplets...
CODE Code Python
Le bloc qui fait suite à l’instruction for peut contenir deux instructions particulières, souvent
attachées à un test if :
• break provoque la sortie immédiate de la clause for.
• continue passe directement à l’étape suivante de la boucle (ce qui reste du bloc après
continue est donc ignoré).
Exercice 3.2
Écrire un programme en Python déterminant si un entier 𝑛, entré par l’utilisateur, est
premier ou non.
Solution
Voici une proposition :
A. Crouzet 21 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
2. Itérateurs
a. L’itérable range
>>> r=range(100,1000,2) # intervalle des entiers pairs, de 100 inclus à 1000 exclu.
>>> 100 in r # 100 fait-il partie de l'intervalle, réponse oui.
True
>>> 1000 in r # 1000 fait-il partie de l'intervalle, réponse non.
False
Il y a un autre cas de figure qui nécessite de pouvoir faire une boucle, lorsqu’on veut manipuler
une valeur de type composé : comme un n-uplet, une chaı ̂ne de caractères ou encore une liste.
On aimerait pouvoir effectuer un traitement sur chacun des éléments de cette valeur, ce qui est
raisonnable car
• on sait identifier le premier élément que l’on va traiter
• si on vient de traiter un élément, on sait quel est le suivant
Toute valeur de type composé pour laquelle ces deux opérations sont possibles est appelé un
itérable. C’est donc le cas pour les chaı ̂nes de caractères et les listes.
A. Crouzet 22 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Exercice 3.3
Écrire un programme qui compte le nombre d’occurrences de la lettre ’e’ dans un texte saisi
par l’utilisateur.
Solution
Par exemple :
CODE Code Python
1. Boucles while
Pour répéter un bloc d’instructions tant qu’une condition est réalisée, Python nous propose la
clause while :
CODE Code Python
A. Crouzet 23 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
clause.
• on peut écrire une clause while avec une condition toujours vraie (par exemple
while 1: ou while True:) à condition (pour éviter une boucle infinie) de sortir par
un autre moyen (notamment par break ou return).
On constate que la suite atteint bien 1 au bout d’un (certain long) moment.
Le bloc qui fait suite à l’instruction while peut contenir deux instructions particulières, souvent
attachées à un test if :
• break provoque la sortie immédiate de la clause while.
• continue ramène à l’évaluation de la condition (ce qui restait du bloc après continue est
donc ignoré).
Exercice 3.5
Déterminez le rang du dernier terme strictement positif de la suite récurrente définie par
1
𝑢0 = 890 et pour tout 𝑛, 𝑢𝑛+1 = 2 𝑢𝑛 − 3𝑛.
Solution
Par exemple :
Console Python
>>> u = 890
>>> n = 0
>>> while u > 0: # tant que la suite est positive
... u = u/2 - 3 * n # on calcule le rang suivant
... n = n+1 # et augmente le rang
...
>>> n-1 # attention : le rang a été augmenté de 1 dans la boucle
5
A. Crouzet 24 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
VIII. Fonctions
Dans un même programme, une opération, ou une séquence d’opérations peut intervenir à plu-
sieurs reprises.
En ce cas, il est intéressant de définir une fonction qui exécute cette instruction (ou ce bloc
d’instructions). Elle pourra être appelée plusieurs fois dans un script ou même dans plusieurs
scripts.
Ainsi, une fonction en Python, est comme un sous-programme à l’intérieur du programme prin-
cipal. Il se constituera comme le programme principal d’un entête et du corps de la fonction. Il
pourra aussi posséder ses propres variables, que l’on qualifiera de variables locales.
Organiser un programme à l’aide de fonctions présente de multiples avantages :
• cela permet d’éviter les redondances ;
• cela améliore grandement la lisibilité des programmes ;
• cela permet aussi de faciliter le développement du programme
– en fractionnant le travail dans le temps : on peut s’occuper d’abord du programme
principal puis des fonctions ;
– ou de partager le travail entre plusieurs intervenants.
1. Syntaxe
Une fonction est définie par la donnée de
• son nom
• ses arguments (qui seront les valeurs auxquelles seront appliquées les instructions)
• éventuellement une valeur de retour, communiquée au programme principal à la fin d’exé-
cution.
La syntaxe Python pour la définition d’une fonction est la suivante :
CODE Code Python
def nom_de_fonction(liste_paramètres_séparées_par_virgule):
instruction
instruction
instruction
return valeur_de_retour
Le mot-clé def annonce la définition d’une fonction. Il doit être suivi par le nom de la fonction
et une liste entre parenthèses de paramètres formels suivie de deux-points.
Une fonction peut ne pas avoir de paramètres, pour autant il faudra faire suivre le nom de la
fonction de parenthèses sans rien dedans, par exemple def mafonc():. On trouve ensuite le
corps de la fonction.
Exemple 3.6
Nous pouvons créer une fonction qui écrit la suite de Syracuse de premier terme 𝑎 jusqu’à
un rang n quelconque :
A. Crouzet 25 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
1 def vol(a,n) :
2 """
3 Retourne une liste contenant la trajectoire du vol d'altitude a jusqu'à l'étape n
4 """
5 u = a
6 resultat=[a]
7 for k in range (n):
8 if u%2 == 0:
9 u = u//2
10 else:
11 u=3*u+1
12 resultat.append(u)
13 return resultat
14
Ce qui est entre trois guillemets est ce qu’on appelle la documentation de la fonction, qui
indique ce qu’elle fait. C’est bien sûr facultatif, surtout à l’écrit sur papier.
Dans cet exemple,
• n est le paramètre formel,
• k, u, resultat sont des variables locales qui sont initialisées et utilisées dans la
fonction,
• la valeur finale de resultat sera retournée.
Le corps de la fonction, commencent sur la ligne suivant la déclaration, constitue un bloc
d’instructions, il doit être indentée par des espaces pour le différencier du reste du pro-
gramme.
Remarque
Lorsqu’on conçoit une fonction, il est préférable de lui donner un nom explicite. En effet la
fonction est destinée à apparaı ̂tre à plusieurs reprises dans le programme.
En revanche, les arguments formels peuvent être courts car leur portée, et donc leur signi-
fication est limitée au corps de la fonction.
2. Le retour de valeur
Certaines fonctions (comme la fonction vol définie plus haut) sont capables d’effectuer un calcul
et non pas simplement d’afficher le résultat d’un calcul. Cela se fait avec l’instruction return.
Par exemple, on peut écrire une fonction hypotenuse qui à deux paramètres formels x et y
associe le réel 𝑥2 + 𝑦2 .
CODE Code Python
1 Attention
On ne doit pas confondre return et print. Il arrive de confondre ces deux instructions à
cause de l’interpréteur en mode interactif qui affiche automatiquement la valeur resultat
renvoyée par f lorsqu’on saisit f(arguments) exactement comme après une instruction
print(resultat).
Malgré les apparences leurs rôles sont en réalité totalement différents :
• l’instruction print n’a pas de valeur, elle a pour seul effet d’afficher un texte à l’écran.
A. Crouzet 26 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
• l’instruction return au contraire n’affiche rien mais décide de ce que renvoie la fonc-
tion, et donc de la valeur de l’appel f().
Ainsi, si on commet l’erreur d’utiliser print à la place de return dans une fonction, celle-ci
affichera la valeur calculée mais elle ne la renverra pas (elle retournera la valeur None). De
manière générale, dans un programme ou un algorithme, il est important de distinguer ce
qui doit être calculé des sorties affichées à l’écran.
Il est très important de faire la distinction entre un résultat calculé et un résultat simplement
affiché. Dans une expression où il apparait une fonction on peut considérer que cette dernière
est équivalente à ce qu’elle retourne. Il ne sera pas possible de réutiliser le calcul d’une
fonction qui ne retourne rien.
La fonction puissance définie ainsi affiche le résultat mais ne le retourne pas. Si on tente d’inclure
cette fonction dans une opération arithmétique python renverra un message d’erreur :
>>> puissance(2,3)
8
>>> 2*puissance(2,3)
8
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'
Dans la deuxième expression, python commence par exécuter puissance(2,3), ce qui affiche 8
puis cherche à calculer 2 fois la valeur retournée par puissance. Cette dernière n’existant pas on
comprend le message d’erreur.
Par contre on peut réaliser une telle opération avec la fonction hypotenuse définie précédemment
car elle retourne une valeur :
Console Python
>>> hypotenuse(2,3)
3.605551275463989
>>> 2*hypotenuse(2,3)
7.211102550927978
Remarque
Comme break dans une boucle, l’instruction return a pour effet d’interrompre le déroule-
ment de la fonction. Ainsi
A. Crouzet 27 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Console Python
Dans ce cas c’est le premier return qui est exécuté et seulement lui.
>>> x=7
>>> def f():
... y=12*x # y est ici locale a la fonction
... return y
...
>>> y = 1 # y est ici une variable globale ce n'est pas la meme que dans la fonction
>>> f()
84
>>> y
1
Du fait que la variable y est déclarée à l’intérieure de la fonction python l’inscrira dans les
variables locales lors de l’exécution de la fonction. Même si une autre variable y est définie en
dehors de la fonction (et donc globale) celle-ci ne pourra pas y avoir accès. Ainsi le script suivant
renvoie un message d’erreur :
>>> def f():
... print(y)
... y=12*x
... return y
>>> x=7
>>> y=1
>>> print(f())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in f
UnboundLocalError: cannot access local variable 'y' where it is not associated with a value
De façon générale, une bonne pratique consiste à utiliser les variables globales pour représenter
les constantes du problème.
Comme pour les fonctions, il est préférable de donner aux variables globales des noms longs et
explicites, ce qui les distinguera de fait des variables locales qui portent habituellement des noms
courts (comme les paramètres formels).
A. Crouzet 28 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
On peut aussi importer des noms particuliers d’un module. Dans ce cas, ces éléments sont
directement référencés par leur nom : randint, choice sans qu’il soit nécessaire de les préfixer
par le nom du module comme ci-dessus :
Console Python
Il y a une variante pour importer tous les noms d’un module, exceptés ceux qui commencent
par un underscore ( _ ) :
Console Python
Dans la plupart des cas, on utilisera l’instruction import ... ou import ... as ....
2. Modules standard
Python est livré avec une bibliothèque de modules standard, décrite dans un document séparé,
Python Library Reference.
Nous utiliserons dans le cours de mathématiques les modules suivants, les seuls au programme :
• math : fonctions et constantes mathématiques de base (sin, cos, exp, 𝜋, …) ;
• numpy : package Python dont le but principal est le traitement des tableaux multidimen-
sionnels comme par exemple des vecteurs, matrices, images, ou encore des feuilles de calcul
mais il contient aussi la plupart des fonctions définies dans le module math ;
• random : génération de nombres aléatoires ;
• matplotlib : un module utilisé pour la représentation graphique.
Ils seront explicités et détaillés dans les cours de mathématiques lors de leur utilisation.
En deuxième année, on ajoutera Axes3D afin de tracer des surfaces dans l’espace.
A. Crouzet 29 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
A. Crouzet 30 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Exercices
Exercices
3
Généralités
1 5+3
2 2-9
3 7+3*4
4 (7+3)*4
5 3**3
6 3**0.5
7 5/2
8 5.0/2
9 5/2.0
10 float(5)/2
11 4*2.5/3
Les commandes suivantes définissent et utilisent des variables (regarder ce qui se passe dans
l’explorateur de variable au fur et à mesure) :
CODE Code Python
1 x=10
2 x=x+1
3 largeur=20
4 hauteur=5*9.3
5 v=largeur*hauteur
6 print(v)
7 largeur=10
8 print(v)
Remarque
x=x+1 peut aussi s’écrire x+=1.
1 type(largeur)
2 type(hauteur)
3 type(v)
A. Crouzet 31 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Que représentent les variables r et s ? Que font les commandes input et print ? En supprimant
la ligne from math import pi, que se passe-t-il ?
1 surf_canette(5)
2 surf_canette(6)
3 surf_canette(7)
4 surf_canette(8)
5 surf_canette(9)
qu’obtient-on ?
4. En utilisant la fonction précédente, déterminer la valeur du rayon pour laquelle la surface
est minimale.
5. Justifier mathématiquement la valeur obtenue à la question précédente.
A. Crouzet 32 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
1 print(pi, sin(pi),cos(pi))
2 print(e, exp(1), log(e))
2. Datation au carbone 14. À la mort d’un être vivant, le carbone 14 présent dans son orga-
nisme se désintègre au fil des années de sorte que, si 𝑝 est la proportion de 𝐶14 restant au
bout de 𝑁 années, alors 𝑁 = −8310 ln(𝑝).
a) Écrire une fonction datation_C14(p) qui calcule N en fonction de p.
b) La momie Ötzi retrouvée dans un glacier en 1991 contenait 52.8% du 𝐶14 initial à
1% près. Donner un encadrement de son âge.
3. Au lieu d’importer toutes les fonctions du module math, on peut utiliser le module expli-
citement. Ainsi, en important ainsi :
CODE Code Python
import math
1 def mystere(n):
2 if n >= 10:
3 return 1
4 elif n<=5:
5 return -1
6 else:
7 return 0
A. Crouzet 33 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Console Python
>>> 10//3
3
>>> 10%3
1
>>> 41//5
8
>>> 41%5
1
1 import random
2
3 def mystere1(n): # n est un entier entre 0 et 10
4 i = 0
5 alea = random.randint(0,10)
6 while (alea != n):
7 i = i+1
8 alea = random.randint(0,10)
9 return i
1 def mystere2(n):
2 res=0
3 i=0
4 while (i<n):
5 res = res + i*i
6 ....
7 return res
A. Crouzet 34 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
mystere1bis(n, 10).
4. Compléter la ligne 6 de la fonction mystere2 pour qu’elle termine. Dans ce cas, que calcule-
t-elle ?
Fonctions et listes
2. Stocker dans la variable liste_des_cubes la liste qui contient les cubes des éléments de
la liste L de la question précédente.
3. Écrire une fonction def cout_total(prix_au_kg, masse_voulue) qui prend en argu-
ment deux listes (prix_au_kg et masse_voulue) qui représentent respectivement les prix
au kilogramme de chaque ingrédient et la masse (en kg) nécessaire à la fabrication de
l’onguent, et qui renvoie le coût total.
Remarque
Quand une liste L contient des autres listes, alors les éléments L[i] (pour i dans range(len(L)))
sont eux-aussi des listes, donc peuvent accepter la syntaxe des crochets de telle sorte que
L[i][j] (pour j dans range(len(L[i]))) est le 𝑗-ième élément de la 𝑖-ième liste.
A. Crouzet 35 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
1 def somme(L):
2 resultat=0
3 for i in range(len(L)):
4 for j in range(len(L[i])):
5 resultat=resultat+L[i][j]
6 return resultat
1 def ligne_magique(L):
2 n=len(L)
3 somme=0
4 for i in range(n):
5 somme=somme+L[0][i]
6 for i in range(1,n):
7 ligne=0
8 for j in range(n):
9 ligne = ligne + L[i][j]
10 if (ligne!=somme):
11 return False
12 return True
A. Crouzet 36 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
a librement choisi.
Les équipes sont constituées ainsi : la personne ayant choisi le plus petit entier est avec celle
ayant choisi le plus grand, celle ayant choisi le deuxième plus petit est avec celle ayant choisi le
deuxième plus grand, et ainsi de suite.
Vous devrez renvoyer la liste des compositions de chacune des équipes (chaque personne est
identifiée de manière unique par la position de son vote dans la liste donnée en argument), dans
l’ordre : d’abord celle dont le plus petit numéro fait partie, puis celle dont le second plus petit
numéro fait partie, et ainsi de suite. Au sein de chaque équipe on affichera d’abord le plus petit
numéro puis le plus grand. On vous garantit que tous les numéros sont différents.
Voici un exemple :
Console Python
On pourra utiliser la fonction remove qui enlève un élément d’une liste lorsque celui-ci existe :
Console Python
>>> M = [10,2,4,8,5]
>>> M.remove(8)
>>> M
[10, 2, 4, 5]
A. Crouzet 37 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
A. Crouzet 38 cbe
CPGE ECG Chapitre 3 – Introduction à l’informatique avec Python Maths. approfondies
Corrigés
Exercice 1
Ce sont des instructions de base à connaître et maitriser.
Console Python
>>> 5+3
8
>>> 2-9
-7
>>> 7+3*4
19
>>> (7+3)*4
40
>>> 3**3
27
>>> 3**0.5
1.7320508075688772
>>> 5/2
2.5
>>> 5.0/2
2.5
>>> 5/2.0
2.5
>>> float(5)/2
2.5
>>> 4*2.5/3
3.3333333333333335
>>> x=10
>>> x=x+1
>>> largeur=20
>>> hauteur=5*9.3
>>> v=largeur*hauteur
>>> print(v)
930.0
>>> largeur=10
>>> print(v)
930.0
>>> type(largeur)
<class 'int'>
>>> type(hauteur)
<class 'float'>
>>> type(v)
<class 'float'>
Exercice 2
𝑟 demande à l’utilisateur un nombre, qui représente le rayon du disque. 𝑠 désigne alors 𝜋𝑟2 ,
c’est-à-dire la surface du disque.
Sans la ligne from math import pi, le programme ne peut fonctionner, car pi n’est pas connu.
A. Crouzet 39 cbe
Maths. approfondies Chapitre 3 – Introduction à l’informatique avec Python
Remarque
Ainsi, l’instruction from math import pi permet de récupérer la constante pi du module
math afin de pouvoir l’utiliser ensuite.
Exercice 3
1. On rappelle que la surface d’un cylindre est composée de 3 parties : deux disques, de rayon
𝑟, et la face latérale, donc l’aire est donnée par la formule 2𝜋𝑟ℎ. On obtient le programem
suivant :
CODE Code Python
2. Dans ce cas, on prend ℎ et on en déduit 𝑟. Le volume d’un cylindre vaut 𝜋𝑟2 × ℎ. Puisque ce
volume est fixé, on en déduit 𝑟. Attention, 0.33 L donne 330 𝑐𝑚3 .
CODE Code Python
3. On obtient la même chose que précédemment, à savoir la surface de la canette en 𝑐𝑚2 , mais
qu’on peut appliquer autant de fois que l’on veut.
4. On peut faire un balayage, avec un certain pas, pour obtenir la surface la plus petite. Par
exemple :
CODE Code Python
1 def mini(pas):
2 a = surf_canette(2) # Valeur de départ
3 h = 2
4 hmin = 2
5 while h < 10:
6 if surf_canette(h) < a:
7 a = surf_canette(h)
8 hmin = h
9 h += pas
10 return sqrt(330/pi/hmin)
ce qui donne :
Console Python
>>> mini(0.1)
3.742410318509558
A. Crouzet 40 cbe
Maths. approfondies Chapitre 3 – Introduction à l’informatique avec Python
de valeur approchée
𝑟 ≈ 3.74493.
Exercice 4
1. Les instructions sont assez explicites. Cela donne :
Console Python
On remarquera que cela n’affiche pas 0 mais une valeur approchée. On se souviendra que les
résultats informatiques sont toujours des valeurs approchées.
2. On remarquera que le logarithme népérien, noté ln en mathématiques, est implémenté sous
le nom de log. On obtient alors :
CODE Code Python
>>> datation_C14(0.528)
5307.2562507425255
A. Crouzet 41 cbe
Maths. approfondies Chapitre 3 – Introduction à l’informatique avec Python
1 import math
2 def datation_C14(p):
3 return -8310*math.log(p)
Exercice 5
1. La fonction renvoie 1 si l’entier est supérieur ou égal à 10, −1 si l’entier est inférieur ou égal
à 5 et 0 sinon, c’est-à-dire si le nombre est strictement entre 5 et 10.
2. On enchaîne les elif :
CODE Code Python
1 def resultat_bac(n):
2 if n < 10:
3 return 0
4 elif n < 12: # nécessairement, 𝑛 ⩾ 10
5 return 1
6 elif n < 14: # nécessairement, 𝑛 ⩾ 12
7 return 2
8 elif n < 16: # nécessairement, 𝑛 ⩾ 14
9 return 3
10 else: # nécessairement, 𝑛 ⩾ 16
11 return 4
Exercice 6
1. a//b renvoie la division entière de a par b, c’est-à-dire le quotient de la division euclidienne
de 𝑎 par 𝑏.
a%b renvoie le reste de la division euclidienne de 𝑎 par 𝑏.
2. On utilise ce qui précède : 𝑛 est pair si et seulement si le reste de la division par 2 est nul.
Ainsi :
CODE Code Python
1 def pair(n):
2 if n%2 == 0: # si le reste est nul, donc si n est pair
3 return 1
4 else: # sinon
5 return 0
3. De la même manière :
CODE Code Python
1 def divise(n,p):
2 if n%p == 0: # si le reste est nul, donc n est divisible par p
3 return 1
4 else: # sinon
5 return 0
Exercice 7
On utilise l’instruction range(deb,fin,pas), qui va de deb (inclus) à fin (exclus) par pas de
pas.
1. Rapidement :
A. Crouzet 42 cbe
Maths. approfondies Chapitre 3 – Introduction à l’informatique avec Python
range(2,12,2)
range(0,35,5)
range(7,12) # Le pas vaut 1 par défaut
def somme_entier(n):
somme = 0
for i in range(n+1): # Attention on veut la somme jusqu'à n
somme = somme + i
return somme
3. De même :
CODE Code Python
def somme_carre(n):
somme = 0
for i in range(n+1): # Attention on veut la somme jusqu'à n
somme = somme + i**2
return somme
Par exemple :
Console Python
>>> somme_carre(10)
385
def somme_impaire(n):
somme = 0
for i in range(1, 2*n+2, 2): # Attention on veut la somme jusqu'à 2n+1
somme = somme + i
return somme
Exercice 8
1. L’instruction random.randint(a,b) permet de renvoyer un nombre entier aléatoire (ou plu-
tôt, pseudo-aléatoire) entre a et b, tous les deux inclus. Dans l’année, on verra la même instruc-
tion, mais venant de la bibliothèque numpy. Dans ce cas-là, ce sera de a inclus à b exclus.
A. Crouzet 43 cbe
Maths. approfondies Chapitre 3 – Introduction à l’informatique avec Python
import random
4. La fonction mystere2 effectue une boucle qui s’arrête à la 𝑛-ième itération, lorsque 𝑖 vaut
𝑛. Elle met dans res à chaque fois le terme 𝑖2 . Ainsi, elle calcule la somme des carrées de 0 à
𝑛 − 1. Pour que cela fonction, et que la boucle puisse s’arrêter, il faut augmenter 𝑖 de 1 à chaque
étape. Il faut donc rajouter à la ligne 6 :
i = i+1
Exercice 9
Ce sont des fonctions simples, pour se mettre en jambe sur les fonctions. Bien sûr, cela utilise
éventuellement d’autres fonctions usuelles (instructions conditionnelles, par exemple)
CODE Code Python
1 def mult(n,p):
2 return n*p
3
4 def energie(m):
5 return m*(300000000**2)
6
7 def majeur(n):
8 if n >= 18:
9 return True
10 else:
11 return False
1 def majeur(n):
2 return n>=18 # Renvoie True si c'est vrai, False sinon
1 def bissextile(n):
2 if n%4 == 0:
3 if n%100 == 0:
4 if n%400 == 0:
5 return True # Multiple de 400, c'est oui
6 else:
7 return False # Multiple de 100 uniquement, c'est non
8 else:
9 return True # Multiple de 4 uniquement : c'est oui
10 else:
11 return False # Pas multiple de 4 : c'est non
A. Crouzet 44 cbe
Maths. approfondies Chapitre 3 – Introduction à l’informatique avec Python
En utilisant les opérations sur les booléens (et, ou, ...), on peut être très efficace, à défaut d’être
lisible :
CODE Code Python
1 def bissextile2(n):
2 return (n%4==0 and n%100!=0) or (n%4==0 and n%100==0 and n%400==0)
Console Python
>>> bissextile2(2020)
True
>>> bissextile2(2021)
False
>>> bissextile2(2024)
True
Exercice 10
C’est un exercice d’utilisation des règles sur les listes.
1.
CODE Code Python
1 L=[2,3,5,7,11,13,17,19,23,29,31]
2 cinq = L[4] # Attention : on commence à 0 !
2.
CODE Code Python
3.
CODE Code Python
4. L[0] renvoie le premier élément de L, c’est-à-dire [0,1]. Ainsi, L[0][1] renvoie le 2e élément
de cette liste, c’est-à-dire 1.
len(L) renvoie 3, car il y a trois éléments (eux même étant des listes). len(L[1]) renvoie 3, car
L[1] vaut [2,3,4] composé de trois éléments. On obtient 4 en faisant L[1][2] et 5 en faisant
L[2][0]. On vérifie :
Console Python
>>> L=[[0,1],[2,3,4],[5,6]]
>>> L[0][1]
1
>>> len(L)
3
>>> len(L[1])
3
>>> L[1][2]
4
>>> L[2][0]
5
A. Crouzet 45 cbe
Maths. approfondies Chapitre 3 – Introduction à l’informatique avec Python
5. On parcourt toutes les listes de listes et on ajoute les éléments à la variable resultat. Cela
calcule donc la somme de tous les termes présents dans la liste.
6. Il suffit de modifier l’ajout :
CODE Code Python
1 def somme(L):
2 resultat=0
3 for i in range(len(L)):
4 for j in range(len(L[i])):
5 resultat=resultat+L[i][j]**2
6 return resultat
Exercice 11
1. a) On a :
Console Python
>>> ligne_magique([[1,4],[2,3]])
True
>>> ligne_magique([[1,2,3],[4,5,6],[7,8,9]])
False
b) Elles servent à créer une variable somme contenant la somme des termes de la ligne 0 (i.e.
de la première ligne). Dans le cas de L, cela vaut 1 + 4 = 5 et dans le deuxième cas cela vaut
1 + 2 + 3 = 6.
c) On vérifie, pour toutes les lignes, si la somme des termes valent somme. Si ce n’est pas le cas,
on renvoie False.
d) A la fin, si on ne s’est pas arrêté avant, on renvoie True. Ce programme permet donc de
vérifier si la somme des termes de chaque ligne donne la même valeur.
2. On s’inspire du précédent, mais en faisant sur les colonnes :
CODE Code Python
1 def colonne_magique(L):
2 n=len(L)
3 somme=0
4 for i in range(n):
5 somme=somme+L[i][0] # Somme de la première colonne
6 for i in range(1,n):
7 colonne=0
8 for j in range(n):
9 colonne = colonne + L[j][i] # On ajoute les termes de la colonne i
10 if (colonne!=somme):
11 return False
12 return True
3. On vérifie trois choses : que la somme des lignes soit la même (fonction ligne_magique, que
la somme des colonnes soit la même (fonction colonne_magique mais aussi que cette somme
soit la même sur les lignes et les colonnes :
CODE Code Python
1 def est_carre_magique(L):
2 if ligne_magique(L) and colonne_magique(L): # ça commence bien
3 ligne = 0
4 colonne = 0
5 for i in range(len(L)):
A. Crouzet 46 cbe
Maths. approfondies Chapitre 3 – Introduction à l’informatique avec Python
Exercice 12
On va simplement parcourir la liste à chaque fois, en prenant le plus grand (via max) et le plus
petit (via min). On les enlève via l’instruction remove.
CODE Code Python
1 def appariement(L):
2 if len(L)<=1: return L # S'il y a un seul élement, on ne peut rien faire
3 M=L[:] # On créé une copie
4 tirage=[] # Notre tirage, pour l'instant vide
5 while len(M)>=2: # Tant qu'on peut faire des couples
6 petit=min(M) # On prend le plus grand
7 grand=max(M) # On prend le plus petit
8 tirage.append([L.index(petit), L.index(grand)]) # On cherche l'index (i.e.
9 M.remove(petit) # la position du plus petit et grand, puis on les
10 M.remove(grand) # enlève de la liste.
11 return tirage
12
13 tirage = [10, 32, 29, 45, 72, 2]
14
15 print(appariement(tirage))
Remarque
Pour ne pas détruire la liste de départ, on créé une copie de la liste. Pour cela, l’instruction
M = L ne convient pas, car cela en réalité désigne la même liste. Il faut donc écrire M = L[:]
pour forcer une copie.
A. Crouzet 47 cbe