EduPython1 0
EduPython1 0
EduPython1 0
1 Présentation 4
I) Pourquoi EduPython ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1) Le choix de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2) Les plus d’EduPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3) D’AmiensPython à EduPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
II) Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
III) Hello world ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4 La tortue 33
I) Commencer une nouvelle figure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
II) Avancer, reculer, tourner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
III) Tracer des cercles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
IV) La tortue : Afficher, Cacher, Vitesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
V) Le crayon : lever, baisser, taille, couleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
VI) L’écran : effacer, colorer le fond, afficher un texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5 Les graphiques 39
I) Placer des points, Afficher le repère, Les couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
II) Nuage de points ou diagrammeXY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
III) Les axes et la grille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
IV) Titres et légendes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
V) Repères multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6 Les listes 44
I) Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
II) Créer une liste, ajouter des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
III) Retirer des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
IV) Rechercher, Compter, Ordonner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
V) Opérations sur les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7 Probabilités et statistiques 55
I) Statistiques descriptives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
II) Simulation et échantillonnage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
III) Diagrammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
IV) Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9 Fonctions 76
I) Exemple de fonctions mathématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
II) Fonction au sens informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
III) Une fonction peut en cacher une autre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
IV) Récursivité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5) Quand je tente d’ouvrir un fichier .py, l’ordinateur me demande avec quoi l’ouvrir. . . . . . 82
II) A propos de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
1) Pourquoi dites-vous que Python est un langage très puissant ? . . . . . . . . . . . . . . . . 82
2) Pourtant Python n’est pas précis dans les calculs ! . . . . . . . . . . . . . . . . . . . . . . . 82
3) Les élèves éprouvent de grandes difficultés à utiliser « for i in range · · · » . . . . . . . . . 82
4) J’ai le message : "UnicodeEncodeError : ’ascii’ codec... . . . . . . . . . . . . . . . . . . . . . 83
5) Que signifie ce message d’erreur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
III) EduPython et l’enseignement ISN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
11 Plus de 80 programmes 84
I) 40 programmes simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
II) 40 autres programmes plus élaborés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Présentation
J’ai eu plaisir à réaliser avec Vincent MAILLE et François PRÉDINAS la précédente documentation Amiens-
Python, fruit de trois années de travail et de collaboration professionnelle et amicale.
L’évolution de Python 2 vers Python 3 était inéluctable et semble à présent opportune, avec la traduction des prin-
cipales bibliothèques, et l’entrée de la programmation dans les programmes de Classe Préparatoire aux Grandes
Écoles à la rentrée 2013.
Vincent MAILLE a réalisé la configuration EduPython, et m’a aidée dans la compilation de cette nouvelle docu-
mentation EduPython, qui est principalement une mise à jour de la précédente.
Je tiens à remercier Vincent MAILLE et François PRÉDINAS pour ce remarquable travail sur lequel je me suis
appuyée.
Les exemples sont les mêmes, mais chaque programme a été retravaillé. Quelques définitions et remarques ont
évolué.
Nous serons attentifs à vos retours concernant cette documentation ou l’usage d’EduPython, et heureux que vous
nous teniez informé à l’adresse [email protected].
I) Pourquoi EduPython ?
1) Le choix de Python
Le choix du langage Python était assez naturel pour différentes raisons :
◮ Un langage simple et mathématiquement puissant pour lequel on trouve des bibliothèques mathématiques
très évoluées dans de multiples domaines (traitement de l’image, analyse de Fourier, calcul numérique...).
◮ Le langage Python est libre et gratuit, et peut donc être installé dans les établissements et dans les foyers
des élèves.
◮ Enfin l’apparition du langage Python dans les programmes de CPGE, nous a conforté dans notre opinion.
EduPython est donc une version héritée du Python 3.2, ainsi un programme réalisé sous Python 3.2 fonction-
nera aussi avec le logiciel EduPython. Mais l’inverse n’est pas forcément vrai si vous avez utilisé des fonction de
la bibliothèque lycee.
3) D’AmiensPython à EduPython
Faut-il passer à EduPython si l’on est habitué à AmiensPython ?
C’est vous qui voyez... Il y en a qui ont essayé... ils n’ont pas eu trop de problèmes...
A l’époque où AmiensPython avait été crée, les bibliothèque de sortie graphique matplotlib n’existait pas
sous Python 3, d’où notre choix de rester sur du Python 2. Aujourd’hui toutes les bibliothèques nécessaires existent
pour Python 3 et dans la mesure où Python fait son apparition dans les classes préparatoires aux grandes écoles,
il semblait intéressant de proposer cette possibilité de programmer en Python 3, dans la mesure où la version 2
n’est plus mise à jour. Cependant Python 2 reste encore extrêmement utilisé dans le monde.
II) Installation
Pour installer EduPython, rien de plus simple, rendez-vous sur le site officiel d’EduPython, téléchargez l’ins-
tallateur et exécutez-le en renseignant l’emplacement où vous souhaitez installer le logiciel. Si vous ne savez pas
où l’installer, lisez la section suivante.
Où installer EduPython ? Tout dépend de ce que vous voulez en faire...
◮ Installation sur une clé USB : dans ce cas choisissez le lecteur représentant votre clef, l’installation se fera
alors dans un dossier nommé « EduPython ».
◮ Installation sur un ordinateur personnel : même principe que pour la clé USB, choisissez un emplacement
qui vous convient.
◮ Installation sur réseau si vous êtes administrateur : installez EduPython dans un dossier en lecture seule
pour éviter qu’une erreur de manipulation d’un élève ne se répercute sur tout le reste du lycée.
◮ Installation pour une classe si vous êtes professeur : installez EduPython dans le lecteur de la classe de
vos élèves et de préférence dans un dossier en lecture seule (le dossier fiche par exemple qui se trouve dans
le dossier _commun convient parfaitement).
Version 1.0 EduPython 5
Hello world ! Présentation
◮ Installation sur votre compte personnel dans un établissement (si vous êtes élève ou enseignant) : installez
alors Python sur votre lecteur personnel (celui qui porte votre nom en général).
Remarque : Du fait que nous utilisons une version portable de Python, votre ordinateur ne saura pas ouvrir
de lui-même les programmes Python (.py). Pour exécuter un programme vous devrez donc le rechercher dans vos
dossiers et vos fichiers à partir de l’interface EduPython déjà ouverte.
D : La barre de menu
E : La barre d’outils
Nous ne détaillerons pas davantage ici la barre d’outils très riche qui nous semble relativement intuitive à
utiliser.
Notez cependant que pour utiliser la bibliothèque lycee que nous avons réalisée, un programme Python devra
commencer par :
from lycee import * (Pas d’accent à lycee et un espace après import)
l’interface d’EduPython ajoute automatiquement cette ligne quand vous cliquez sur « nouveau ».
Remarque:
• Si vous oubliez l’espace entre le import et *, le programme fonctionnera mais vous ne bénéficierez pas
de l’auto complétion et de l’aide par info bulle.
• D’autre part, la première exécution peut parfois prendre un peu de temps.
Sommaire
I) Les bases du langage Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1) La gestion des espaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2) Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3) Majuscules ou minuscules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4) Le rôle du symbole =, l’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
II) Entrées/Sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1) Affichage et calculs simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2) Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3) Demande d’un nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4) Demande d’un texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
III) Tests et conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1) Si ... alors ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2) Si ... alors ... sinon ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3) Hormis les cas précédents, si... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4) Comparateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5) Opérateurs logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
IV) Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1) Boucle dont on connait le nombre d’itérations . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2) Boucle conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Télécharger
Code: Extrait
a=2
b=6
if a != 0 :
print ( " Il y a une unique s o l u t i o n: " )
print ( b / a )
Aperçu du résultat dans la console
Indication:
On peut aussi appuyer sur la touche de tabulation ⇆ , à gauche de la touche "A" pour gérer l’indentation.
Remarque:
Afin que le programme fonctionne, nous avons attribué à a et b des valeurs arbitraires. Il est évidemment
plus intéressant de demander des valeurs à l’utilisateur mais ceci sera traité plus loin.
2) Commentaires
#
Le symbole # (se lit « croisillon », « hash »en anglais , symbole proche du « dièse ») permet de faire figurer
dans le corps du programme un commentaire qui ne sera pas pris en compte lors de son exécution. # porte
sur le reste de la ligne.
Télécharger
3) Majuscules ou minuscules
Les instructions Python s’écrivent en minuscules.
On peut utiliser des majuscules dans les noms de variables. Par contre, il faudra l’écrire exactement de la même
façon dans la suite du programme, en recopiant bien minuscules et majuscules : c’est ce qu’on appelle "respecter
la casse".
Télécharger
y= 2 x + 6
=
Le symbole = n’est pas celui de l’égalité mathématique, il n’est d’ailleurs pas symétrique.
Il s’agit d’affecter une valeur à une variable : on stocke une valeur numérique ou du texte dans une mémoire.
La syntaxe est N omDeLaV ariable = valeur.
Télécharger
Code: affectation 1
a=2 # a vaut 2
b = 3 . 1 # b vaut 3 , 1
s = b + 3 # s vaut 6 , 1
c , d = 4 .2 , 7 # c vaut 4 , 2 et d vaut 7
e = " b o n j o u r" # e vaut " b o n j o u r" ( chaine de c a r a c t è r e s)
f = " prêt à faire des m a t h é m a t i q u e s ? "
# f vaut " prêt à faire des m a t h é m a t i q u e s ?" ( chaine de c a r a c t è r e s)
Remarque:
– Évidemment si vous exécutez ce programme rien de visible ne se passe puisqu’aucun affichage n’est de-
mandé.
– On peut utiliser l’affectation simultanée a,b=2,3.1 à la place des deux premières lignes du code précédent.
Indication:
Quand on veut définir une chaine de caractères, on la délimite soit à l’aide de guillemets " " soit d’apostrophes
’ ’.
Si la chaine de caractères que l’on veut définir est Vous avez "gagné"., on utilisera les apostrophes pour
la délimiter puisqu’elle contient des guillemets. On écrira par exemple :
De même quand la chaine de caractères contient une apostrophe, on la délimite par des guillemets.
Télécharger
Télécharger
Code: affectation 3
Code: affectation 2
a , b =3 , 2
a , b =3 , 2
a=a+b
a , b = a +b , a - b
b =a - b
print (a , b )
print (a , b )
Aperçu du résultat dans la console
Aperçu du résultat dans la console
5 1
5 3
Indication:
Dans l’exemple de gauche ci-dessus, les valeurs de a et b sont affectées simultanément en utilisant les valeurs
des lignes précédentes. En revanche dans celui de droite, les affectations sont successives, ce qui explique les
résultats différents. Ainsi a,b = b,a échange les valeurs des deux variables a et b.
Télécharger
II) Entrées/Sorties
1) Affichage et calculs simples
Télécharger
Code: affichages
print ( " Bonjour , " )
print ( " ce p r o g r a m m e c a l c u l e 2 + 3 = " , end = " " )
print (2+3)
print ( " et 3 ( -2 )= " ,3 * -2 )
Aperçu du résultat dans la console
Bonjour,
ce programme calcule 2+3=5
et 3(-2)= -6
Indication:
– Quand on veut afficher plusieurs choses à la suite qui ne sont pas dans la même ligne de programme, on
indique de ne pas passer à la ligne suivante après l’affichage en finissant par ,end = ””.
– Quand un programme ne produit pas le résultat attendu, il est important de penser à ajouter l’affichage
des valeurs prises par les variables à chaque étape. Cela permet de comprendre ce que fait réellement le
programme, et facilite la recherche d’erreurs, quitte ensuite à supprimer cette ligne ou la transformer en
commentaire.
Remarque:
Pour un produit, le symbole * est indispensable, même s’il y a des parenthèses.
2) Les variables
Les noms de variables commencent par une lettre, puis on peut se faire succéder les caractères que l’on veut,
minuscules, majuscules, chiffres, etc. sans espace. Il est toujours commode d’employer des noms de variables
explicites.
Télécharger
Indication:
Pour dénombrer, on peut utiliser un compteur (variable nb6 ici) que l’on initialise à 0, avant la boucle. Puis
dans la boucle, on l’incrémente de 1 pour chaque cas favorable à l’aide de la commande nb6=nb6+1.
var=demande(question) lycee
affiche une fenêtre où figure le texte question et un cadre blanc dans lequel on entrera ce qui est demandé.
La réponse est alors affectée à la variable var, et contrairement à la fonction input, var contient un nombre
et non une chaîne de caractères.
Télécharger
l’opposé de -8 est 8
Remarque:
Important : Même si on veut demander l’entrée d’un nombre par l’utilisateur, il est conseillé d’écrire d’abord
un code en affectant des valeurs bien choisies dans le corps du programme. Ainsi, on peut le tester sans avoir
à entrer de valeur pour chaque essai : c’est plus efficace pour le débogage et l’optimisation.
Télécharger
On peut demander aux élèves de se renseigner sur les valeurs conseillées de l’IMC et connaissant sa taille,
donner l’intervalle dans lequel le poids « idéal »devrait être.
chaine=input(question)
Affiche une fenêtre où figure le texte question et un cadre blanc dans lequel on entrera la réponse, qui sera
considérée comme une chaine de caractères. Cette valeur est ensuite affectée à la variable chaine.
Télécharger
5
3+2
6
3+21
Remarque:
– nb + 1 est une addition alors que tex + ”1” est une concaténation.
– input renvoie une chaîne de caractère. Si vous effectuez des opérations : soustraction, division, l’erreur
sera repérée, mais pas pour une addition (concaténation) ni une multiplication par un entier.
Essayez de remplacer "demande" par "input" dans le programme opposé (3 programmes avant) et demandez
l’opposé de -8.
– La fonction texte_demande créée pour AmiensPython peut être remplacée par input.
if test :
effectue (une fois) les instructions indentées qui suivent lorsque le test est vérifié.
Télécharger
Remarque:
Le "alors" n’apparaît pas en Python, c’est l’indentation qui délimite le bloc à exécuter.
Indication:
On peut imbriquer les boucles, à la manière d’un arbre qui se dessinerait avec les indentations.
Télécharger
Télécharger
Code: Solutions de ax + b = 0
from lycee import *
a = d e m a n d e( " Entrez a de l ' é q u a t i o n ax + b = 0 " )
b = d e m a n d e( " Entrez m a i n t e n a n t b de l ' é q u a t i o n ax + b = 0 " )
if a != 0 :
print ( " Il y a une unique s o l u t i o n: " , end = " " )
print ( -b / a )
else :
if b == 0 :
print ( " Il y a une i n f i n i t é de s o l u t i o n s. " )
print ( " Tous les réels sont s o l u t i o n s. " )
else :
print ( " Il n 'y a aucune s o l u t i o n. " )
Remarque:
– Le "else" est aligné avec le "if" qui lui correspond.
– Taper " :" puis appuyer sur la touche "entrée" pour passer à la ligne, provoque l’indentation automatique.
Télécharger
Bonus : Représenter la fonction sur [-5 ;5] (Voir chapitre sur les graphiques)
Remarque:
On peut enchaîner autant de "elif" que nécessaire.
Il peut être intéressant de terminer une série de "elif" par un "else" afin d’être sûr de traiter tous les cas.
Indication:
elif est la contraction de « else if »Le "elif" remplace parfois avantageusement des boucles imbriquées.
4) Comparateurs
==
Ce symbole désigne l’égalité dans un test
Télécharger
< et >
Ces symboles désignent les inégalités strictes habituelles.
Télécharger
<= et >=
Ces combinaisons de symboles désignent les inégalités larges ¶ et ¾ habituelles.
Télécharger
!=
Cette combinaison de symboles signifient « différent de »...
(Le <> de python 2 ne fonctionne plus sous python 3.)
Télécharger
5) Opérateurs logiques
and
Permet d’effectuer une instruction si deux tests sont vérifiés simultanément.
or
Permet d’effectuer une instruction si au moins un test sur deux est vérifié.
On choisit un nombre entier au hasard entre 1 et 666. On note S l’évènement « Obtenir un multiple de 7 »et
T : « Le nombre se termine par 3 ». Ecrire un algorithme permettant de calculer p(T ), p(S), p(T ∩ S) et p(T ∪ S).
Télécharger
Indication:
On peut écrire plusieurs "and" ou plusieurs "or" dans la même instruction, il suffit alors de mettre des
parenthèses pour indiquer les priorités. Le mélange de "and" et "or" dans la même instruction peut faire
travailler la logique pure.
IV) Boucles
Comme dans la plupart des langages, il existe en Python principalement deux manières de réaliser une boucle,
c’est à dire une répétition d’un bloc d’instructions. Comme pour la commande si, la partie à répéter sera indentée
vers la droite, ce qui permet en plus une bonne visibilité de l’algorithme.
Remarque:
Notez que l’instruction se termine par deux points et que les instructions à répéter doivent être décalées,
exactement comme pour le if.
Nous n’allons pas trop entrer dans les détails de l’utilisation des listes ici, cela fait partie d’un autre chapitre
de la documentation. Mais voici quelques exemples d’utilisation d’une boucle for :
– On peut donner la liste de manière explicite :
for jour in [’Lundi’, ’Mardi’,’Mercredi’,’Jeudi’, ’Vendredi’, ’Samedi’,’Dimanche’]
– Ou aussi utiliser l’instruction range pour créer la liste d’entiers.
range(debut,f in,pas)
(Les paramètres debut et pas sont optionnels.)
Génère une liste d’entiers :
• Dans l’intervalle [0; f in[ si un seul paramètre est renseigné.
• Dans l’intervalle [debut; f in[ si 2 paramètres sont renseignés.
• Dans l’intervalle [debut; f in[ mais en réalisant une suite arithmétique de raison pas si les 3 paramètres
sont renseignés.
Télécharger
Télécharger
Remarque:
• En cas d’incohérence, la liste n’est pas Code: Modification du compteur
générée (liste vide) et la boucle n’est from lycee import *
donc pas exécutée. (Par exemple : for i in range ( 10 ):
for n in range (100,110,-2):). print (i , " " , end = " " )
• La variable compteur parcourt quoiqu’il ar- if i == 5 :
i=8
rive les valeurs demandées même si on tente
de modifier celle-ci. 0 1 2 3 4 5 6 7 8 9
n
i2 .
X
Un exemple qui calcule
i=1
Télécharger
Exemple : On lance 100 000 fois de suite deux dés cubiques simultanément, et on s’intéresse au nombre de fois
où la somme des deux faces vaut 7.
Télécharger
Code: Obtenir 7
from lycee import *
j = 0
for i in range ( 100000 ):
s = r a n d i n t(1 , 6 ) + r a n d i n t(1 , 6 )
if s == 7 :
j = j+1
f = j / 100000
print ( " le 7 est sorti " , j , " fois donc avec une f r é q u e n c e égale à " ,f )
Aperçu du résultat dans la console
le 7 est sorti 16788 fois donc avec une fréquence égale à 0.16788
2) Boucle conditionnelle
Dans la pratique, on ne connaît que rarement le nombre d’itérations pour arriver au résultat (d’où l’intérêt
d’un programme). On peut alors utiliser des boucles de type TANT QUE .... FAIRE : ...
while condition :
Exécute une instruction ou un bloc d’instructions tant que la condition est vérifiée. (La boucle peut donc
ne jamais être exécutée si, d’entrée la condition n’est pas remplie).
Télécharger
PGCD ( 12 , 14 ) = 2
On veut décomposer le produit de deux nombres en somme de carrés comme l’explique le schéma ci-dessous
dont on peut trouver plus de détails sur le site Mathématiques magiques de Thérèse Eveilleau. Sur le schéma
ci-dessous, l’algorithme donne :
14 × 20 = 142 + 62 + 62 + 22 + 22 + 22 .
Télécharger
Bonus : Modifier cet exemple pour que la réponse ne se termine plus par « +0 »
Exemple de modélisation de la marche aléatoire d’un robot sur une table carrée (20cm par 20cm), située à un
mètre du sol. Ce robot initialement placé au centre de la table bouge dans deux directions perpendiculaires, en
avant ou en arrière, à une vitesse de 1 cm par seconde.
Télécharger
Remarque:
– Lorsqu’il n’y a qu’une instruction à exécuter, il n’est pas nécessaire de retourner à la ligne et de l’indenter
(attention cependant à garder une bonne lisibilité du programme).
– Pour s’amuser, on peut remplacer les 4 lignes contenant des if par :
x, y = x + (2 - a) * reste(a, 2), y + (3 - a) * reste(a + 1,2)
– Au fait, le robot tombe-t-il toujours de la table ?
Sommaire
I) Puissance et factorielle d’un entier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
II) Quotient entier et reste d’une division euclidienne . . . . . . . . . . . . . . . . . . . . 24
III) Plus grand diviseur commun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
IV) Racine carrée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
V) Fonction exponentielle et logarithme népérien . . . . . . . . . . . . . . . . . . . . . . . 27
VI) Partie entière, Valeur absolue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
VII) Trigonométrie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
VIII)Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
IX) Le hasard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
puissance(a,n) lycee
Donne le résultat de an où a et n sont deux nombres.
Télécharger
2 ^ 4 = 4 ^ 2
Remarque:
Nous avons choisi de reprogrammer la fonction puissance afin d’éviter toute confusion chez les élèves mais
pour obtenir 28 on peut tout simplement taper 2**8.
factorial(n) lycee,math
Donne le résultat n! = 1 × 2 × 3 × · · · × (n − 1) × n. où n est un nombre entier.
n
X 1 1
Soient (un )n¾1 et (vn )n¾1 deux suites définies pour n ∈ N∗ par un = et vn = un +
. On peut montrer
k=0
k! n!
que ces deux suites sont adjacentes. Estimer une valeur approchée de leur limite commune à 10−5 près.
Télécharger
u 0 = 1.0 et v 0 = 2.0
u 1 = 2.0 et v 1 = 3.0
u 2 = 2.5 et v 2 = 3.0
u 3 = 2.6666666666666665 et v 3 = 2.833333333333333
u 4 = 2.708333333333333 et v 4 = 2.7499999999999996
u 5 = 2.7166666666666663 et v 5 = 2.7249999999999996
u 6 = 2.7180555555555554 et v 6 = 2.7194444444444446
u 7 = 2.7182539682539684 et v 7 = 2.7184523809523813
u 8 = 2.71827876984127 et v 8 = 2.7183035714285717
u 9 = 2.7182815255731922 et v 9 = 2.7182842813051145
la limite de (u_n) et (v_n) vaut 2.7182815255731922 à 0.00001 près
reste(a,b) lycee
Donne le reste de la division de a par b, c’est à dire l’unique entier r tel que a = bq + r où q est un entier
et r un entier naturel vérifiant 0 ¶ r < |b|.
quotient(a,b) lycee
Donne le quotient entier de la division de a par b, c’est à dire l’unique entier q tel que a = bq + r où q est
un entier et r un entier naturel vérifiant 0 ¶ r < |b|.
Imaginer un programme qui demande le nombre de décimales voulu et qui calcule le quotient avec la précision
demandée.
Télécharger
Remarque:
• Notez que ces deux fonctions existent déjà en python, le quotient de deux entiers pouvant être obtenu
par int(a/b) et le reste par a%b. Mais ces fonctions ne renvoient pas forcément les valeurs usuelles
lorsque l’on donne un diviseur négatif. Il s’agit de définir la division dans Z comme renvoyant toujours
un reste positif.
• La ligne print(quotient(a, b), ”,”,end = ””) se termine par end = ””, ce qui a pour effet de ne pas
retourner à la ligne après l’affichage, ainsi le résultat apparait sur une seule ligne.
pgcd(a,b) lycee
Retourne le pgcd des entiers a et b.
Un exemple de programme qui ajoute 2 fractions et retourne le résultat sous forme de fraction irréductible.
Cet algorithme pourra largement être optimisé selon le niveau et la rapidité des élèves, en particulier pour tout
ce qui concerne l’affichage du résultat s’il est entier par exemple.
Télécharger
Cet autre programme est l’algorithme d’Euclide étendu étudié en spécialité maths de terminale scientifique.
Cet exemple s’adresse donc à des élèves ayant déjà pratiqué l’activité algorithmique depuis 2 ans et est donc assez
complexe à appréhender pour un débutant.
Télécharger
sqrt(x) lycee,math
√
Retourne x où x est un nombre positif.
Le mathématicien grec Héron d’Alexandrie (Ier siècle après p J.-C.) a trouvé une formule pour calculer l’aire
d’un triangle connaissant la longueur de ces 3 côtés : A = p(p − a)(p − b)(p − c) où a, b et c représentent les
longueurs des 3 côtés de ce triangle et p son demi-périmètre. Traduisez cette formule dans un programme en Python.
Télécharger
Télécharger
exp(x) lycee,math
Retourne ex où x est un nombre réel.
ln(x) lycee
Retourne ln x où x est un nombre positif.
Remarque:
Dans le module math la fonction logarithme népérien se définit par math.log(. . . ). Mais pour plus de cohé-
rence, nous avons choisi de la renommer ln dans le module lycee.
floor(x) lycee,math
Retourne la partie entière du nombre x, c’est à dire le plus grand entier inférieur ou égal au réel x.
abs(x)
Retourne la valeur absolue x (ou distance à 0 dans le programme de collège).
VII) Trigonométrie
Par défaut dans la bibliothèque Python d’origine, comme dans tous les autres langages, les fonctions cos,
sin, tan sont définies pour des réels qui représentent des mesures d’angles en radians. Cependant, le fait que la
connaissance du radian ne soit plus exigible en seconde, nous a conduit à définir ces fonctions aussi pour des réels
qui représentent des mesures d’angles en degrés (ainsi que les fonctions réciproques).
Par défaut, puisque c’est la seule unité que les élèves connaissent, l’unité utilisée est le degré, cependant on peut
basculer d’un mode à l’autre avec la fonction suivante :
unite_angle(choix) lycee
Modifie l’unité par défaut utilisée par Python pour les fonctions trigonométriques :
unite_angle(′ deg′ ) passe en mode degré.
unite_angle(′ rad′ ) passe en mode radian.
print unite_angle() affiche l’unité en cours d’utilisation.
1er cas
Télécharger
2eme cas
pi lycee,math
Constante qui vaut une valeur approchée du nombre π.
Télécharger
Remarque:
Attention : pi est une variable comme les autres mais qui a été initialisée avec une certaine valeur. Ainsi si
dans un programme vous tapez pi=2, 2 sera alors la nouvelle valeur de π pour le programme. De même,
vous pouvez au besoin définir le nombre e=exp(1) au début d’un programme niveau Terminale.
Le savant grec Archimède en 250 avant Jésus-Christ utilisa des polygones réguliers de 96 côtés, et détermina
22
que le rapport de la circonférence d’un cercle à son diamètre a une valeur proche de . Parmi toutes les fractions
7
comprenant un dénominateur à un ou deux chiffres, quelles sont celles qui représentent une meilleure approximation
de π ?
Télécharger
IX) Le hasard
Il existe différentes manières de tirer un nombre au hasard selon ce que l’on a besoin de faire dans un pro-
gramme. Voici 3 fonctions qui devraient déjà répondre à la majorité de vos besoins :
Télécharger
a ,b , c =0 ,0 , 0
x , y = random () , random ()
if y > sqrt ( x ) : a = a + 1
elif y > x * x : b = b + 1
else : c = c + 1
print ( " On est dans la zone A " ,a , " fois sur 10 000 . " )
print ( " On est dans la zone B " ,b , " fois sur 10 000 . " )
print ( " On est dans la zone C " ,c , " fois sur 10 000 . " )
print ( " Donc les aires r e s p e c t i v e s des zones A , B et C " , end = " " )
print ( " sont e s t i m é e s à " , a / 10000 , " ," , b / 10000 , " et " , c / 10000 , end = " " )
print ( " unités d ' aire . " )
Si on a besoin de tirer un nombre décimal dans un autre intervalle que [0 ;1[, on utilisera la fonction suivante :
Enfin, pour des tirages sur des nombres entiers (typiquement des lancers de dés), une fonction est déjà pro-
grammée :
Exemple (Extrait d’un exercice de Math O’ Lycée) : Dans une urne contenant 100 boules numérotées de 1 à
100, on tire une boule au hasard, on note le résultat, on la remet, on en tire à nouveau une et on note le deuxième
résultat. Le but du jeu étant d’obtenir un score de 36, laquelle de ces deux règles offre la plus grande probabilité
de gagner ?
– Règle 1 : Le score est obtenu en calculant l’écart entre les deux résultats.
– Règle 2 : Le score est obtenu en conservant le plus petit des deux résultats.
Déterminer un programme simulant 10000 jeux et estimer les probabilités de gagner pour chacune des règles ?
Que peut-on conjecturer ?
Télécharger
Enfin, on peut aussi tirer un nombre selon une loi normale N (µ, σ) ainsi :
Remarque:
D’autres fonctions existent dans le module math de Python, vous pouvez retrouver l’intégralité des fonctions
disponibles sur la page officielle. Le module math étant chargé en même temps que le module lycee, vous
pouvez utiliser les fonctions de cette manière : math.fonction(...).
La tortue
Sommaire
I) Commencer une nouvelle figure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
II) Avancer, reculer, tourner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
III) Tracer des cercles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
IV) La tortue : Afficher, Cacher, Vitesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
V) Le crayon : lever, baisser, taille, couleur . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
VI) L’écran : effacer, colorer le fond, afficher un texte . . . . . . . . . . . . . . . . . . . . . 38
Souvenirs peut-être du temps où on étudiait le langage LOGO à l’école... Le langage Python possède lui aussi
une bibliothèque graphique qui permet de faire déplacer une tortue à l’écran, en lui donnant des instructions
simples (avancer, tourner à gauche, ...). Programmer avec la tortue, c’est souvent l’occasion de travailler un peu
avec de la géométrie classique ou repérée... Il peut aussi trouver à notre avis tout son intérêt au collège pour
travailler sur les grands théorèmes (Calculs d’angles et de distances).
Télécharger
On peut commencer par demander une figure
Code: Une maison. simple pour permettre aux élèves de comprendre
le principe. Par exemple : représenter la figure ci-
from lycee import * contre à l’aide de la tortue.
import turtle as tortue
tortue . f o r w a r d( 100 )
tortue . right ( 90 )
tortue . f o r w a r d( 100 )
tortue . right ( 90 )
tortue . f o r w a r d( 100 )
tortue . right ( 90 )
tortue . f o r w a r d( 100 )
tortue . right ( 30 )
tortue . f o r w a r d( 100 )
tortue . right ( 120 )
tortue . f o r w a r d( 100 )
tortue . m a i n l o o p ()
Télécharger
Code: Une église. Puis enchaînez sur des figures où il est nécessaire de faire
from lycee import * des calculs pour avancer : Représenter la figure ci-contre
import turtle as tortue à l’aide de la tortue.
tortue . left ( 90 )
tortue . f o r w a r d( 100 )
B = acos ( 40 / 100 )
tortue . right ( 90 - B )
tortue . f o r w a r d( 100 )
C = 180 - 2 * B
tortue . right ( 180 - C )
tortue . f o r w a r d( 100 )
tortue . right ( 90 - B )
tortue . f o r w a r d( 20 )
tortue . left ( 90 )
tortue . f o r w a r d( 100 )
tortue . right ( 50 )
FG = 20 / cos ( 40 )
tortue . f o r w a r d( FG )
tortue . right ( 40 )
HG = 80 - sqrt ( FG * FG - 20 * 20 )
tortue . f o r w a r d( HG )
tortue . right ( 90 )
tortue . f o r w a r d( 200 )
tortue . m a i n l o o p ()
Télécharger
tortue . m a i n l o o p ()
Télécharger
n = 10
for i in range ( n ):
tortue . circle ( 5 *i , 90 )
tortue . m a i n l o o p ()
Remarque:
Attention, on ne connaît a priori pas le centre de ce cercle... c’est d’ailleurs ce qui peut faire l’intérêt de
l’algorithme !
Télécharger
r = 100
tortue . right ( 90 )
tortue . circle (r , 180 )
tortue . circle ( 2 * r , 45 )
tortue . circle ( r * ( 2 - sqrt ( 2 )) , 90 )
tortue . circle ( 2 * r , 45 )
tortue . m a i n l o o p ()
Télécharger
r = 100
tortue . up ()
tortue . f o r w a r d( r )
tortue . down ()
tortue . left ( 90 )
tortue . circle ( 2 * r )
tortue . circle (r , 180 )
tortue . circle ( -r , 180 )
tortue . h i d e t u r t l e ()
tortue . m a i n l o o p ()
Télécharger
i = 0
while i < 120 :
tortue . right ( 90 )
tortue . f o r w a r d( 100 )
tortue . right ( 180 )
tortue . f o r w a r d( 100 )
tortue . right ( 90 )
tortue . circle ( 50 , 3 )
i = i + 1
tortue . m a i n l o o p ()
tortue.speed(v) turtle,lycee
Permet de régler la vitesse de la tortue. v est un nombre entier entre 1 et 10, 1 étant la vitesse la plus lente
et 10 la plus rapide.
Télécharger
tortue . p e n s i z e( 2 )
tortue . p e n c o l o r( 0 . 9 , 0 .9 , 0 . 2 )
tortue . b g c o l o r( ' blue ')
for etoile in range ( 12 ):
tortue . down ()
for b r a n c h e in range ( 5 ):
tortue . f o r w a r d( 30 )
tortue . left ( 144 )
tortue . up ()
tortue . f o r w a r d( 50 )
tortue . left ( 30 )
tortue.reset() turtle,lycee
Efface l’écran et repositionne la tortue dans sa position initiale
tortue.clear() turtle,lycee
Efface l’écran mais la position du crayon reste inchangée
tortue.write(texte) turtle,lycee
Affiche le texte texte à l’emplacement de la tortue. Celle-ci ne se déplace pas lors de l’affichage.
http ://docs.python.org/3.2/library/turtle.html
Les graphiques
Sommaire
I) Placer des points, Afficher le repère, Les couleurs . . . . . . . . . . . . . . . . . . . . . 39
II) Nuage de points ou diagrammeXY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
III) Les axes et la grille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
IV) Titres et légendes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
V) Repères multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Si la tortue permet de revisiter la géométrie de collège, vous remarquerez rapidement que les possibilités
graphiques sont très limitées pour un usage en classe. Nous vous présentons ici un nouvel objet inclus dans
AmiensPython, l’objet repere qui va nous permettre de tracer des graphes de fonctions et autres diagrammes.
Comme pour la tortue, les actions (appelées méthodes en programmation objet) seront exécutées par des com-
mandes du type « repere.action »...
repere.plot(x,y,options) matplotlib,lycee
Place dans la fenêtre graphique un point de coordonnées (x,y). Si aucune échelle n’est spécifiée, une échelle
adaptée est proposée.
Le point est représenté avec la couleur et le style défini par la chaine options. Cette chaine comprend
usuellement deux caractères : le premier étant une couleur, le deuxième le style, comme l’indique le tableau
ci-dessous :
Couleur Style
b bleu - ligne continue
g vert -- tirets
r rouge : pointillés
c cyan . des points
m magenta o des billes
y jaune x des croix
k noir v des triangles
w blanc -. points-tirets
... ...
Exemple:
la commande repere.plot(2,3,’gx’) place un point sous forme de croix verte de coordonnées (2,3).
Version 1.0 EduPython 39
Nuage de points ou diagrammeXY Les graphiques
Remarque:
Les options ’-’ ou ’–’ n’ont pas d’effet sur les points, mais seront utiles pour tracer des courbes, comme nous
le verrons pas la suite.
Exemple:
On cherche, dans un repère orthonormé,
tous les points de coordonnées (x,y) tels
que x ∗ (6 − x) < y ∗ (8 + y).
Télécharger
Remarque:
Le programme se termine par l’instruction repere.show() qui a pour effet, vous l’aurez déjà deviné, d’afficher
la fenêtre.
repere.plot(X,Y ) matplotlib,lycee
Dessine la fonction affine par morceaux passant par les points de coordonnées (xi ,yi ) où les nombres xi et
yi sont respectivement les éléments de la liste X et la liste Y .
Pour dessiner le segment [AB], l’instruction repere.plot([xA,xB],[yA,yB]) suffit.
De part la simplicité de l’utilisation des listes, il devient alors très facile de tracer la représentation graphique
d’une fonction affine :
Télécharger
Remarque:
Précision technique : ici, on a recours à l’instruction np.arange(debut,fin,pas), qui crée une liste de valeurs
entre debut et fin avec un pas pouvant être décimal (contrairement au range). Le gros avantage de cet
objet, c’est que l’on peut alors effectuer des opérations comme x ∗ x ou 3 ∗ x + 4... (Consultez l’aide sur les
objets de type NDArray de la bibliothèque numpy pour plus d’informations.)
Autre exemple : une puce située à l’origine d’un axe gradué effectue 1 000 sauts successifs. A chaque saut,
elle avance ou recule aléatoirement d’une unité sans préférence pour un sens ou l’autre. Représentez le chemin
parcouru par la puce.
Télécharger 40
Remarque:
Ici le programme donné ne trace qu’une seule courbe, mais si vous décidez de ne pas fermer la fenêtre
graphique et de relancer le programme, les graphiques se superposent et une échelle adaptée est proposée ce
qui représente un apport pédagogique. Le paragraphe suivant vous explique néanmoins comment forcer le
nettoyage de la fenêtre en début de programme.
repere.clf() matplotlib,lycee
Efface et ré-initialise le contenu de la fenêtre graphique.
Par défaut, si aucune échelle n’est imposée, celle-ci est calculée automatiquement. Quelquefois, il peut s’avérer
nécessaire de la modifier manuellement.
repere.grid(mode) matplotlib,lycee
si le booléen mode vaut True, la grille est affichée, si mode vaut False, elle est masquée, comme c’est le cas
par défaut.
repere.title(texte) matplotlib,lycee
Ajoute le titre texte au graphique.
repere.text(x,y,texte) matplotlib,lycee
Affiche le texte texte sur le graphique à la position (x,y).
Télécharger
Hauteur de la balle en fonction du temps
50
Code: Chute d’une balle. 45 h(t) = h0 1
2
gt2
repere . plot (t , 50 - 0 . 5 * 0 . 8 * t ** 2 )
repere . title ( ' H a u t e u r de la balle 30
en f o n c t i o n du temps ')
25
repere . ylabel ( u " h a u t e u r en mètres " )
repere . xlabel ( u " temps en s e c o n d e s" ) 20
repere . text (6 , 45 , r ' $h = h_0 -
15
\ frac { 1 } { 2 } gt ^ 2$ ')
repere . show () 100 2 4 6 8 10
temps en secondes
Remarque:
Vous aurez remarqué qu’en ajoutant un r à la chaine de texte, on peut faire afficher des formules mathéma-
tiques pour peu que l’on connaisse un minimum la syntaxe LATEX... Enfin, on est davantage dans la décoration
qu’autre chose !
V) Repères multiples
Il existe une instruction permettant de fractionner la fenêtre graphique en plusieurs sous graphiques. C’est
peut-être un peu complexe pour des élèves, nous vous laissons donc juger de l’utilité de leur présenter cette fonction.
repere.subplot(n) matplotlib,lycee
Fragmente la fenêtre graphique en plusieurs repères. n est un nombre entier de 3 chiffres construit ainsi :
– Le chiffre des centaines indique le nombre de lignes à créer.
– Le chiffre des dizaines indique le nombre de colonnes à créer.
– Le chiffre des unités indique quel est le repère actif.
Exemple:
1 2 3
L’instruction repere.subplot(234) découpe la fenêtre graphique en 6 parties numérotées ainsi :
4 5 6
Pour l’enseignant cela peut être pertinent avec le vidéoprojecteur pour donner du sens à la notion de probabilité
comme dans l’exemple ci-dessous : faire apparaître ce qui est convergent et ce qui est chaotique...
Télécharger
Les listes
Sommaire
I) Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
II) Créer une liste, ajouter des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
III) Retirer des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
IV) Rechercher, Compter, Ordonner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
V) Opérations sur les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
I) Définition
Une liste est une suite d’éléments numérotés dont le premier indice est 0. Une liste n’a donc (presque) pas de
limite de taille. Les listes existent dans le langage Python, sans besoin de la bibliothèque lycee.
Python affiche la liste comme un « vecteur ligne »dont les composantes sont les éléments de cette liste séparés
par une virgule. La liste est délimitée par des crochets.
Pour atteindre l’élément d’indice i de la liste L, il suffit d’écrire L[i].
L’exemple suivant permet de démontrer que tous les ans, il y a au moins un vendredi 13 dans l’année.
Télécharger
Code: Vendredi 13
from lycee import *
jours =[ " Lundi " ," Mardi " ," M e r c r e d i" ," Jeudi " ," V e n d r e d i" ," Samedi " ," D i m a n c h e" ]
mois =[ " J a n v i e r" ," F é v r i e r" ," Mars " ," Avril " ," Mai " ," Juin " ," J u i l l e t" ," Août " ]
mois = mois +[ " S e p t e m b r e" ," O c t o b r e" ," N o v e m b r e" ," D é c e m b r e" ]
n b j o u r s =[ 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ]
for jan in range ( 7 ):
print ( " Si le 13 J a n v i e r est un " , jours [ jan ] ," : " , end = " " )
m = 0 ; j = jan ;
while reste (j , 7 )!= 4 and m < 12 :
j = j + n b j o u r s[ m ]
m=m+1;
if reste (j , 7 )== 4 :
print ( " Le 13 " , mois [ m ] , " sera un V e n d r e d i 13 " )
else :
print ( " il n 'y a pas de V e n d r e d i 13 " )
Aperçu du résultat dans la console
Les éléments d’une liste peuvent être des nombres, du texte, voire des listes eux-mêmes. On peut aussi mélanger
les types d’objets dans une même liste comme ci-dessous, lorsque cela semble utile.
Ici on propose de stocker dans une liste [A,xA ,yA ,B,xB ,yB ,C,xC ,yC ,D,xD ,yD ] et l’on teste si ABCD est un
parallélogramme.
Télécharger
Remarque:
ATTENTION ! Respectez bien la syntaxe entre crochets pour écrire votre liste. Il existe en effet un autre
objet en Python : le tuple (N-uplet) qui se note entre parenthèses, il ressemble comme deux gouttes d’eau
à la liste à ceci près par exemple que l’on ne peut pas modifier les éléments. Nous ne parlerons pas de cet
objet dans cet ouvrage.
Version 1.0 EduPython 45
Créer une liste, ajouter des éléments Les listes
len(list)
Renvoie le nombre d’éléments de la liste list
liste_demande(prompt) lycee
Ouvre une fenêtre contenant le texte prompt, attend une liste dont les éléments sont séparés par des virgules
et renvoie cette liste.
Télécharger
(1+2X+3X^2)(3-X+2X^2)=3+5X+9X^2+X^3+6X^4
Notez la présence de la fonction affiche_poly qui transforme une liste en un polynôme pour plus de lisibilité.
Cette fonction n’existe pas dans le langage Python d’origine :
affiche_poly(L) lycee
Renvoie une chaîne de caractères représentant la liste L sous forme d’un polynôme,L[n] étant le coefficient
de degré n.
Par exemple affiche_poly([1,0,4]) donne 1 + 4X 2
• Avec une formule, lorsque l’on connaît une expression explicite des éléments de la liste, exemple pour obtenir
la liste des 10 premiers carrés parfaits : L = [i ∗ i for i in range(10)]
• Enfin, on peut partir d’une liste existante ou vide (notée : [ ] ) et ajouter les éléments au fur et à mesure,
grâce aux instructions append et insert détaillées ci-dessous :
list.append(a)
Ajoute un élément a à la liste list en fin de liste
Télécharger
Si vous avez besoin d’insérer un élément à un autre endroit qu’en fin de liste, on utilisera la fonction suivante
(en particulier pour insérer en début de liste) :
list.insert(j,a)
Insère l’élément a au rang j de la liste list
Télécharger
En réalité, l’utilisation de listes trouve son intérêt quand on a besoin de conserver les valeurs pour la suite
du programme (extraire une moyenne, réutiliser des valeurs, ...). A vous de trouver l’équilibre entre lisibilité du
programme et performance de celui-ci.
Par p
exemple : Que dire de la suite (un ) définie par u0 = 2, u1 = 5 et pour tout entier positif n,
un+1 = un−1 × un + 9(un + 1) ?
On peut choisir soit d’utiliser une liste pour conserver toutes les valeurs, ou bien se limiter à deux variables a
et b qui contiendront à chaque étape les valeurs de un−1 et un :
Télécharger
Télécharger
[2, 5, 8.0, 11.0, 14.0, 17.0, 20.0, 23.0 ... 2 5 8.0 11.0 14.0 17.0 20.0 23.0 ...
list.remove(e)
Supprime la première occurrence de l’élément e dans la liste list
Indication:
Attention, si vous essayez de retirer un élément d’une liste alors qu’il n’en fait pas partie, un message d’erreur
sera renvoyé par la console python :
Traceback (innermost last):
File "<interactive input>", line 1, in ?
ValueError: list.index(x): x not in list
Il peut être pertinent de tester si l’élément appartient à une liste à l’aide de la fonction suivante :
e in list
Teste si l’élément e est dans la liste list et renvoie VRAI ou FAUX
Télécharger
Vous pouvez aussi savoir qu’un élément a n’est pas dans la liste L avec le test a not in L
Enfin, si vous souhaitez supprimer le ième élément d’une liste, il faut utiliser la commande pop :
list.pop(i)
Supprime l’élément d’indice i de la liste list.
Télécharger
list.index(e)
Renvoie l’indice de la première occurrence de l’élément e dans la liste liste. Si l’élément e n’est pas dans la
liste, une erreur se produit, pensez donc à tester avec la commande in la présence de l’élément dans la liste.
list.count(e)
Renvoie le nombre d’occurrences de la valeur e dans la liste list
Télécharger
[1, 5, 3, 3, 6, 3, 5, 3, 1, 1, 6, 1, 1, 3, 6, 6....
Sur 1 000 lancers, vous avez obtenu 177 fois le chiffre 6.
Le premier 6 a été obtenu au tirage numéro 5
list.sort()
Ordonne la liste list (par ordre croissant des valeurs)
sorted(list)
Retourne une liste ordonnée qui contient les éléments d’une liste de départ list
Remarque:
Notez bien la différence entre L.sort() qui modifie la liste L et sorted(L) qui renvoie la liste triée, mais L
n’est pas modifiée.
Télécharger
Indication:
Remarque importante : La dernière ligne du programme L = L1 indique que l’adresse de la liste L est
celle de la liste L1, mais ne recopie pas celle-ci, ce qui n’a pas ici d’importance, car une nouvelle liste L1 est
créée à l’itération suivante.
En effet, contrairement aux autres variables étudiées jusqu’à présent, les listes (dont on ne connaît pas la
taille a priori) sont des pointeurs (on utilise plutôt le terme d’alias en Python) et pointent donc vers des
adresses mémoire. Ainsi, si vous indiquez dans un programme L1 = L2, celui-ci comprendra que les listes L1
et L2 sont les mêmes objets, dans ce cas modifier L2 modifiera L1 et inversement. Pour pallier ce problème,
vous devrez saisir L2 = L1[:] pour obtenir une copie indépendante de la liste L1.
Télécharger Télécharger
Code: copie de l’adresse d’une liste Code: copie du contenu d’une liste
from lycee import * from lycee import *
A =[ " Bleu " ," Blanc " ," Rouge " ] A =[ " Bleu " ," Blanc " ," Rouge " ]
B=A B = A [:]
B [ 1 ]= " Vert " B [ 1 ]= " Vert "
print ( " A = " ,A ) print ( " A = " ,A )
print ( " B = " ,B ) print ( " B = " ,B )
Télécharger
L1 + L2
Renvoie une liste contenant les éléments de la liste L1 suivis des éléments de la liste L2.
On peut par exemple l’utiliser pour concaténer différents échantillons (voir partie statistiques et probabilités).
L∗n
Renvoie une liste contenant les éléments de la liste L répétés n fois.
On utilise souvent cette instruction pour initialiser une liste. Par exemple, pour simuler une urne contenant
5 boules vertes et 3 rouges, on pourra taper : Urne = [”Verte”] ∗ 5 + [”Rouge”] ∗ 3. (Cf le chapitre statistiques et
probabilités.)
Ce dernier exemple implémente la méthode de Hörner, autrefois étudiée en première S. Cette méthode propose
un algorithme pour factoriser un polynôme lorsque l’on en connaît une racine. Le schéma ci-dessous illustre le cas
du polynôme X 3 − 7X 2 + 17X − 14 dont une racine évidente est 2. (Pour plus d’informations, nous vous invitons
à lire quelques explications de Serge SAUTON ) :
1 −7 17 −14
X 3 − 7X 2 + 17X − 14
a=2 ×a 2 + −10 14
1 −5 7 0 = (X − 2)(X 2 − 5X + 7)
Télécharger
1+X+X^2+X^3=(1+X)(1+X^2)
Probabilités et statistiques
Sommaire
I) Statistiques descriptives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
II) Simulation et échantillonnage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
III) Diagrammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
IV) Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
L’une des principales utilisations que nous pouvons faire d’une liste de valeurs est le traitement statistique
de celle-ci. Nous avons vu comment travailler sur les listes. A présent, découvrons les outils statistiques que nous
avons à notre disposition.
Ces fonctions ont été ajoutées dans le module lycee d’AmiensPython. Ce ne sont donc pas des fonctions de base
de Python, et vous devrez donc les recréer ou les recopier si vous souhaitez les utiliser avec un autre environnement.
I) Statistiques descriptives
Pour commencer, nous allons reprendre les opérations statistiques étudiées au collège et complétées au lycée.
compte(L,option) lycee
Renvoie la liste liste ordonnée par ordre croissant sans doublons et (éventuellement) :
• Si option vaut ′ effectif′, la liste des effectifs correspondant.
• Si option vaut ′ frequence′, la liste des fréquences correspondante.
Les dés de Sicherman sont deux dés à 6 faces : les faces du premier sont consi- b
tuées des numéros 1, 2, 2, 3, 3 et 4 et celles du second 1, 3, 4, 5, 6 et 8. Lorsque b
b
l’on jette ces 2 dés et que l’on ajoute les résultats des faces, on obtient non seule-
ment les mêmes possibilités qu’avec un dé classique (de 2 à 12), mais avec les b b b b
mêmes fréquences d’apparition ! Le programme ci-dessous lance mille fois deux b b
dés de Sicherman ainsi que deux dés classiques et compare graphiquement les b
b b
fréquences des sommes obtenues. (Sur une idée de Jean-Philippe BLAISE).
Télécharger
0.18
Code: Dés de Sicherman
0.16 from lycee import *
0.14
De1 =[1 ,2 ,2 ,3 ,3 , 4 ]
De2 =[1 ,3 ,4 ,5 ,6 , 8 ]
0.12
L1 =[]; L2 =[]
0.10 for i in range ( 10000 ):
0.08
L1 . append ( r a n d i n t(1 , 6 )+ r a n d i n t(1 , 6 ))
L2 . append ( De1 [ r a n d i n t(0 , 5 )]+ De2 [ r a n d i n t(0 , 5 )])
0.06
X , F = compte ( L1 , ' f r e q u e n c e ')
0.04 repere . plot (X ,F , ' bo ')
0.02
X , F = compte ( L2 , ' f r e q u e n c e ')
2 4 6 8 10 12
repere . plot (X ,F , ' rx ')
repere . show ()
Ce précédent exemple pourrait être ensuite repris et adapté pour répondre aux 2 défis suivants :
Défi 1 : Imaginer un programme pour déterminer la loi de probabilité. (Une preuve papier/crayon est ici largement
pertinente.)
Défi 2 : Existe-t-il d’autres dés à 6 faces composées d’entiers naturels et ayant les mêmes propriétés ? Imaginer
un programme pour répondre à cette question.
moyenne(xi,ni) lycee
Renvoie la moyenne arithmétique, il existe 3 manières d’utiliser cette fonction :
• Soit on indique une liste xi de données brutes
• Soit on indique une liste xi de valeurs et une liste ni de même taille correspondant aux effectifs.
• Soit on indique une liste xi ordonnée de taille N et une liste ni de taille N − 1, dans ce cas, la liste xi
est considérée comme les extrémités de classes et d’effectifs la liste ni. La moyenne est alors calculée
en prenant les centres de ces classes.
mediane(xi,ni,option) lycee
Renvoie la valeur médiane de la série xi éventuellement pondérée des effectifs ni correspondants si celle-ci
est donnée.
Vous pouvez aussi préciser un dernier paramètre option précisant le mode de calcul :
• Si option vaut 1 ou n’est pas précisé, la médiane est la valeur centrale de la série (valeur centrale de
la série ou moyenne arithmétique des deux valeurs centrales)
• Si le paramètre option est 2, la médiane est alors la valeur pour laquelle on dépasse 50% des valeurs.
• la fonction mediane n’est pas prévue pour fonctionner avec des classes, mais seulement des valeurs
discrètes.
quartile(xi,ni,val) lycee
xi est une série éventuellement pondérée des effectifs ni correspondants. Selon les valeurs du paramètre val :
• Si val = 1 renvoie le premier quartile de la série.
• Si val = 3 renvoie le troisième quartile de la série.
• Si val n’est pas précisé, renvoie le premier et troisième quartile.
decile(xi,ni,val) lycee
xi est une série éventuellement pondérée des effectifs ni correspondants. Selon les valeurs du paramètre val :
• Si val = 1 renvoie le premier décile de la série.
• Si val = 9 renvoie le neuvième décile de la série.
• Si val n’est pas précisé, renvoie le premier et neuvième décile.
35
Remarque: 30
25
Comme on le verra quelques pages plus loin, en ajoutant sim-
Effectifs
20
plement baton(Nb) et repere.show() en fin de programme, on 15
peut visualiser la distribution. 10
binomial(n,p) lycee
!
n
Retourne le coefficient binomial , c’est-à-dire le nombre de chemins de l’arbre réalisant p succès pour
p
n répétitions.
(D’après un document de l’inspection générale) : Monsieur Z, chef du gouvernement d’un pays lointain, affirme
que 52% des électeurs lui font confiance. On interroge 100 électeurs au hasard (la population est suffisamment
grande pour considérer qu’il s’agit de tirages avec remise) et on souhaite savoir à partir de quelles fréquences, au
seuil de 5%, on peut mettre en doute le pourcentage annoncé par Monsieur Z, dans un sens, ou dans l’autre.
On fait l’hypothèse que Monsieur Z dit vrai et que la proportion des électeurs qui lui font confiance dans la
population est p = 0,52. La variable aléatoire X, correspondant au nombre d’électeurs lui faisant confiance dans
un échantillon de 100 électeurs, suit la loi binomiale de paramètres n = 100 et p = 0,52. Déterminons donc a et b
tels que :
• a est le plus petit entier tel que P(X ¶ a) > 0,025
• b est le plus petit entier tel que P(X ¶ b) > 0,975.
Télécharger
Code: Elections
from lycee import *
p ,a , b =0 , -1 , -1
for k in range ( 101 ):
p = p + b i n o m i a l( 100 , k )* p u i s s a n c e ( 0 . 52 , k )* p u i s s a n c e( 0 . 48 , 100 - k )
if a == - 1 and p > 0 . 025 :
a=k
if b == - 1 and p >= 0 . 975 :
b=k
print ( " On peut c o n s i d é r e r l ' a f f i r m a t i o n de m o n s i e u r Z exacte " , end = " " )
print ( " au seuil de 5 % , si le nombre de p e r s o n n e ayant r é p o n d u " , end = " " )
print ( " p o s i t i v e m e n t est dans l ' i n t e r v a l l e [ " ,a , " ; " ,b , " ]. " )
Aperçu du résultat dans la console
choice(L) lycee
Renvoie un élément de la liste L avec équiprobabilité.
Télécharger
Télécharger
Bien évidemment, la commande choice ne se limite pas Code: Une urne de 50 boules
aux listes numériques. Dans cet exemple de jeu : on mise
from lycee import *
1€ pour faire une partie. 30 boules blanches et 20 noires Gain =[]
sont placées dans une urne. On tire 3 boules successive- for i in range ( 10000 ) :
ment et sans remise. Si on obtient 3 boules de la même Urne =[ " B l a n c h e" ]* 30 +[ " Noire " ]* 20
couleur, on gagne 5€, sinon rien. Estimer le gain moyen B1 = choice ( Urne )
d’une partie. Urne . remove ( B1 )
B2 = choice ( Urne )
Urne . remove ( B2 )
Remarque: B3 = choice ( Urne )
Ici l’utilisation de la fonction moyenne n’est pas if B1 == B2 and B2 == B3 :
réellement utile. Un compteur totalisant le gain à Gain . append ( 4 )
else :
chaque jeu serait suffisant. Par contre pour calculer
Gain . append ( - 1 )
l’écart type, il semble pratique de stocker tous les print ( " Gain moyen : " , end = " " )
résultats dans une liste. print ( m o y e n n e( Gain ))
print ( " Ecart type : " , end = " " )
print ( e c a r t y p e( Gain ))
listeRand(n) lycee
Retourne une liste de n nombres décimaux aléatoires dans l’intervalle [0,1[.
listeRandint(min,max,n) lycee
Retourne une liste de n nombres entiers aléatoires dans l’intervalle [min, max].
III) Diagrammes
baton(xi,ni) lycee
Génère le diagramme en bâtons relatif à la liste de valeurs xi, en tenant compte de la liste optionnelle des
pondérations ni.
Pour l’afficher, il faut ajouter ensuite repere.show().
On suppose que pour une carte bleue donnée, tous les codes de 4 chiffres sont équiprobables. Représenter
à l’aide d’un diagramme en bâtons, la répartition du nombre de touches en commun que peuvent avoir deux
utilisateurs d’un même distributeur.
Télécharger
barre(liste,a,pas) lycee
Génère le diagramme en barre relatif à la liste de valeurs liste.
Pour l’afficher, il faut ajouter ensuite repere.show().
• Si seulement liste est renseigné, les valeurs seront réparties en 10 classes de même amplitude.
• Si liste et a sont renseignés, les valeurs seront réparties en a classes de même amplitude.
• Si les trois paramètres sont renseignés :
• a est le centre de la première classe,
• pas est un nombre indiquant l’amplitude des classes.
Télécharger
350
Code: Avoir une full d’enfants
from lycee import * 300
freq =[]
n = d e m a n d e( " Nombre de f a m i l l e s dans 250
l 'échantillon ?")
for echan in range ( 1000 ) : 200
nbFull = 0
for partie in range ( n ) : 150
De = l i s t e R a n d i n t (0 ,1 , 5 )
xi , ni = compte ( De , ' e f f e c t i f ') 100
if ni ==[3 , 2 ] or ni ==[ 2 , 3 ] :
nbFull = nbFull + 1 50
freq . append ( nbFull / n )
barre ( freq )
0
repere . show () 0.3 0.4 0.5 0.6 0.7 0.8 0.9
5
Après avoir montré que la probabilité qu’une famille de 5 enfants soit dans cette situation est p = soit 62,5%,
8
et visualisé ce diagramme obtenu avec des échantillons de taille 50, 100, 300, 500 et 1 000, on observe la fluc-
tuation des fréquences autour de cette valeur p. Au fur et à mesure de l’augmentation de N , l’étendue dimi-
nue. D’ailleurs, on pourrait améliorer ce programme pour compter"le nombre de simulations# où la fréquence
1 1
observée est dans l’intervalle de fluctuation au seuil de 95% F95 = p − √ ; p − √ comme dans l’exemple
N N
en vidéo sur le site d’ AmiensPython.
histop(liste,classes) lycee
Génère l’histogramme relatif à la liste liste dont l’aire totale des rectangles vaut 1.
Pour l’affichage, ajouter ensuite repere.show().
• Si seule liste est renseignée, les valeurs seront réparties en 10 classes de même amplitude.
• Si la variable classes est un entier, les valeurs seront réparties en ce nombre de classes.
• Sinon, vous pouvez choisir vos classes d’amplitudes variées en indiquant dans la liste classes la liste
ordonnée des bornes.
Remarque:
• Nous avons choisi le nom histop pour donner une connotation probabiliste à cette fonction. En effet,
comme l’aire totale vaut 1, la probabilité de choisir un individu dans une classe donnée est l’aire du
rectangle correspondant.
• Pour les fonctions barre et histop, nous avons utilisé les conventions usuelles, c’est-à-dire des in-
tervalles semi-ouverts sauf pour le dernier : Si x1 , x2 , . . . , xN sont les bornes, les classes seront :
[x1 ; x2 [, [x2 ; x3 [, . . . , [xN −1 ; xN ].
0.020
Télécharger
Notez la puissance de calcul de Python, on a ici un fichier d’un million de valeurs de plus de 4 méga-octets,
on obtient avec ce programme simple l’histogramme en 10 secondes environ avec un ordinateur portable.
• Ce type de graphique ne présente d’intérêt que pour une répartition par classe, la liste xi doit donc
comporter une valeur de plus que la liste ni.
• le paramètre optionnel coul est un caractère utilisant le code couleur présenté au chapitre 5.
Remarque:
Ne perdez pas de vue que ces diagrammes ne sont que des graphiques étudiés au chapitre 5. Vous pouvez donc
changer le titre et les noms des axes grâce aux fonctions repere.title, repere.xlabel et repere.ylabel
Un exemple de calcul du coefficient de Gini, dont vous pouvez trouver une présentation sur le site Statistix.
Télécharger
Effectifs
p o l y g o n e E C C ( listedeciles , p r o p o r t i o n s)
repere . plot ([ 0 , 1 ] ,[ 0 , 1 ]) 0.4
somme = 0
for i in range ( 9 ): 0.2
somme = somme + 0 . 1 * cumul [ i ]
somme = somme + 0 . 05 * cumul [ 9 ] 0.00.0 0.2 0.4 0.6 0.8 1.0
gini =1 - 2 * somme Valeurs de la liste
print ( " Le c o e f f i c i e n t de Gini vaut " , gini , " . " )
repere . show ()
IV) Conversion
Le travail sur les statistiques n’a d’intérêt en classe que s’il s’opère sur de grandes séries de valeurs dont on
veut extraire une information. Aussi il nous est apparu utile d’offrir la possibilité de charger un fichier type tableur
dans une liste. Cependant les fichiers excel ou OpenOffice sont trop complexes à analyser pour être chargés tels
quels, vous devrez donc avant toutes choses convertir le fichier tableur au format CSV, pour cela il vous suffit de
faire enregistrer-sous, puis de choisir CSV comme type de fichier.
Télécharger
Sommaire
I) Longueur et caractères d’une chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
II) Opérations sur les chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
1) Coller, répéter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2) Transformer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
III) Codage d’un caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
IV) sous-chaîne d’une chaîne de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
1) Extraire une sous-chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2) Rechercher, remplacer et compter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
V) Convertir des chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
1) Enregistrer et charger un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
2) Convertir une chaîne de caractères en liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
En programmation une chaîne est l’équivalent d’une phrase, un caractère l’équivalent d’une lettre. D’un point
de vue algorithmique, il est très formateur de travailler sur ces objets avec les élèves, car on peut faire réaliser des
programmes simples à décrire sans connaissances mathématiques autres que l’algorithmique.
Les chaînes de caractères se définissent à l’aide de guillemets doubles ou simples : ex : ′ bonjour′, ”J′ ai faim”.
len(ch) lycee
renvoie le nombre de caractères de la chaîne ch.
Remarquez l’analogie de l’instruction len avec les listes, d’ailleurs comme pour celles-ci, on obtient le caractère
à la position i en écrivant ch[i] :
ch[i] lycee
renvoie le caractère d’indice i de la chaîne ch.
Attention : la première lettre est à l’indice 0. Il faut donc bien réfléchir aux indices de fin ! Voici deux pro-
grammes qui utilisent ces instructions, le premier compte le nombre de voyelles dans un mot, le second écrit une
phrase à l’envers :
Télécharger
Télécharger
Code: Nombre de voyelles
Code: A l’envers
from lycee import *
mot = " a n t i c o n s t i t u t i o n n e l l e m e n t " from lycee import *
nb = 0 ; i = 0 ; phrase = " Coucou , il fait beau ! "
while i < len ( mot ): p = len ( phrase ) - 1
if mot [ i ] in [ " a " ," e " ," i " ," o " ," u " ," y " ] : while p >= 0 :
nb = nb + 1 print ( phrase [ p ] , end = " " )
i=i+1 p =p - 1
print ( mot , " a " ,nb , " v o y e l l e( s ). " )
Si, à présent, on veut pouvoir stocker le mot à l’envers dans une variable pour tester, par exemple si le mot
est un palindrome, nous allons coller bout à bout (on dit concaténer) les lettres du mot.
L’opérateur +
ch1 + ch2 : Concatène les chaînes ch1 et ch2, exemple "bon"+"jour" donne "bonjour"
Voici deux exemples différents qui permettent de savoir si un mot est un palindrome :
Télécharger
Télécharger
Remarque:
A la quatrième ligne, l’instruction envers = ”” permet d’initialiser la variable envers comme étant une
chaîne vide.
L’opérateur *
ch1 ∗ n : Répète n fois la chaîne ch1, exemple : "ha ! "*3 donne "ha ! ha ! ha ! "
Télécharger
2) Transformer
L’exemple précédent ne fonctionne que si le texte est entré en minuscules, évidemment on pourrait adapter la
ligne de test en in (”a”,”e”,”i”,”o”,”u”,”y”,”A”,”E”,”I”,”O”,”U”,”Y”) mais il existe déjà, en Python, deux fonctions
qui transforment une chaîne en majuscules ou minuscules :
Remarque:
• Les fonctions upper() et lower() s’appliquent aussi aux caractères, dans l’exemple pré-
cédent, on peut changer if mot[i] in (”a”,”e”,”i”,”o”,”u”,”y”,”A”,”E”,”I”,”O”,”U”,”Y”) en
if mot[i].lower() in (”a”,”e”,”i”,”o”,”u”,”y”)
• Les fonctions upper() et lower() n’ont aucun effet sur les caractères spéciaux(marqués d’un accent).
Dans l’exemple suivant, on veut transformer un nombre inférieur ou égal à 255 en écriture hexadécimale (base
16), il nous faut alors concaténer des chiffres (ou nombres) à des caractères (ou chaînes). Il est alors nécessaire
que tous aient la même nature : des chaînes de caractères.
str(n)
renvoie le nombre n transformé en chaîne de caractères.
Télécharger
Et une version bien plus courte, utilisant un alpha-
bet composé des symboles utilisés en base 16 :
Code: Hexadécimal 1
from lycee import * Télécharger
eval(ch)
renvoie la valeur numérique de la chaîne de caractères ch.
Remarque:
• Notez que eval est bien plus puissante que transformer la chaîne ”12” en nombre 12, car vous pouvez
utiliser aussi les opérations et les fonctions de Python. Par exemple, eval(”quotient(12,5) ∗ sqrt(3)”)
renvoie 3.46410161514.
• En ce qui concerne les changements de base, en pratique, on utilise plutôt une liste qu’une chaîne pour
stocker un nombre en base a. Le nombre est d’ailleurs écrit « à l’envers » : le premier nombre de la liste
est le chiffre des unités. Ainsi l’élément de la liste d’indice i est à multiplier par ai pour obtenir la valeur
du nombre. L’addition de deux nombres est ainsi assez simple à programmer(penser aux retenues). Par
exemple, le nombre A76 en base 16 sera défini par la liste [6,7,A] et vaut 6 × 160 + 7 × 161 + 10 × 162 .
ord(car) et str(n)
• ord(car) : Renvoie le code ASCII du caractère car.
Dans la pratique, vous verrez que ce code pose des soucis. En effet, les premiers caractères sont des caractères
spéciaux. Pour éviter tout problème d’affichage, la console Python que vous utilisez les remplace par le caractère
générique , ce qui a pour conséquence immédiate de ne plus distinguer visuellement ces 30 premiers caractères...
Difficile alors de décrypter le message ! Pour pallier ce problème, nous vous proposons un autre codage
qui correspond à un alphabet que nous avons baptisé l’Alphabet AmiensPython (AAP). Il se compose de 102
caractères.
AlphabetAP lycee
AlphabetAP est la chaîne de caractères contenant tous les caractères ordonnés de l’alphabet AmiensPy-
thon.
Remarque : Comme pour pi, il s’agit en réalité d’une variable que l’on a initialisée. Ainsi, vous pouvez choisir
de la modifier en début de programme pour vos besoins.
Un exemple de codage et décodage affine : f (x) représente le reste de la division de 5x + 46 par 102 et g(x)
celui de la division de 41x + 52 par 102.
CodeAAP f DecodeAAP
Codage : Lettre −
7 → Nombre 7−→ Nombre − 7 → Lettre
CodeAAP g DecodeAAP
Décodage : Lettre −7 → Nombre 7−→ Nombre − 7 → Lettre
Télécharger Télécharger
ch[deb : f in]
• ch[deb : f in] : Renvoie la partie de la chaîne ch comprise entre le caractère à la positon deb (inclus) et
celui à la position f in (exclu).
Si deb n’est pas précisé, la sous-chaîne commence au début de la chaîne. Si f in n’est pas précisé la sous-chaîne
s’arrête à la fin de la chaîne :
• ch[deb :] : Renvoie la partie droite de la chaîne ch commençant au rang deb (inclus).
• ch[: f in] : Renvoie la partie gauche de la chaîne ch jusqu’au rang f in (exclu).
Remarque:
• Attention : ch[3 : 7] renvoie la partie de ch de la quatrième à la septième lettre mais n’a pas d’effet sur
ch.
• Au passage on notera que ce système d’extraction est aussi valable pour une liste. (On comprend alors
mieux le sens de la commande L2 = L1[:] présenté au chapitre précédent.)
(D’après Wikipedia) : L’ISBN (International Standard Book Number) ou numéro international normalisé du
livre est un numéro international qui permet d’identifier, de manière unique, chaque livre publié. Il est destiné à
simplifier la gestion informatique du livre : bibliothèques, libraires, distributeurs, etc. Jusqu’en janvier 2007, le
code ISBN comportait 10 chiffres, le dernier étant une clé de contrôle permettant de détecter une erreur de saisie
(code détecteur) et calculé ainsi :
• On attribue une pondération à chaque position (de 10 à 2 en allant en sens décroissant) et on fait la somme
des produits ainsi obtenus.
• On conserve le reste de la division euclidienne de ce nombre par 11. La clé s’obtient en retranchant ce nombre
à 11.
• Si le reste de la division euclidienne est 0, la clé de contrôle n’est pas 11 (11 - 0 = 11) mais 0.
• De même si le reste de la division euclidienne est 1, la clé de contrôle n’est pas 10 mais la lettre X. Ceci
permet donc d’avoir respectivement pour les restes de la division 0, 1, 2, 3, ... 10 les codes 0, X, 9, 8, ..., 1.
Par exemple :
Soit au total 170 dont le reste de la division
Code ISBN 2 2 6 6 1 1 1 5 6
euclidienne par 11 est 5. La clé de contrôle
Pondération 10 9 8 7 6 5 4 3 2
est donc 11 − 5 = 6. L’ISBN au complet est :
Produit 20 18 48 42 6 5 4 15 12
2 − 266 − 11156 − 6.
Télécharger
ch.find(texte)
Indique la position dans la chaîne ch où se trouve texte et renvoie −1 si texte n’apparait pas dans la chaîne
ch.
Télécharger
Remarque:
En informatique, l’action d’analyser une chaîne pour l’interpréter, s’appelle « parser »la chaîne (de l’anglais
to parse : analyser ).
ch.replace(texte1,texte2)
Remplace texte1 par texte2 chaque fois qu’il le trouve dans la chaîne ch.
ch.count(texte)
Compte le nombre de fois où texte est présent dans la chaîne ch.
Cette fois, on essaie un codage non affine avec une fonc- Télécharger
Notez que si le fichier comprend plusieurs lignes, la chaîne obtenue sera composée de toutes les lignes séparées
par le caractère spécial ”\n”.
La fonction suivante permet à l’inverse d’enregistrer une chaîne dans un fichier texte.
Remarque:
Attention : Python sait lire un fichier de texte brut, mais ne saura pas lire un fichier Word ou OpenOffice
car ces fichiers sont très complexes (gestion des images, des polices de caractères ...) Si vous souhaitez
utiliser un fichier provenant d’un tel logiciel, vous devrez utilisez « enregistrer sous »et modifier le format
d’enregistrement. (Choisir « texte brut »ou « .txt ».)
ch.split(sep)
Renvoie une liste de chaînes de caractères obtenue en découpant la chaîne ch à chaque occurrence du
séparateur sep.
Inversement,
sep.join(list)
Renvoie une chaîne de caractères obtenue en concaténant les éléments de la liste list séparés par le séparateur
sep.
Dans l’exemple qui suit, nous allons charger dans une Contenu du fichier poeme_pi.txt :
chaîne le poème bien connu ci-contre et transformer cette
chaîne en une liste de mots en utilisant le séparateur « Que j’aime à faire apprendre ce nombre utile aux sages !
espace, puis compter le nombre de lettres de chaque mot Immortel Archimède, artiste ingénieur,
pour obtenir les premières décimales du nombre π. Qui de ton jugement peut priser la valeur ?
Pour moi, ton problème eut de pareils avantages.
Jadis, mystérieux, un problème bloquait
Tout l’admirable procédé, l’oeuvre grandiose
Télécharger
Que Pythagore découvrit aux anciens Grecs.
0 quadrature ! Vieux tourment du philosophe
Code: Poème version 1
Insoluble rondeur, trop longtemps vous avez
from lycee import * Défié Pythagore et ses imitateurs.
Comment intégrer l’espace plan circulaire ?
poeme = f i c h 2 c h a i n e () Former un triangle auquel il équivaudra ?
C a r S p e c i a u x =[ '. ' , ' , ' , '! ' ," '" ," \ n " , '; ' , '? ' , ': '] Nouvelle invention : Archimède inscrira
for c in C a r S p e c i a u x: Dedans un hexagone ; appréciera son aire
poeme = poeme . r e p l a c e(c , " " ) Fonction du rayon. Pas trop ne s’y tiendra :
mots = poeme . split ( " " ) Dédoublera chaque élément antérieur ;
for m in mots : Toujours de l’orbe calculée approchera ;
if m != " " : print ( reste ( len( m ) , 10 ) , end = " " ) Définira limite ; enfin, l’arc, le limiteur
De cet inquiétant cercle, ennemi trop rebelle
Professeur, enseignez son problème avec zèle »
Encore une fois, nous insistons sur le fait qu’il n’est pas indispensable pour les élèves de connaître ces fonctions.
La démarche de chercher soi-même les espaces et de compter les lettres peut être très formatrice d’un point de
vue algorithmique.
Télécharger
Fonctions
Sommaire
I) Exemple de fonctions mathématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
II) Fonction au sens informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
III) Une fonction peut en cacher une autre . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
IV) Récursivité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Bien que la notion de fonction n’apparaisse pas de manière claire dans le programme d’algorithmique du lycée,
il nous semble important de la faire apparaitre ici pour plusieurs raisons : d’une part, la notion de fonction au sens
mathématique est très présente dans tout le cycle du lycée, d’autre part, il est important de pouvoir réinvestir ce
qui a été fait.
Une cuve a la forme forme d’un cône surmonté d’un cylindre, chacun d’une
hauteur de 20cm. Une sonde est placée pour mesurer la hauteur d’eau, comme b
Pour plus de clarté, nous avons volontairement omis les tests vérifiant que la
hauteur h est bien dans l’intervalle [0; 40]. Nous vous présentons deux versions
du programme : La première sans fonction est déjà un travail conséquent en
classe de seconde. (Recherche des formules de volume, théorème de Thalès, ...)
La seconde définit une fonction V (h), comme nous le ferions en mathématiques.
Télécharger
Télécharger
Code: La cuve avec fonction
Code: La cuve sans fonction
from lycee import *
from lycee import * def V ( h ):
h = d e m a n d e( " h a u t e u r d ' eau ? " ) if h < 20 :
if h < 20 : R=h/2
R=h/2 return 1 / 3 * pi * R * R * h
V = 1 / 3 * pi * R * R * h else :
else : Vcyl = 1 / 3 * pi * 10 * 10 * 20
Vcone = 1 / 3 * pi * 10 * 10 * 20 Vcone = pi * 10 * 10 *(h - 20 )
Vcyl = pi * 10 * 10 *( h - 20 ) return Vcyl + Vcone
V = Vcyl + Vcone
print ( " Le volume est" ,V ) h = d e m a n d e( " h a u t e u r d ' eau ? " )
print ( " Le volume est" ,V ( h ))
Remarque:
9000
• La fonction V peut alors être utilisée comme n’importe
8000
quelle fonction de Python. Vous pourriez par exemple
7000
demander de tracer la courbe de V, en remplaçant les
6000
2 dernières lignes du second programme par :
5000
X = list ( range ( 41 )) 4000
Y =[]
3000
for x in X : Y . append ( V ( x ))
2000
repere . plot (X , Y )
repere . show () 1000
0
0 5 10 15 20 25 30 35 40
• Toutes les variables à l’intérieur de la déclaration de la fonction sont des variables locales, c’est-à-dire
que le fait de les modifier ou d’avoir une variable qui porte le même nom dans le corps principal du
programme n’a aucun effet sur celui-ci.
• De la même manière, à l’intérieur d’une fonction, le logiciel ne connait aucune des variables du reste
du programme, vous devez donc prévoir de placer toutes les variables dont vous aurez besoin dans les
paramètres de la fonction. (Ici seul h est nécessaire.)
Télécharger
IV) Récursivité
Une fonction peut même s’appeler elle-même. (Attention cependant aux boucles infinies !) C’est ce que l’on
appelle des fonctions récursives. Prenons l’exemple le plus connu de l’algorithme d’Euclide, il peut s’énoncer ainsi :
Si a et b sont 2 entiers naturels non simultanément nuls, alors :
(
a si b = 0
P GCD(a,b) = où r est le reste de la division euclidienne de a par b.
P GCD(b,r) sinon
Télécharger
Un autre exemple pour calculer de manière originale an (sans utiliser la fonction puissance).
Télécharger
Télécharger
print ( p u i s s V 2(2 , 10 ))
Le second algorithme est appelé algorithme des puissances indiennes et limite fortement le nombre de multi-
plications à effectuer, pour calculer 210 avec le premier algorithme, neuf multiplications sont nécessaires alors qu’il
n’en faut que quatre avec le deuxième.
Un dernier exemple avec une suite récurrente d’ordre 2 : la plus connue est sûrement la suite de Fibonacci
définie par u0 = u1 = 1 et pour tout entier naturel n, un+2 = un + un+1 , le programme suivant renvoie le terme
ur pour r donné.
Télécharger
Sommaire
I) A propos d’EduPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
1) Puis-je utiliser EduPython sous Mac ou Linux ? . . . . . . . . . . . . . . . . . . . . . . . . . 81
2) Quelle est la différence avec la version d’origine PortablePython ? . . . . . . . . . . . . . . . 81
3) Comment arrêter un programme en cours d’exécution ? . . . . . . . . . . . . . . . . . . . . 81
4) Pourquoi avoir traduit certaines fonctions ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5) Quand je tente d’ouvrir un fichier .py, l’ordinateur me demande avec quoi l’ouvrir. . . . . . 82
II) A propos de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
1) Pourquoi dites-vous que Python est un langage très puissant ? . . . . . . . . . . . . . . . . 82
2) Pourtant Python n’est pas précis dans les calculs ! . . . . . . . . . . . . . . . . . . . . . . . 82
3) Les élèves éprouvent de grandes difficultés à utiliser « for i in range · · · » . . . . . . . . . 82
4) J’ai le message : "UnicodeEncodeError : ’ascii’ codec... . . . . . . . . . . . . . . . . . . . . . 83
5) Que signifie ce message d’erreur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
III) EduPython et l’enseignement ISN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
I) A propos d’EduPython
1) Puis-je utiliser EduPython sous Mac ou Linux ?
Malheureusement non, en tout cas pas dans son intégralité. L’éditeur utilisé PyScripter, ne fonctionne que sous
windows. Néanmoins, vous pouvez récupérer la bibliothèque lycee pour l’installer avec votre version personnelle
de Python. Vous rencontrerez peut-être des problèmes d’accents. Tenez nous informés.
input de départ (dans ce cas pour renvoyer un nombre et non une chaîne de caractères). Mais rien ne vous empêche
d’utiliser eval(input) avec vos élèves.
5) Quand je tente d’ouvrir un fichier .py, l’ordinateur me demande avec quoi l’ouvrir.
En effet, EduPython étant un système portable, aucune installation n’a lieu. De ce fait, les fichiers python ne
sont pas associés à l’interface. Vous devez lancer EduPython, puis sélectionner « ouvrir » et aller chercher votre
fichier.
Si vous avez des droits d’administrateur, EduPython effectue l’association, ce qui n’est pas possible si vous exécutez
le programme sur une clé USB.
Télécharger
if v == 0 and i == p :
print ( " Le nombre de M e r s e n n e 2 ^ " , p , " -1 = " , M , " est p r e m i e r. " )
else :
print ( " Le nombre de M e r s e n n e 2 ^ " , p , " -1 = " , M , " n ' est pas p r e m i e r. " )
Il semble plus efficace de n’utiliser que la boucle while dans un premier temps. Il faut alors initialiser la variable
avant la boucle, et incrémenter dans la boucle par i = i + 1, par exemple.
Après la répétition de ce genre de boucle, on peut proposer aux élèves le for et l’emploi du range.
Plus de 80 programmes
Sommaire
I) 40 programmes simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
II) 40 autres programmes plus élaborés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
I) 40 programmes simples
Il nous semble important de proposer tout au long de l’année des programmes simples à réaliser, c’est pourquoi
nous nous sommes efforcés d’illustrer au maximum cette documentation par des petits programmes. En voici la
liste enrichie de commentaires :
Les bases
Télécharger L Que fait le programme suivant ?
Télécharger L Nombre de 6 obtenus en lançant un dé 10 fois
Télécharger L Calculer l’opposé d’un nombre
Télécharger L Calculer l’IMC
Télécharger L Nombre de zéros d’un trinôme
Télécharger L Signe d’un trinôme
Télécharger L Solutions de ax + b = 0
Télécharger L Image par une fonction définie par morceaux
Télécharger L Recherche d’un triplet pythagoricien d’entiers consécutifs
Télécharger L Distance sur un axe gradué
Télécharger L Volume d’eau dans une cuve
Télécharger L Le jeu du nombre mystère
Télécharger L Calcul de probabilités
Télécharger L Somme des carrés des 100 premiers entiers
Télécharger L Obtenir 7
Télécharger L Calcul du PGCD de 2 entiers strictement positifs
Télécharger L Multiplication babylonienne
Télécharger L Marche aléatoire d’un robot sur une table
Fonctions mathématiques
Télécharger L Recherche des entiers distincts tels que xy = y x
La tortue
Télécharger L Tracer d’une maison
Télécharger L Tracer d’une église
Télécharger L Tracer un polygone régulier à n côtés.
Télécharger L Tracer une spirale.
Télécharger L Tracer un œuf de pâques.
Télécharger L Le yin et le yang.
Télécharger L Dessiner un soleil
Télécharger L Le drapeau européen.
Les graphiques
Télécharger L Ligne de niveau
Télécharger L Tracer d’une droite
Télécharger L Marche aléatoire
Télécharger L Chute d’une balle
Télécharger L Pile ou face
Les listes
Télécharger L Vendredi 13
Télécharger L Reconnaître un parallélogramme
Télécharger L Produit de 2 polynômes
Télécharger L Conjecture d’Euler
Télécharger L Nombre de Kaprekar
Télécharger L Suite
Télécharger L Crible d’Ératosthène
Télécharger L Polynome dérivé
Télécharger L Compter le nombre de 6
Télécharger L Algorithme de Kaprekar
Version 1.0 EduPython 85
40 autres programmes plus élaborés Plus de 80 programmes
Probabilités et statistiques
Télécharger L Dés de Sicherman
Télécharger L Appel de jugement
Télécharger L Elections
Télécharger L Un tirage de LOTO
Télécharger L Une urne de 50 boules
Télécharger L Surréservation
Télécharger L Codes de carte bleue
Télécharger L Avoir une full d’enfants
Télécharger L Entrées au cinéma
Télécharger L Coefficient de Gini
Télécharger L Comparaison de deux départements
Les fonctions
Télécharger L La cuve sans fonction
Télécharger L La cuve avec fonction
Télécharger L Les briques de Brian
Télécharger L Suite de Syracuse
Télécharger L PGCD récursif
Télécharger L Puissance récursive version 1
Télécharger L Puissance récursive version 2
Télécharger L Suite de Fibonacci
#, 8 for...in... :, 19
\n, 73 gauss, 32
**, 23 histop, 61
*, 11, 53, 66 if, 13
+, 53, 66 index, 50
<= et >=, 16 input, 12
< et >, 16 insert, 47
==, 16 int, 25
=, 9, 10 in, 49
AAP, 69 join, 73
CSV2liste, 63 len, 46, 65
ECC, 56 liste2CSV, 63
FCC, 56 listeRandint, 59
%, 25 listeRand, 59
Chaîne[], 65, 70 liste_ demande, 46
liste[], 44, 52 ln, 27
abs, 27 lower, 67
acos, asin, atan, 28 mediane, 56
affiche_ poly, 46 moyenne, 56
and, 18 not in, 50
append, 46 np.arange, 41
barre, 60 ord, 68
baton, 60 or, 18
binomial, 58 pgcd, 25
chaine2fich, 73 pi, 29
choice, 58 polygoneECC, polygoneFCC, 62
codeAAP, 69 pop, 50
compte, 55 print(), 10
cos, 28 print(, end="), 10
count, 50, 72 puissance, 23
decile, 57 quartile, 57
decodeAAP, 69 quotient, 24
def, 75 randint, 31
demande, 11 random(), 30
ecartype, 57 range, 19, 41, 46
elif, 15 remove, 49
else, 15 repere.axis, 41
end, 10 repere.clf(), 41
eval, 68 repere.grid, 41
exp, 27 repere.plot, 39, 40
factorial, 24 repere.show(), 40
fich2chaine, 73 repere.subplot, 42
find, 71 repere.text, 42
floor, 27 repere.title, 42, 62
Si, 13
Sinon, 15
Supprimer, 41, 49, 50
Valeur absolue, 27
Variables(nom), 11