tousTP-python 2pp
tousTP-python 2pp
b = 5.50
print “a = ”, a, “ b = ”, b # affichage d’un message, du contenu de a et de b sur la même ligne
c = 5,50
nom = raw_input(“Quel est votre nom : ”)
TP Python 1 TP Python 2
c = 5,50
nom = raw_input(“Quel est votre nom : ”)
TP1b – Langage Python
print “type de a : ”, type(a)
print “type de b : ”, type(b) Rappel: guide à suivre pour l’écriture d’un script : 1/ trouver les données
print “type de c : ”, type(c)
print “type de nom : ”, type(nom) 2/ effectuer les calculs
III- Les actions conditionnelles 3/ afficher le résultat
Remarque : une fois sauvé avec la bonne extension, le script s’exécute quand on clique sur son icône. Script 1 : écrire un script min_max.py qui demande de
Pour éviter tout problème d’encodage, il suffit d’éviter d’utilise les caractères accentués ou spéciaux. saisir 2 valeurs et qui affiche la plus petite
des 2 valeurs.
b) Interprétation et exécution : lancer l’accessoire « invite de commandes »
Script 2 : écrire un script longeur_chaine.py qui demande de saisir 2 chaînes de caractères
1. se placer dans le dossier qui contient le fichier de script (par exemple en tapant
et qui affiche la plus grande des 2 chaînes.
C:\"Documents and Settings"\[nom du compte]\Bureau\...)
2. .\affichage.py pour exécuter le script Script 3 : écrire le script fumeurs.py de la page 9 en le complétant par des saisies.
3. corriger les éventuelles erreurs Script 4 : écrire le script convertir.py qui effectue une conversion euros ! dollars.
a) Le programme commencera par demander à l'utilisateur d'indiquer
par un caractère 'E' ou '$' la devise du montant qu'il va entrer.
b) Puis le programme exécutera une action conditionnelle de la forme :
if devise == 'E' :
.........
elif devise == '$' :
..........
else :
.......... # affichage d'un message d'erreur
Script 5 : écrire le script suivant points_cardinaux.py qui affiche la position géographique (nord, nord-
est, nord-ouest, sud, sud-est, sud-ouest,...) d'une personne se trouvant en un point x,y sur une surface
plane. La position est déterminée par rapport au point origine x=0, y=0. Le programme demandera à
l'utilisateur d'entrer au clavier les valeurs de x et y, puis affichera la situation.
a = 0
while a < 12 :
a = a + 1
forward(150)
left(150)
raw_input(“Pressez ENTRER pour quitter”)
# obligatoire, sinon le programme quitte immédiatement à la fin de la boucle
c) Exercice : écriture d’un script
#! /usr/bin/python # pour indiquer ou se trouve l’interpréteur
Problème : Une machine découpe dans une plaque, des disques circulaires de rayon rExt, percés d’un trou circulaire de # -*- coding :utf-8 -*- # pour spécifier le codage des caractères
from turtle import *
rayon rInt avec rInt < rExt et ne débordant pas du disque. Quelle est la surface d’un disque découpé ?
Guide : angle = 5
distance = 5
1. trouver les données compteur = 0
2. effectuer les calculs
while compteur <= 72 :
3. afficher le résultat forward(distance)
left(angle)
compteur +=1
raw_input(“Pressez ENTRER pour quitter”)
TP Python 3 TP Python 4
TP2a – Langage Python TP2b – Langage Python
I- Algorithmique : listes et parcours
I- Les actions itératives D’après les algorithmes décrits dans le diaporama,
Script 1 : dessiner avec le module turtle. Saisir les deux petits programmes et les exécuter. Script 7, 8 et 9 : écrire plusieurs scripts autour d’un « jeu » de devinette :
#! /usr/bin/python # pour indiquer ou se trouve l’interpréteur Le jeu est initialisé avec 10 valeurs, et l’utilisateur du jeu doit proposer une valeur. Si la valeur est dans la liste,
# -*- coding :utf-8 -*- # pour spécifier le codage des caractères
il a gagné, sinon il a perdu. Ainsi, ces scripts doivent :
from turtle import * • initialiser une liste de 10 valeurs entières (ces valeurs doivent être définies dans le script, et non pas de
saisies par le joueur au clavier : ce sont les « valeurs mystère »),
a = 0
• demander au joueur d’entrer (=de saisir au clavier) une valeur à y rechercher,
while a < 12 :
a = a + 1 • et mette en œuvre un des algorithmes de recherche suivant :
forward(150)
left(150) Script 7 : recherche séquentielle dans une liste non triée
où le programme
raw_input(“Pressez entrée pour quitter”) • parcourt la liste des valeurs en les comparant une à une à la valeur cherchée,
# obligatoire, sinon le programme quitte immédiatement à la fin de la boucle
et sort de la boucle
soit quand il a parcouru toute la liste sans trouver la valeur,
soit quand la valeur a été trouvée ;
#! /usr/bin/python # pour indiquer ou se trouve l’interpréteur • et enfin annonce au joueur s’il a perdu ou gagné
# -*- coding :utf-8 -*- # pour spécifier le codage des caractères selon que toute la liste a été parcourue ou que la valeur a effectivement été trouvée.
from turtle import *
Script 8 : recherche séquentielle dans une liste non triée « bornée »
angle = 5 où, après avoir compté le nombre de valeurs de la liste (n), le programme
distance = 5 • ajoute la valeur cherchée en valeur supplémentaire
compteur = 0 (la dernière valeur était la n-1ième, cette dernière valeur est la nième ; si la valeur était déjà
dans la liste, elle y est alors 2 fois),
while compteur <= 72 :
forward(distance) • parcourt la liste des valeurs en les comparant une à une à la valeur cherchée,
left(angle) et sort de la boucle quand la valeur a été trouvée
compteur +=1 • et enfin annonce au joueur s’il a perdu ou gagné
selon que la valeur a effectivement été trouvée une fois toute la liste a été parcourue ou non.
raw_input(“Pressez entrée pour quitter”) Remarque : cet algorithme permet de n’avoir qu’une seule condition de sortie à la boucle, portant
sur le fait d’avoir trouvée la valeur cherchée. La réussite ou l’échec se repère par le fait que la
valeur trouvée est la dernière ajoutée ou pas.
Script 2 : Ecrire un programme qui trace 1 carré. Script 9 : recherche séquentielle dans une liste triée
Script 3 : Ecrire un programme qui trace 1 triangle équilatéral (3 angles de 60°). où, après avoir triées les valeurs de la liste, le programme
• parcourt la liste des valeurs en les comparant une à une à la valeur cherchée,
Script 4 : Ecrire un programme qui trace 1 hexagone (polygone à 6 cotés) et sort de la boucle quand la valeur courante de la liste est supérieure à la valeur cherchée
Script 5 : Ecrire un programme qui trace 1 carré, puis un triangle. Modifiez ensuite votre programme pour (la valeur cherchée a été dépassée puisque la valeur courante de la liste est plus grande que
dessiner n figures consécutives adjacentes, la valeur de n sera initialisée par une saisie au clavier. la valeur cherchée)
• et enfin annonce au joueur s’il a perdu ou gagné
selon que la valeur a été dépassée ou non.
Améliorer ces scripts pour qu’ils donnent une nouvelle chance au joueur (càd qu’ils lui proposent de saisir une
nouvelle valeur) jusqu’à ce qu’il ait gagné ou qu’il abandonne en tapant la valeur 0.
Script 6 : idem script 5 mais avec l’effet suivant :
TP Python 1 TP Python 2
Script 11 : trier une liste par « tri à bulle »
Ecrire un script qui
• demande à l’utilisateur de saisir une liste de valeurs et met les valeurs saisies dans un tableau
TP3a – Langage Python
• puis, affiche la liste des valeurs du tableau
• parcourt la liste des valeurs à partir de la dernière valeur, en échangeant les valeurs 2 à 2 si la valeur
précédant la valeur courante est plus grande que la valeur courante
Essayer le script obtenu sur plusieurs listes de valeurs pour vérifier que la plus petite de toutes les valeurs saisies I- Les fonctions
se retrouve ainsi « poussée » à la première place dans la liste. Modifier le script pour
• recommencer ce traitement sur les valeurs restantes (après cette plus petite valeur) Script 1 : Ecrire une fonction de nom dessineFigure(...) qui prend en paramètre : le nombre de côtés,
Essayer à nouveau le script obtenu sur plusieurs listes de valeurs pour vérifier que les deux plus petites de toutes
la largeur du côté, la couleur du trait et l’épaisseur du trait. C’est le nombre de cotés qui déterminera
les valeurs saisies se retrouvent ainsi « poussées » aux deux premières places dans la liste. Modifier le script pour la figure qui sera tracée (droite, triangle, carre, ...)
• réitérer ce traitement sur les sous-listes, de plus en plus courtes, des valeurs restantes, jusqu’à ce que la Exemple de l’appel de la fonction : dessineFigure(4, 100, “red”, 1)
sous-liste soit trop courte (càd ne contienne plus qu’une seule valeur).
Script 2 : Ecrire une fonction de nom dessineEtoile(...) qui prend en paramètre : le nombre de coté,
Script 12 : instructions « for » et « while » la largeur du coté, la couleur du trait et l’épaisseur du trait. Un test sera effectué sur le nombre de coté
Dans le script suivant, modifier les boucles « for » en boucles « while ». Expliquez ce que fait cet algorithme et afin de déterminer un nombre minimum de coté permettant de dessiner une étoile.
déroulez-le « à la main » sur l’exemple : [3, 2, 1, 9, 8]. Exemple de l’appel de la fonction : dessineEtoile(8, 100, “red”, 1)
#!/usr/bin/python Script 3 : Il s’agit ici de transformer un script en définissant une fonction et en l’appelant. Le script en
# -*- coding: UTF-8 -*- question est le script du TD précédent qui permet d’insérer 1 valeur dans une liste triée. La fonction à
définir sera insertTriCroissant(l,v), qui insert la valeur v dans la liste l (qui est supposée triée
__version__ = (0, 0, 1) dans l’ordre croissant) sans en perturber l’ordre.
__build__ = (0, 0) #!/usr/bin/python n = int(raw_input("Entrez une nouvelle valeur à y insérer : "))
__date__ = (2010, 11, 26) # -*- coding: UTF-8 -*-
__author__ = ('Tiprof', '') # recherche de la première valeur plus grande
print "*******************************************" i=0
def Swap(l,i,j): print "Insersion d'une valeur dans une liste triée" while(i<len(liste) and liste[i]<n): i +=1
""" Created: 2005.11.08 - Updated: print "*******************************************"
echange 2 valeurs d'une liste """ # quand on sort de la boucle,
t=l[i] liste = [5,8,12,4,7] # soit i<len(liste) est faux,
l[i]=l[j] for i in liste : # soit liste[i]<n est faux
l[j]=t print i if (i<len(liste)): # pour que cette condition soit vraie,
# il faut qu'on soit sorti de la boucle
print("Entrez une liste de valeurs (0 pour quitter): ") liste.sort() # en dépassant la valeur à insérer
liste = [] print "\nAffichage de la liste une fois triée : " liste.insert(i, n) # insersion de la valeur à cette position
n = int(raw_input("? ")) for i in liste : else: # sinon on est dans la situation
while (n != 0): print i # où toutes les valeurs de la liste sont ! n
liste.append(n) liste.append(n) # insersion de la valeur au bout de la liste
n = int(raw_input("? "))
print "\nAffichage de la liste après l'insersion : "
for i in liste :
print "len(liste)="+str(len(liste))
print i
for i in range(len(liste)):
for j in range(len(liste)-1,i, -1):
Le programme principal qui doit appeler cette nouvelle fonction doit préalablement : initialiser en ligne à
if liste[j-1]>liste[j]:
Swap(liste,j,j-1)
"vide" , demander à l’utilisateur de rentrer 3 valeurs , les insérer une à une dans la liste avec cette
print "i="+str(i)+" ; j="+str(j)+" => "+str(liste[j])+" <-> "+str(liste[j-1]) fonction, et finir par afficher la liste obtenue.
Script 4 : il s’agit de modifier les scripts du tri à bulle du TD précédent (récupérable sur le site de cours "
print("La liste de valeurs obtenue est : ") echanges-prog-1passage.py" - http://tiprof.fr/AlgProg-Python/exemples/listes/insersion_triee_1val.py et
for i in liste: "echanges-prog-repetepassages.py" - http://tiprof.fr/AlgProg-Python/exemples/listes/echanges-prog-
print i repetepassages.py) de façon à définir et appeler les deux fonctions :
- trie_bulle (l) où l est a liste à trier en faisant des passages sur de moins en moins déléments
a = raw_input() #attendre
- bulle(l, n) où l est la liste à trier et n l’indice de son dernier élément sur lequel « passer » en faisant
remonter les bulles
TP Python 3 TP Python 1
TP3b – Langage Python TP4 – Langage Python
Les sous-programmes (fonctions et procédures)
Pour tous les exercices vous définirez les différentes fonctions demandées dans un module de nom mDivers.py et
III- Les fichiers vous écrirez votre programme principal dans un autre fichier.
Script 6 : Ecrire dans un fichier mHtml.py , les fonctions décrites ci-dessous : Script 1 : légende
ancre(adr_http, texte) Une légende de l'Inde ancienne raconte que le jeu d'échecs a été inventé par un vieux sage, que son roi voulut
# retourne une chaine : "<a href='http://www.oreilly.fr'>éditions O'Reilly</a>" remercier en lui affirmant qu'il lui accorderait n'importe quel cadeau en récompense. Le vieux sage demanda qu'on lui
fournisse simplement un peu de riz pour ses vieux jours, et plus précisément un nombre de grains de riz suffisant pour
messagerie(email,texte) que l'on puisse en déposer 1 seul sur la première case du jeu, deux sur la suivante, quatre sur la troisième, et ainsi de
# retourne une chaîne comme : "<a href='mailto :toto.free.fr'>Contact</a>" suite jusqu'à la 64e case.
entete(titre) : # retourne une chaîne : "<html>" ... "</head><body><h1>titre</h1>" Écrivez un script qui affiche le nombre de grains à déposer sur chacune des 64 cases du jeu ainsi que le poids du tas de
sable. Calculez le nombre exact de grains (nombre entier) par case et pour chaque case le poids des grains déposés en
corps(texte) # retourne une chaîne : '<div id="centre">bla bla…</div>' sachant qu’un grain pèse 0.000036274 gr
pied() # retourne la chaîne : "</body></html>" Vous définirez une fonction de nom poids(nb,p) qui retournent le produit de nb * p avec nb pour le nombre de
grains et p le poids d’un grain.
ecrireHtml(fichier,texte) # écriture d’un fichier contenant du texte html
exemple d’affichage => Case : 16 Nombre de grains : 32768 Poids : 1.188626432 gr
de sorte que le script test_mHtml.py : Génére, dans le fichier test_mHtml.html, le texte : Script 2 : minimum et maximum
Ecrire un script mini_maxi.py qui effectue une saisie de n entiers et qui affiche la plus petite et la plus grande des
#! /usr/bin/python <html>
valeurs. Vous définirez trois fonctions, saisie(nb)qui effectue la saisie des n entiers dans une liste et qui retourne
# -*- coding: UTF-8 -*- <head>
cette liste, min(a,b) et max(a,b) qui retournent respectivement la valeur mini et la valeur maxi des deux
<title>Chez Tiprof</title>
nombres entiers a et b, passés en paramètre.
from mHtml import * </head>
<body> Ensuite, vous ferez un appel à la fonction de saisie et un appel aux fonctions min(..) et max(...) afin de
e = entete("Chez Tiprof") <h1>Chez Tiprof</h1> déterminer et d’afficher la plus petite et la plus grande valeur.
Script 8 : Ecrire un programme (en créant des fonctions) de nom contenu_rep.py qui lit le contenu d’un PS : readline()lit une seule ligne à la fois et retourne une chaîne de caractères. Cette chaîne est vide en fin de
répertoire rep passé en paramètre et qui met dans une liste, tous les noms de fichiers ou de répertoires se fichier.
trouvant dans rep. Vous afficherez 2 fois ce contenu en utilisant 2 boucles for différentes.
Si l'on ajoute un troisième argument, celui-ci indique que le nombre tiré au hasard doit faire partie d'une série limitée
d'entiers, séparés les uns des autres par un certain intervalle, défini lui-même par ce troisième argument.
Par exemple, randrange(3,13,3) renverra un des nombres de la série 3, 6, 9, 12 :
for i in range(15):
print random.randrange(3,13,3) # affiche : 3 12 6 9 6 6 12 6 3 6 9 3 6 12 12
Ecrire un script de nom jeuCarte.py qui tire au hasard des cartes à jouer. Le nom de la carte tirée sera affiché
par son nom.
def traceDroite():
"Tracé d'une ligne dans le canevas can"
# coordonnées de la ligne
c.create_line(10,190,190,10,width=2,fill="dark green")
btn1 = Button(fen,text='Quitter',command=fen.quit)
btn1.pack(side=BOTTOM)