TP - Exercices sur while
Rappels
Pensez à enregistrer vos fichiers sur le réseau afin de ne pas les perdre ! Vous pouvez aussi les stocker sur une clef USB pour y retravailler à la maison.
Commencez par créer l'arborescence de dossiers suivants :
Documents/
└── NSI/
├── Cours
└── Exercices/
├── Introduction/
├── Conditions/
└── Boucles/
└── While/
├── exercice1.py
├── exercice2.py
└── ...
Pensez à ajouter des commentaires dans vos fichiers lors de la programmation ! Il sera ainsi plus facile de revenir dessus plus-tard.
Exercice n°1 : Carrés et cubes
Écrire un programme, avec la boucle while, permettant d’afficher les carrés et les cubes des 20 premiers
entiers naturels non nuls.
Une piste ?
Quelle sera la condition de la boucle ? Il sera nécessaire de règler une variable avant la boucle.
Une aide ?
Il faut stocker les entiers naturels dans une variable : x par exemple. Le premier entier est 1, et les
suivants sont donc x + 1. Cela devrait vous aider à trouver la condition de boucle.
Exercice n°2 : Monopoly
On veut écrire une simulation du jeu de monopoly. Un joueur peut rejouer s'il fait un double.
Mais attention ! S'il faut trois doubles de suite, il doit aller en prison.
Le programme à concevoir doit :
- Simuler le lancer aléatoire de deux dés à 6 faces ;
- Afficher la valeur de chaque face ainsi que le nombre de cases à parcourir ;
- Relancer les dés dans le cas d'un double ;
- Recommencer... et envoyer le joueur en prison s'il y a trois doubles de suite.
Un exemple d'affichage avec envoi en prison :
Les faces sont 5 et 5 : Avancez de 10 cases.
Il y a un double, rejouez.
Les faces sont 2 et 2 : Avancez de 4 cases.
Il y a un double, rejouez.
Les faces sont 6 et 6 : Avancez de 12 cases.
Oups ! Encore un double, allez en prison !
Obtenir un nombre aléatoire
Le module random donne accès à des fonctions qui renvoient des nombres aléatoires. Il existe deux fonctions importantes :
- La fonction
random()qui renvoie un nombre décimal aléatoire entre 0 et 1 (exclu). - La fonction
randint(nb1, nb2)qui renvoie un nombre entier aléatoire entrenb1etnb2inclus.
Voici un exemple d'usage de ces fonctions :
from random import * # Pour accéder aux fonctions du module
a = random() # Nombre décimal aléatoire entre 0 et 1 (exclu)
b = randint(3, 12) # Entier aléatoire entre 3 et 12 inclus
print(f"La valeur de a est {a}")
print(f"La valeur de b est {b}")
Une piste ?
Il faudrait essayer d'utiliser un maximum de variables. Et ces variables doivent avoir une dénomination explicite !
Une autre piste ?
Le descriptif du programme à concevoir détaille bien le travail à réaliser. Prenez le temps de faire un brouillon...
Exercice n°3 : Un algorithme bien connu
Écrire un programme qui résout l'équation du second degré \(a x^2 + bx + c = 0\).
L'utilisateur entre les valeurs des coefficients a, b et c (en obligeant cet utilisateur à entrer une valeur non
nulle pour a) et le programme affiche la valeur du discriminant et les éventuelles solutions (données sous forme
approchée).
Dans l'exemple d'affichage ci-dessous, l'utilisateur a entré les valeurs 1, -3 et 2.
Resolution de ax^2 + bx + c = 0.
Valeur de a : 1
Valeur de b : -3
Valeur de c : 2
Le discriminant est 1.0.
Il y a deux solutions : 1.0 et 2.0.
Calculer une racine carrée
Le module math donne accès à des fonctions autour des mathématiques. Voici un exemple d'usage :
from math import * # Pour accéder aux fonctions du module
x = 16
y = sqrt(x)
print(f"La racine carrée de {x} est {y}")
Où est la boucle while ?
La boucle while va permettre de vérfier que l'utilisateur entre une valeur non nulle pour a.
Un conseil ?
Si vous avez oublié ce qu'est une équation du second degré, consultez votre cours de mathématiques.
Une aide ?
Vous devez d'abord obtenir les valeurs de a, b et c. Pour celle de a, vérifiez à l'aide d'une boucle que
la valeur est différente de 0.
Ensuite, calculez le delta de l'équation : \(\Delta = b^2 - 4ac\) et rajoutez des exécutions conditionnelles (if/else) en fonction de la valeur de \(\Delta\) :
- Si \(\Delta < 0\), il n'y a pas de solutions.
- Si \(\Delta = 0\), il y a une unique solution \(x=\frac{-b}{2a}\)
- Si \(\Delta > 0\), il y a deux solutions : \(x_1=\frac{-b-\sqrt{\Delta}}{2a}\) et \(x_2=\frac{-b+\sqrt{\Delta}}{2a}\)