Structures de contrôle
1 Notions principales
1.1 Tests
Les expressions booléennes permettent de formuler des embranchements conditionnels dans les
séquences d’instructions des programmes Python. On parle de structures alternatives car elles
autorisent la séparation de la séquence d’instruction en plusieurs sous-séquences en fonction du
contexte d’exécution traduit par les valeurs des différentes variables. Par exemple :
if (x < 0):
print (x, ’est negatif’)
elif (x == 0):
print (x,’est nul’)
else:
print (x,’est positif’)
Plusieurs mot-clés sont utilisés: if permet de débuter une alternative. Ce mot clé est suivi d’une
expression booléenne ((x < 0)) qui, si elle est vérifiée, entraîne l’exécution du bloc de code qui
suit (print x, ’est négatif’), délimité par le le caractère :et l’utilisation de tabulations dans
les lignes suivantes. Lorsque le premier test porté par le if initial n’est pas vérifié, il est possible
d’énumérer une (comme dans notre cas) ou plusieurs alternatives à l’aide mot-clé elif (qui peut
se traduire par “sinon si”). Enfin le mot-clé else peut être utilisé pour couvrir l’ensemble des cas
non couverts par les tests if et elif précédents.
1.2 Structures itératives: Boucles
Les structures itératives permettent de répéter une même opération plusieurs fois, de façon à se
rapprocher graduellement du résultat désiré ou bien étudier un phénomène à différentes étapes.
Deux types de structures itératives existent, selon que l’on est capable d’énumérer ou non les
différentes étapes du processus. La boucle tant que permet d’exprimer une répétition pour laquelle
il n’est pas possible d’énumérer a priori le nombre d’étapes.
la boucle tant que repose sur le mot-clé while suivi d’une expression booléenne dont la valeur
(True ou False) décide de la continuation de la boucle. Celle-ci prend fin lorsque la valeur
de l’expression booléenne (également appelé test) devient faux (False en Python). Cette
première ligne est suivie du caractère :et d’une indentation qui délimite le bloc de code qui
va être répété. Ce bloc de code doit modifier le contexte de façon à ce qu’il soit possible que
l’expression booléenne de test prenne la valeur False. Si cette expression est tout le temps
True dès lors que l’on est rentré dans la boucle, on parle de boucle infinie.
la boucle Pour qui est utilisée dans le cas où il est possible d’énumérer les étapes de l’itération.
En Python, la boucle Pour est traduite par les mot-clés for...in ... qui permet de spécifier
le nom de la variable qui porte l’itération (par exemple x) et l’ensemble des valeurs possibles
pour cette variable sous la forme d’une énumération de valeurs. Pour représenter une telle
énumération de valeurs, le langage Python possède la fonction range(start, end, step) qui
génère une liste des valeurs comprises entre start inclus et end exclu par pas de step valeurs
(par défaut step égal 1).
Toute boucle for peut être traduite par une boucle while, mais pas l’inverse, car la boucle for
ne peut pas représenter des critères d’arrêt de la boucle autre que ceux basés sur une énumération.
Par exemple, si l’on dispose d’une fonction Python fqui calcule les valeurs de notre fonction
et également une fonction plot(x,y) qui affiche le point de coordonnées (x, y), alors le tracé des
valeurs de la fonction fpeut se traduire comme suit :
. . . avec la boucle Tant que : . . . avec la boucle Pour :
x=1
while x < 11:
y = f(x)
plot(x,y)
x=x+1
for xin range(1,11):
y = f(x)
plot(x,y)
2 Paquet d’exercices
2.1 Structures alternatives
Question 1. On considère l’échelle chronologique suivante :
Période Date de fin
Préhistoire -3000
Antiquité 476
Moyen-Age 1492
Renaissance 1643
Monarchie absolue 1789
Révolution 1815
Monde Contemporain -
Écrivez une suite d’instructions qui demande une date (sous la forme d’une année) à l’utilisateur,
la stocke dans une variable et affiche une chaîne de caractères contenant le nom de la période
historique correspondante.
2.2 Boucle for
Triangle d’étoiles.
1. Ecrivez une fonction ligne qui prend en argument un nombre entier net qui affiche sur une
ligne ncaractères ’*’ suivis d’un saut de ligne. Vous proposerez une solution utilisant une
boucle "for". On utilisera la fome print ("*",end="") pour éviter le caractère de saut de
ligne entre chaque affichage d’étoile.
2. Ecrivez une fonction rectangle qui prend en argument une largeur et une longueur et affiche
un rectangle d’étoiles de “largeur” lignes et “longueur” colonnes.
3. Ecrivez une fonction triangle qui prend en argument un nombre de lignes let dessine le
triangle d’étoiles correspondant comme suit :
l= 1 l= 2 l= 3 l= 4
* *
* *
*
* *
***
*
* *
***
****
4. On souhaite désormais afficher un caractère sur deux sous la forme d’une étoile ‘*’ et un
caractère sur deux sous la forme d’un dollar ‘$’. Proposez une fonction qui dessine un
rectangle respectant les contraintes précédentes.
Somme cumulée. Écrivez un programme qui affiche les valeurs cumulées entre 1 et 10 inclus,
soit les valeurs : 1, 3, 6, 10, 15, 21, 28, 36, 45 et 55.
Calcul d’une puissance. Etant donné un réel xet un entier n, le but est de calculer xn.
1. Ecrire une fonction prenant un réel xet un entier net renvoyant l’évaluation de xn.
2. Evaluer le temps de calcul de 9999999.
3. Ecrire une fonction encodant l’exponentiation rapide. Il s’agit de calculer xnde façon récur-
sive de la manière suivante : Si n= 1 il n’y a rien à faire, on renvoie x. Sinon, si nest pair
on calcule x2et on rappelle la fonction sur x2et n/2; sinon on renvoie la multiplication de
xpar le résultat de l’exponentiation rapide de x2avec pour puissance (n1)/2.
4. Evaluer le temps de calcul de 9999999.
2
Simulation: estimer πImaginons une cible représentée par un disque de rayon r(donc de
surface π·r2). Cette cible est incluse dans un carré de côté 2r(donc de surface (2r)2). Pour
estimer nous allons jeter au hasard des fléchettes dans ce carré. La probabilité qu’une fléchette
tombe sur la cible est donc π
4. En jetant un grand nombre de fléchettes nous aurons donc une
estimation de π!
Ecrivez le script Python qui permet de réaliser cette estimation.
Affichage Matplotlib. Affichez graphiquement chaque lancé: une fléchette dans la cible sera
symbolisée par un rond bleu, une fléchette hors de la cible par un rond rouge.
Une tortue dans les étoiles. Dans cet exercice, on souhaite utiliser le module Turtle pour
dessiner des étoiles en mode graphique (voir: http://docs.python.org/3.0/library/turtle.html).
Ce module reprend les fonctionnalités de la géométrie Tortue du langage Logo inventé à la fin des
années 60. Ce langage propose de déplacer une Tortue sur l’écran à l’aide de primitives simples.
Un programme constitué d’instructions “tortue” va permettre de construire des dessins à l’écran
de manière déclarative, sur la base des déplacements de la tortue.
Pour ce faire, nous considérons qu’une étoile possède un nombre nde sommets répartis de
manière équidistante sur un cercle dont le rayon détermine la taille de l’étoile et dont le centre
positionné en (x, y)en détermine la position. Pour mémoire, les coordonnées du i-ème point sur
ni[0, n]sur le cercle de centre (x, y)et de rayon rsont données par :
x+rcos(2
m)(1)
y+rsin(2
m)(2)
1. Écrivez deux fonctions abscisseN et ordonneeN qui prennent en argument la position du
centre du cercle, son rayon, ainsi que l’indice ndu point que l’on considère et le nombre de
sommets m.
2. Écrivez une fonction cercle qui trace un cercle sous la forme de m1segments de même
longueur. Cette fonction prend en argument la position du centre du cercle, son rayon, ainsi
que le nombre mde sommets et sa couleur.
3. On s’intéresse maintenant au dessin des étoiles à l’aide du module Turtle. Pour cela nous
différencions le cas où les étoiles ont un nombre pair de sommets du cas où ce nombre est
impair. Écrivez deux fonctions etoile_paire et etoile_impaire qui réalise l’affichage de
telles étoiles à partir des arguments suivants : la position du centre du cercle, son rayon,
ainsi que le nombre mde sommets et sa couleur.
Indications :
1. Pour une étoile avec un nombre impair de sommets, il faut relier un sommet sur deux avec
un segment. Ainsi, pour une étoile à 7branches, le point en π/7sera relié au point en 3π/7,
lui même relié au point 5π/7. . . , jusqu’à revenir au point initial.
2. Pour une étoile avec un nombre pair de sommets, il n’est pas possible de revenir sur le
point initial. Un étoile est donc dessinée en considérant deux étoiles créées comme dans le
cas d’une étoile paire : la première relie les points d’indices 1,3,5. . . et la seconde relie les
points d’indice 2,4,6. . .
2.3 Boucles while
Moyennes.
1. Ecrire un programme qui demande à l’utilisateur 10 valeurs et donne la moyenne des valeurs
entrées. Modifiez ensuite votre programme de façon à ce des valeurs soit demandées jusqu’à
ce que deux valeurs identiques sont entrées consécutivement (ou que 10 valeurs sont entrées).
2. Ecrivez un programme qui demande la saisie de 10 notes sur 20 et compte combien sont
au-dessus de la moyenne et combien sont en-dessous.
3. Modifiez le programme précédent pour que la saisie de chaque note donne lieu à une vérifi-
cation que la note est bien comprise au sens large entre 0 et 20 (on pourra utiliser pour cela
une boucle while).
3
Vérification d’une saisie utilisateur.
1. Écrivez un programme qui demande la saisie d’un nombre compris entre 1 et 100. Si le
nombre saisi n’est pas compris dans cet intervalle, le système repose la question indéfiniment.
2. Modifiez le programme pour que la personne n’ait pas droit à plus de 10 essais pour saisir
la valeur correcte.
Approximation de 2: Méthode de Théon de Smyrne. On définit les 2 suites suivantes
:pn+1 =pn+ 2qnet qn+1 =pn+qn, en prenant comme valeurs initiales p0=q0= 1. On peut
prouver que le rapport pn/qnconverge vers 2. On sait que 21.414213562373095048.
Ecrire une fonction prenant app, l’approximation de 2ainsi qu’en entier dig inférieur à ou
égal à 18 et calculant le plus petit ntel que pn/qnapproche app à10dig près.).
Evaluer votre fonction en app et 18.
Approximation de 2: Méthode de Heron. On définit les 2 suites suivantes : pn+1 =
p2
n+ 2q2
net qn+1 = 2pnqn, en prenant comme valeurs initiales p0=q0= 1. On peut prouver que
le rapport pn/qnconverge vers 2.
Ecrire une fonction prenant app, l’approximation de 2ainsi qu’en entier dig inférieur à ou
égal à 18 et calculant le plus petit ntel que pn/qnapproche app à10dig près.).
Evaluer votre fonction en app et 18.
4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !