Boucles imbriquées
Les algorithmes que nous avons vus jusqu'ici utilisent pour la plupart une boucle for.
Dans les exercices ci-dessous, nous allons utiliser des boucles imbriquées : des boucles dans des boucles.
- on parcours le tableau de gauche à droite
- Pour chaque élément d'indice i, on le permute avec l'élément d'indice j avec j aléatoire entre 0 et i
L'état d'une lampe sera représenté par True (allumé) ou False (éteint).
Commencez par créer un tableau de 100 booléen tous égaux à True, c'est l'état après l'étape 1.
Ensuite vous devez effectuer les étape 2 à 100 (inclues). Durant chaque étape, vous devez changer l'état des lampes qui conviennent. Par exemple à l'étape 2, toutes les lampes paires, etc...
Enfin, un dernier parcours de la liste des lampes sera fait pour afficher les n° des lampes allumées
Série d'exercice portant sur l'utilisation du Tant que
L'usage des boucles while peut poser d'autres problèmes que ceux vus précédemment. Voyons cela sur des exemples :
Dans cet exercice vous allez programmer une simulation d'une course entre le lièvre et la tortue.
Les règles du jeu :
On jette un dé à 6 faces. Si on obtient 6, le lièvre à gagné, sinon, la tortue avance d'une case. La tortue gagne si elle atteint la 4ème case, les deux partent de la case 0.Vous devez écrire la fonction game() qui renvoie "Lievre" ou "Tortue".
Dans cette seconde partie, on admet que vous disposez de la fonction game() de l'exercice précédent. Vous allez l'utiliser pour déterminer qui, du Lièvre et de la Tortue, a les meilleures chances de gagner la course.
Pour le savoir, écrire un code qui appelle 1000 fois la fonction game() et qui affiche le pourcentage de victoires de la Tortue, arrondi à 0.1 près (utiliser round() ).
Ce dernier code cache une boucle imbriquée dans le boucle. Combien de fois appelle t-on game() ? Si on admet qu'une partie se joue en moyenne en 4 lancés de dé, combien de fois les 1000 courses ont nécessité le lancé du dé ?
Il est naturellement possible d'expliquer le paradoxe du Duc de Toscane en calculant les probabilités d'obtenir 10 ou 9. Mais nous allons le faire d'une autre façon : en effectuant des simulations numériques.
La première chose à faire est de créer une fonction play() qui simule une partie.
Dans un second temps, nous écrirons un code qui appelle un grand nombre de fois cette fonction play() et compte le nombre de 10 et de 9 obtenus.
On arrêtera lorsque le nombre de 9 + nombre de 10 sera égal à 1000 comme si nous jouions un grand nombre de parties.
Maintenant vous devez écrire un code qui appelle play() tant que le nombre de résultats 9 ou 10 n'est pas 1000.