TD⚓︎
Exercice 1
Dans le programme suivant, quelle est la variable d'itération ? Qu'elle est sa valeur à la fin de la boucle ?
fin = 10
for cmpt in range(fin):
print("Vive Python 3 !")
La variable d'itération est cmpt
.
Sa valeur finale est 9.
Exercice 2
Dans le programme suivant, quelle est la variable d'itération ? Quelle est sa valeur à la fin de la boucle ? Qu'affiche-t-il ?
N = 7
for nb_etoile in range(N):
print("*" * nb_etoile)
La variable d'itération est nb_etoile
.
Sa valeur finale est 6.
*
**
***
****
*****
******
Exercice 3
Écrire un programme de trois lignes qui affiche la table de multiplication par 7
:
1 * 7 = 7
2 * 7 = 14
...
10 * 7 = 70
Attention : La ligne 0 * 7 = 0
ne doit pas apparaitre, et vous ne devez pas utiliser de if
!
for i in range(10):
print(i + 1, '*', 7, '=', (i + 1) * 7)
Exercice 4
Écrivez un programme qui lit un entier positif n donné par l'utilisateur, puis n nombres entiers (toujours entrés par l'utilisateur) et compte et affiche en fin de programme combien parmi ces valeurs sont strictement positives, strictement négatives, nulles.
N = int(input('Combien de nombres voulez vous entrer ? '))
pos, neg, nul = 0, 0, 0
for i in range(N):
nb = int(input('ENtrez un nombre : '))
if nb > 0:
pos += 1
elif nb < 0:
neg += 1
else:
nul += 1
print('Vous avez entré', pos, 'nombre(s) positif(s),', neg, 'nombre(s) négatif(s) et', nul, 'zéro(s).')
Exercice 5
Écrivez une fonction fact
qui renvoie la factorielle d'un nombre.
Exemple:
>>> fact(5)
def fact(N):
res = 1
for i in range(N):
res *= i + 1
return res
Exercice 6
Au cours précédent, nous avons écrit un programme permettant de calculer la moyenne d'un cours contenant deux contrôles continus et un examen.
Ajoutez des saisies contrôlées lors de la saisie des trois notes pour rendre le programme un peu plus robuste.
# La note finale est le maximum de la note d'examen
# et de la moyenne entre examen et moyenne de contrôle
# continu
note_cc1 = float(input('Note du premier contrôle : '))
note_cc2 = float(input('Note du second contrôle : '))
note_exam = float(input("Note de l'examen : "))
if note_cc1 < 0 or note_cc2 < 0 or note_exam < 0:
print('Erreur de saisie (note négative).')
else:
moyenne_cc = (note_cc1 + note_cc2) / 2
if moyenne_cc < note_exam:
note_finale = note_exam
print('Note de contrôle non prise en compte.')
else:
note_finale = (moyenne_cc + note_exam) / 2
print('Note de contrôle prise en compte.')
print('Note finale :', note_finale)
if note_finale < 10:
print('Encore un petit effort !')
elif note_finale < 12:
print('Ça passe !')
elif note_finale < 14:
print('Pas mal !')
else: # Quelles valeurs possibles ?
print('Bravo !')
note_cc1 = float(input('Note du premier contrôle : '))
while note_cc1 < 0 or note_cc1 > 20:
print('Une note entre 0 et 20')
note_cc1 = float(input('Note du premier contrôle : '))
Exercice 7
Écrivez un programme qui laisse l'utilisateur saisir autant de nombres positifs qu'il veut, tant que chaque nombre est strictement supérieur à celui d'avant. Si un nombre saisi ne vérifie pas la règle, le programme s'arrête et indique combien de nombres comporte la suite strictement croissante saisie par l'utilisateur.
cmpt = 0
ancien = 0
nouveau = int(input('Entrez un nombre : '))
while nouveau > ancien :
ancien = nouveau
nouveau = int(input('Entrez un nombre : '))
cmpt += 1
print('Vous avez entré', cmpt, 'nombres croissants')
Exercice 8
- Écrivez un programme qui permet à l'utilisateur de saisir autant de nombres entiers qu'il veut et calcule et affiche la moyenne de ces nombres. Quand il a terminé l'utilisateur écrit
stop
au lieu d'un nombre.
Remarque : Exceptionnellement, on ne fera pas de saisie contrôlée dans cet exercice.
- Modifiez le programme pour qu'il redemande chaque nombre saisi s'il n'est pas compris entre 0 et 20.
somme = 0
cmpt = 0
val = input('entrez un nombre')
while val != 'stop':
somme += float(val)
cmpt += 1
val = input('entrez un nombre ou stop pour arrêter')
print('moyenne', somme / cmpt)
Exercice 9
On considère le programme suivant :
actuel = 1
avant = 1
while actuel < 1000:
print(actuel)
actuel, avant = actuel + avant, actuel
- Que réalise le programme ci-dessus ?
- Ce programme contient une boucle
while
. Est-ce un choix judicieux ? Si non, traduisez-le en un programme contenant une bouclefor
.
-
Il calcule les termes d'une suite de nombres commencant par 1 et 1 où chaque nombre est la somme des deux précédents. S'arrête lorsque les nombres dépassent 1000.
-
C'est judicieux puisque l'on ne sait pas combien de fois on passe dans la boucle (nombre d'itération) pour atteindre 1000.
Exercice 10
Indiquez si vous utiliseriez plutôt une boucle while
ou plutôt une boucle for ... in range(...)
pour :
- écrire un programme demandant à l'utilisateur un mot de
5
lettres. - écrire un programme dessinant la forme suivante :
* * * * * * **
- écrire un programme demandant à l'utilisateur un entier et déterminant combien de fois de suite cet entier est divisible par 2.
- Si saisie controlée alors c'est
while
, si c'est la création d'un mot lettre par lettre alors c'est une bouclefor
. - Boucle
for
puisque l'on sait que l'on va itérer 4 fois (hauteur du V) - Boucle
while
car on ne sait pas à l'avance combien de fois on va itérer.
Exercice 11
Écrire un programme qui affiche toutes les tables de multiplication de 1
à 10
.
for nb in range(10):
for i in range(10):
print(i + 1, '*', nb + 1, '=', (i + 1) * (nb + 1))