Académique Documents
Professionnel Documents
Culture Documents
Avant de commencer...
... quelques indications sur le travail à faire durant toute l’unité :
• Lisez l’intégralité des énoncés de TP. Ne "sautez" pas directement aux exercices à faire sans prendre
connaissances des informations associées.
• Pour chaque TP, rédigez un compte-rendu. Les comptes-rendus seront exigibles immédiatement en cas de
litige après vos évaluations.
• Vous pouvez me les envoyer par mail ( jean-claude.georges@esiee.fr ) si vous avez des doutes ou interroga-
tions. Il sera alors annoté (mais non noté).
• Deux jours après le TP, un corrigé sera mis en ligne. Lisez-le intégralement.
• Pour vos comptes-rendus, utilisez un traitement de texte (LibreOffice, OpenOffice) et des styles pour
distinguer le texte du compte rendu de celui des listings des programmes Python que vous y insérez (au
minimum, un style "python" avec police de caractères à largeur constante). Cherchez une police qui
distingue bien les caractères qui se ressemblent : voir la figure ci-dessous pour des exemples de polices
avec I (i majuscule), l (L minuscule), 1 (le chiffre un), O (o majuscule), 0 (le chiffre zéro).
• En cas de problème, essayez de réduire la taille de votre programme pour en faire un exemple complet
minimal (ECM), reproduisant l’erreur sans contenir une ligne de code parasite. En créant cet ECM, neuf
fois sur dix, vous trouverez l’erreur.
• Si le problème persiste, n’abandonnez pas. La communauté des utilisateurs Python est très ouverte et
donne, même aux débutants, des conseils, trucs et astuces, dans des FAQs et forums que vous pouvez
consulter sur Internet. Par exemple :
I http://python.developpez.com/
I http://programmers.stackexchange.com/questions/tagged/python
ou contactez moi par mail, en y joignant l’ECM.
• Pensez à noter et classer les problèmes rencontrés lors de l’utilisation de Python, avec vos tentatives
infructueuses de résolutions et vos solutions expliquées.
if O == 0:
avec serif (Times New Roman) non
I=l+1
if O == 0:
sans serif (Arial) non
I=l+1
if O == 0:
monospace (DejaVu Sans Mono) oui
I = l + 1
–1/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
1 Mise en route
Au démarrage, sélectionnez le système Linux. Créez un répertoire Python dans votre espace de travail. Lancez
Python :
• sous Linux : menu Applications, puis sous-menu Programmation, puis lancement IDLE (using Python-3.x)
• sous Windows, si vous l’avez installé chez vous : menu Tous les programmes, puis sous-menu Python 3.6,
puis lancement IDLE (Python GUI)
Une fenêtre semblable à celle de la figure ci-dessous s’ouvre.
La fenêtre Python Shell permet d’entrer des calculs. Une invite (prompt en anglais) formée de trois chevrons
>>> autorise à entrer des expressions Python. Entrez par exemple, après l’invite, la ligne suivante :
La fin de ligne à partir du # est un commentaire, ignoré par Python. L’opérateur // est celui de la division
euclidienne.
Dans la fenêtre IDLE Python Shell, les raccourcis <Alt>p et <Alt>n permettent de naviguer dans l’historique
des commandes. Un nom spécial, _ (tiret de soulignement, underscore), permet de récupérer le résultat de la
dernière commande. Si l’on est positionné sur une ligne, l’appui sur <Entr> copie/colle cette ligne en fin de ligne
courante. Évidemment, <Ctrl>C/<Ctrl>V permet de copier/coller une portion de texte ou même un résultat.
De plus, une aide très complète est fournie avec Python en passant par le menu Help/Python Docs, raccourci <F1>.
Cette aide contient en particulier The Python Tutorial qui est une lecture indispensable : I http://docs.python.
org/3.6/tutorial/
Entrez les commandes suivantes sous le Shell IDLE. Utilisez <Alt>p et <Alt>n pour utiliser les commandes de
l’historique :
Python Shell sous IDLE ne permet d’entrer qu’une commande à la fois : il n’est en général utilisé que pour
tester quelques lignes de programme. Quand le travail est plus long, on utilisera de préférence un éditeur de
programmes permettant d’entrer, de sauvegarder ou de recharger des enchaînements d’instructions.
–2/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
Essayez d’entrer les nombres de l’exercice 2. Notez les messages d’erreur, si vous laissez des espaces, ou oubliez
de préfixer j dans les complexes. Remarquez que 3,14 n’entraîne pas d’erreur, mais crée le couple (3, 14).
Dans The Python Tutorial, rendez-vous au paragraphe
• 3. An Informal Introduction to Python
◦ 3.1. Using Python as a Calculator
3.1.1. Numbers
(ou I http://docs.python.org/3.6/tutorial/introduction.html#numbers)
et consultez-le pour les exercices suivants.
–3/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
>>> rayon = 3
>>> pi = 3.1416
>>> périmetre = 2 * pi * rayon
>>> aire = pi * rayon ** 2
La lecture des instructions est beaucoup plus facile que s’il on avait utilisé des noms comme r, p, a ou pire
a, b, c. Comparer le code ci-dessus avec celui ci-dessous, qui pourtant affiche la même chose.
>>> a = 3
>>> b = 2 * 3.1416 * a
>>> c = 3.1416 * a ** 2
–4/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
Écrivez la suite d’instructions permettant de calculer le nombre d’années de production qu’il faudrait pour
garnir l’échiquier (on prendra 0,035 g pour la masse d’un grain et 653 millions de tonnes pour la production
annuelle mondiale de blé en 2013).
Note : La solution :
donne le résultat, mais n’est pas assez claire. Pour rendre ce calcul plus lisible en évitant d’utiliser une expression
ne contenant que des nombres, utilisez des variables en leur donnant des noms parlants, de manière à ce que la
suite d’instruction s’auto-commente.
Par exemple,
4 Écriture de programmes
La fenêtre Python Shell s’avère vite insuffisante lorsque les développements prennent de l’importance. Il est
nécessaire alors de stocker des suites d’instructions dans un fichier (script) que l’on peut sauvegarder sur disque
pour le conserver et le réutiliser en cas de besoin.
Pour pouvoir saisir un programme et le sauvegarder, on dispose de l’éditeur de texte IDLE (lui-même écrit en
Python).
Dans la fenêtre Python Shell, choissez le File/New File. La fenêtre ci-dessous apparaît.
Cette fenêtre, titrée pour l’instant Untitled, va nous permettre de saisir notre premier programme, limitée à
une seule instruction :
On peut sauvegarder ce programme (le classique File/Save As...), et pour exécuter ce programme, on utilise le
menu Run/Run Module (raccourci <F5>).
La fenêtre Python Shell est réinitialisée et le programme s’exécute.
Les expressions peuvent être nommées pour être réutilisées plus facilement. Par exemple, pour demander à
l’utilisateur son nom, puis lui afficher un message de bienvenue :
–5/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
nom = input("Entrez votre nom : ") # input demande une saisie clavier
print("Bonjour,", nom, "! Comment allez-vous ?")
Notez que la variable nom n’est pas mise entre double quotes. Essayez de la mettre entre double quotes et notez
le résultat.
Les sous-instructions doivent toutes être décalées du même nombre d’espaces, en général 4 espaces. Ce
décalage est appelé indentation et on parle d’indenter ou de désindenter une ligne.
5 Écriture de fonctions
Pour que des traitements puissent être réutilisés, Python permet de leur attribuer des noms. Par exemple :
# fichier : cercle.py
# auteur : Jean-Claude GEORGES
# date : 14/05/2010
# màj : 13/09/2017
# exemple de programme définissant des fonctions
import math
# périmètre d'un cercle
def périmètre(rayon):
""" calcule et retourne le périmètre d'un cercle de rayon r
La formule utilisée est p = 2 Pi r
–6/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
"""
return 2 * math.pi * rayon
# aire d'un cercle
def aire(rayon):
""" calcule et retourne l'aire d'un cercle de rayon r
2
La formule utilisee est a = Pi r
"""
return math.pi * rayon ** 2
S’il n’y a pas d’erreurs, dans la fenêtre Shell IDLE, vous pouvez maintenant utiliser vos deux fonctions
perimetre et aire :
>>> périmètre(0.5)
3.141592653589793
>>> aire(2.0)
12.566370614359172
De plus, la première chaîne de caractères entre """triples double quotes""" est interprétée par Python
comme une docstring (chaîne de documentation), et peut être affichée de manière naturelle par la commande :
>>> help(aire)
Help on function aire in module __main__:
aire(r)
calcule et retourne l'aire d'un cercle de rayon r
2
La formule utilisee est a = Pi r
6 Un programme complet
Exercice 9 — Le jeu du + ou -
Solution p. 13
• Créez un nouveau répertoire de nom plusmoins
• Dans IDLE, ouvrez une nouvelle fenêtre (File/New File).
• Saisissez le programme suivant.
• Notez bien que les décalages (indentations) sont importants et marquent les blocs d’instructions internes.
• Sauvegardez-le dans le répertoire plusmoins sous le nom devine.py et exécutez-le.
• Notez les messages d’erreur pour vous y habituer et corrigez-les.
• Testez le programme.
• Le programme n’est pas sécurisé et si vous entrez autre chose que des nombres, il plantera. Notez le
message d’erreur à l’exécution (nous verrons plus tard comment remédier à cela).
• Vous pouvez constater que "tentative" prend un ’s’ au pluriel dans le message de félicitations. Comment
tester qu’il n’en prend pas au singulier (gain en un coup) ?
• Essayez de modifier le programme pour autoriser un nombre limité de tentatives et faire perdre le joueur
s’il dépasse ce nombre. N’oubliez pas de modifier les commentaires de début.
Note : lorsque l’on modifie un programme qui fonctionne pour l’améliorer, on ne travaille jamais sur
l’original mais sur une copie que l’on renomme (par exemple devine2.py). Tout programme qui fonctionne doit
être conservé.
–7/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
# fichier : devine.py
# auteur : Jean-Claude GEORGES
# date : 19/05/2010
# màj : 13/09/2017
# exemple simple de programme python : le nombre à deviner
import random # pour générer des nombres pseudo-aléatoires
########## introduction ##################
print (""" Voici le classique jeu du nombre à deviner (niveau Adibou).
L'ordinateur va choisir un nombre au pseudo-hasard
et tu vas essayer de le deviner .""")
######## initialisation ##################
MINI, MAXI = 1, 999
nb_essais = 0 # nombre d'essais
trouvé = False # type booleen
nb_à_deviner = random.randrange(MINI, MAXI +1) # nombre à deviner
msg = 'Propose un nombre entre ' + str(MINI) + ' et ' + str(MAXI)+ ' : '
########## corps du programme ##################
while not trouvé: # tant qu'on n'a pas trouvé
x = int(input(msg))
if x == 284628: # cheat code DULRDU pour beta testeurs
print(nb_à_deviner)
continue
nb_essais += 1
if x < nb_à_deviner:
print (" C'est plus ! Essaie encore !")
elif nb_à_deviner < x:
print (" C'est moins ! Essaie encore !")
else: # x == nb_à_deviner
trouvé = True
########## fin du programme ####################
print ("\nBravo. Tu as deviné le nombre en ",
nb_essais, " tentative",
's' if nb_essais > 1 else '', sep = '', end = ' ! ')
print("\n" * 5, "Game over...")
–8/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
7 Le Talkhys
Le Talkhys est un traité d’arithmétique pratique d’I b n A l b a n n a, mathématicien et astronome marocain
de la première moitié du x i i i e siècle. Voici quelques tableaux numériques extraits du Talkhys :
Talkhys 1 Talkhys 2
9 × 1 + 2 = 11
1 × 1 = 1
9 × 12 + 3 = 111
11 × 11 = 121
9 × 123 + 4 = 1111
111 × 111 = 12321
9 × 1234 + 5 = 11111
1111 × 1111 = 1234321
9 × 12345 + 6 = 111111
11111 × 11111 = 123454321
9 × 123456 + 7 = 1111111
111111 × 111111 = 12345654321
9 × 1234567 + 8 = 11111111
1111111 × 1111111 = 1234567654321
9 × 12345678 + 9 = 111111111
Talkhys 3 Talkhys 4
8 × 1 + 1 = 9
9 × 9 + 7 = 88
8 × 12 + 2 = 98
9 × 98 + 6 = 888
8 × 123 + 3 = 987
9 × 987 + 5 = 8888
8 × 1234 + 4 = 9876
9 × 9876 + 4 = 88888
8 × 12345 + 5 = 98765
9 × 98765 + 3 = 888888
8 × 123456 + 6 = 987654
9 × 987654 + 2 = 8888888
8 × 1234567 + 7 = 9876543
9 × 9876543 + 1 = 88888888
8 × 12345678 + 8 = 98765432
Comment écrire en Python les instructions permettant d’afficher, par exemple, le premier tableau du Talkhys
(sans mise en forme) :
Il faut tout d’abord regarder comment s’écrit une ligne du tableau :
En l’analysant, on constate qu’elle est formée comme suit : un nombre (111111), un texte ('*'), le même
nombre (111111), un texte ('=') et enfin le carré du nombre. (123454321)
D’où les lignes Python que l’on peut tester dans une console :
>>> a = 11111
>>> print(a, '*', a, '=', a ** 2)
11111 * 11111 = 123454321
Cette ligne va devoir être répétée, en modifiant la valeur de a. Comment la valeur de a peut-elle être déduite
de la valeur de a de la ligne précédente ? Une petite étude permet de dire que : anouveau = aancien ∗ 10 + 1
Ce qui permet d’écrire la fonction suivante :
def Talkhys1(nb_lignes):
""" affiche les n premières lignes du tableau 1 du Talkhys.
"""
a = 0
for i in range(nb_lignes): # répètera 'nblignes' fois
a = a*10 +1
print(a, "*", a, "=", a**2)
Exercice 10 — Le Talkhys
Solution p. 14
Entrez la fonction ci-dessus et testez-la.
Écrivez les fonctions permettant d’afficher les trois autres tableaux du Talkhys (sans mise en forme)
–9/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
8 Solutions
>>> 1234
1234
>>> -123456789
-123456789
>>> 3.14
3.14
>>> 6.02e23
6.02e+23
>>> -1.60217653e-19
-1.60217653e-19
>>> 2+3j
(2+3j)
>>> 2-1j
(2-1j)
–10/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
En effet, Python effectue les opérations de gauche à droite. Pour la première expression, il calcule déjà 0.3 + 0.2,
puis ajoute au résultat 0.1. Pour la seconde opération, il calcule 0.1 + 0.2, puis ajoute au résultat 0.3. Or ces
nombres n’ont pas une écriture finie en base 2. Les erreurs sur le dernier chiffre se compensent dans un cas, mais
pas dans l’autre.
Même punition...
>>> 19 * (
... 1
... + 3
... / (
... 1 / (1 + 1 / (1 + 1 / 2))
... - 1 / (1 + 1 / (1 + 1 / 3))
... )
... )
2013.9999999999916
–11/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
# fichier : cercle.py
# auteur : Jean-Claude GEORGES
# date : 14/05/2010
# màj : 13/09/2017
# exemple de programme définissant des fonctions
import math
π = math.pi
–12/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
# fichier : rectangle.py
# auteur : Jean-Claude GEORGES
# date : 21/06/2013
# màj : 13/09/2017
# exemple de programme définissant des fonctions : rectangle
# fichier : devine2.py
# auteur : Jean-Claude GEORGES
# date : 21/06/2013
# màj : 13/09/2017
# exemple simple de programme python : le nombre à deviner
import random # pour générer des nombres pseudo-aléatoires
########## introduction ##################
print (""" Voici le classique jeu du nombre à deviner (niveau Adibou).
L'ordinateur va choisir un nombre au pseudo-hasard
et tu vas essayer de le deviner .""")
######## initialisation ##################
MINI, MAXI = 1, 999
NB_MAX_ESSAIS = 3
nb_essais = 0 # nombre d'essais
trouvé = False # type booleen
nb_à_deviner = random.randrange(MINI, MAXI +1) # nombre à deviner
msg = 'Propose un nombre entre ' + str(MINI) + ' et ' + str(MAXI)+ ' : '
–13/14–
ISBS ECUE 122 TP1 Programmation avec Python (avec corrigé) 2017-2018
def talkhys2(n):
a = 0 # le nb qui sera multiplié par 9
for ligne in range(1, n + 1):
a = a*10 + ligne
print(9,"*", a, "+", ligne+1, "=", 9*a+ligne+1)
>>> talkhys2(7)
9 * 1 + 2 = 11
9 * 12 + 3 = 111
9 * 123 + 4 = 1111
9 * 1234 + 5 = 11111
9 * 12345 + 6 = 111111
9 * 123456 + 7 = 1111111
9 * 1234567 + 8 = 11111111
def talkhys3(n):
a = 0
for ligne in range(1, n + 1):
a = a*10 + (10 - ligne)
print(9, "*", a, "+", (8 - ligne),
"=", 9*a + (8 - ligne))
def talkhys4(n):
a = 0
for ligne in range(1, n + 1) :
a = a*10 + ligne
print(8, "*", a, "+", ligne, "=", 8*a+ligne)
–14/14–