Questions : boucles bornées
1. Affichage
Info
- L'instruction
print('a')
affiche le caractèrea
et passe à la ligne suivante. - L'instruction
print('a', end = ' ')
affiche le caractère 'a' suivi d'un espace et ne passe pas à la ligne.
Question 1.1
Question
Parmi les 4 boucles suivantes, lesquelles permettent d'afficher sur une seule ligne les entiers de 1 à 10, séparés par un espace et rangés dans l'ordre croissant ?
1 2 3 4 5 6 7 8 9 10
Boucle A :
for i in range(10):
print(i)
Boucle B :
for i in range(10):
print(i, end = ' ')
Boucle C :
for i in range(1, 11):
print(i, end = ' ')
Boucle D :
for i in range(10):
print(i + 1, end = ' ')
- A
- B
- C
- D
- A
- B
- C
- D
Parmi les propositions, celles qui conviennent consistent :
- soit à faire varier i
de 1 à 10 (range(1,11)
) et afficher i
;
- soit à faire varier i
de 0 à 9 (range(10)
) et afficher i + 1
.
Question 1.2
Question
mots = ['système', 'systématique', 'systémique']
Parmi les 4 boucles suivantes, lesquelles permettent d'afficher chaque mot de la liste mots
ainsi que son nombre de lettres ?
système comporte 7 lettres
systématique comporte 12 lettres
systémique comporte 10 lettres
Boucle A :
for i in range(len(mots)):
print(mots[i], "comporte", i, "lettres")
Boucle B :
for mot in mots:
print(mot, "comporte", len(mot), "lettres")
Boucle C :
for mot in mots:
print(mots[i], "comporte", len(mots[i]), "lettres")
Boucle D :
for i in range(len(mots)):
print(mots[i], "comporte", len(mots[i]), "lettres")
- A
- B
- C
- D
- A
- B
- C
- D
La solution B parcourt directement les éléments de la liste mots
et affiche leur valeur et leur nombre de lettres, à l'aide de la fonction len()
.
La solution D parcourt la liste à l'aide des indices des éléments, et affiche leur valeur et leur nombre de lettres.
2. Somme
Question 2.1
Question
On donne la liste de nombres suivante :
nombres = [12, 34, 56, 78, 98, 76, 54, 32, 10]
nombres
?
Programme A :
for i in range(len(nombres)):
somme = 0
somme = somme + nombres[i]
print(somme)
Programme B :
somme = 0
for i in range(len(nombres)):
somme = somme + nombres[i]
print(somme)
Programme C :
somme = 0
for valeur in nombres:
somme = somme + valeur
print(somme)
Programme D :
somme = 0
for valeur in nombres:
somme = somme + valeur
print(somme)
- A
- B
- C
- D
- A
- B
- C
- D
La valeur de la variable somme
est à initialiser à 0
avant le parcours de la liste de nombres.
La solution B parcourt la liste à l'aide des indices des éléments, et ajoute chacun d'eux à la variable somme
.
La solution D parcourt directement les éléments de la liste et ajoute chacun d'eux à la variable somme
.
Enfin, l'affichage de la somme n'est à réaliser qu'après le parcours complet de la liste de valeurs.
Question 2.2
Question
Parmi les 4 programmes suivants, lequel permet d'afficher la somme des carrés des entiers de 1 à 10 ?
Programme A :
for i in range(11):
print(i**2)
Programme B :
somme = 0
for i in range(1, 10):
somme = somme + i**2
print(somme)
Programme C :
somme = 0
for i in range(1, 11):
somme = somme + i**2
print(somme)
Programme D :
somme = 0
for i in range(11):
somme = i**2
print(somme)
- A
- B
- C
- D
- A
- B
- C
- D
La valeur de la variable somme
est à initialiser à 0
avant le parcours de la liste de nombres.
La solution C parcourt la liste des entiers de 1 à 10 compris, et ajoute le carré de chacun d'eux à la variable somme
.
Enfin, l'affichage de la somme n'est à réaliser qu'après le parcours complet des dix entiers.
3. Calculs en boucle
Question 3.1
Question
Quelle serait la valeur de la variable total
à l'issue de l'exécution de ces instructions ?
total = 0
for i in range(4):
total = total + 3
- 6
- 12
- 14
- 30
- 6
- 12
- 14
- 30
i
prend les valeurs 0 à 3, soit 4 valeurs.
Pour chaque valeur de i
, la variable total
est augmentée de la quantité 3.
Finalement, total
vaut 0 + 4*3 = 12
Question 3.2
Question
Quelle serait la valeur de la variable total
à l'issue de l'exécution de ces instructions ?
total = 0
for i in range(4):
total = total + i
- 6
- 12
- 14
- 30
- 6
- 12
- 14
- 30
i
prend les valeurs 0 à 3.
Pour chaque valeur de i
, la variable total
est augmentée de la valeur de i
.
Finalement, total
vaut 0 + 0 + 1 + 2 + 3 = 6.
Question 3.3
Question
Quelle serait la valeur de la variable total
à l'issue de l'exécution de ces instructions ?
total = 0
for i in range(4):
total = total + i**2
- 6
- 12
- 14
- 30
- 6
- 12
- 14
- 30
i
prend les valeurs 0 à 3.
Pour chaque valeur de i
, la variable total
est augmentée de la valeur de i2.
Finalement, total
vaut 0 + 1 + 4 + 9 = 14
4. Boucle avec une condition
Question 4.1
Question
On donne la liste de nombres suivante :
nombres = [12, 34, 56, 78, 90, 12, 34, 56, 78]
reponse
à l'issue de l'exécution de ces instructions ?
cible = 34
reponse = -1
for i in range(len(nombres)):
if nombres[i] == cible:
reponse = i
- -1
- 1
- 2
- 6
- -1
- 1
- 2
- 6
La valeur cible 34
est présente deux fois dans le tableau, donc la condition if nombres[i] == cible
est vérifiée deux fois. La variable reponse
est donc affectée deux fois. En fin de boucle, la valeur de la variable est celle de la dernière affectation, donc l'indice de la dernière occurrence de 34
dans nombres
.
Question 4.2
Question
On donne la liste de nombres suivante :
nombres = [12, 34, 56, 78, 90, 12, 34, 56, 78]
reponse
à l'issue de l'exécution de ces instructions ?
cible = 34
reponse = 0
for nombre in nombres:
if nombre == cible:
reponse = reponse + 1
- 0
- 1
- 2
- 6
- 0
- 1
- 2
- 6
La valeur cible 34
est présente deux fois dans le tableau, donc la condition if nombres == cible
est vérifiée deux fois. La variable reponse
est donc incrémentée deux fois. En fin de boucle, la valeur de la variable initialisée à 0 est donc 2
.
5. Tracés en boucle
Les tracés suivants ont été réalisés dans un environnement Jupyter, à l'aide du module Turtle disponible dans Basthon.
Pour exécuter les programmes suivants dans un notebook Jupyter de Basthon, le notebook doit contenir l'instruction from turtle import *
et chaque dessin doit se terminer avec l’instruction done()
.
Question 5.1
Question
Parmi les boucles suivantes, laquelle permet de faire tracer à la tortue la figure ci-dessous ?
Boucle A :
for i in range(6) :
forward(100)
left(60)
Boucle B :
for i in range(7) :
forward(100)
left(60)
Boucle C :
for i in range(6) :
forward(100)
left(120)
Boucle D :
for i in range(7) :
forward(100)
left(120)
- A
- B
- C
- D
- A
- B
- C
- D
La figure comporte 6 côtés et range(6)
génèrera les entiers de 0 à 5, soit 6 entiers.
Les angles "internes" de la figure sont de 120°, la tortue doit donc pivoter de 180 - 120 = 60° entre 2 tracés.
La proposition A correspond au tracé de l'hexagone. La B permet de le tracer également, mais en passant deux fois sur l'un des côtés.
Question 5.2
Question
Parmi les boucles suivantes, laquelle permet de faire tracer à la tortue la figure ci-dessous ?
Boucle A :
for i in range(5) :
forward(250)
right(72)
Boucle B :
for i in range(5) :
forward(250)
right(144)
Boucle C :
for i in range(6) :
forward(250)
left(36)
Boucle D :
for i in range(6) :
forward(250)
left(72)
- A
- B
- C
- D
- A
- B
- C
- D
La figure comporte 5 côtés et range(5)
génèrera les entiers de 0 à 4, soit 5 entiers.
Les angles "internes" des pointes de l'étoile sont de 36°, la tortue doit donc pivoter de 180 - 36 = 144° entre 2 tracés.
6. Boucles imbriquées
Question 6.1
Question
Quelle serait la valeur de la variable total
à l'issue de l'exécution de ces instructions ?
total = 0
for i in range(4):
for j in range(3):
total = total + 1
- 10
- 12
- 14
- 20
- 10
- 12
- 14
- 20
i
prend les valeurs 0 à 3, soit 4 valeurs.
Pour chaque valeur de i
:
- j
prend les valeurs 0 à 2 soit 3 valeurs.
- La variable total
est augmentée 3 fois de la quantité 1
Finalement, total
vaut 0 + 4*3 = 12
Question 6.2
Question
Quelle sera la valeur de la variable total
à l'issue de l'exécution de ces instructions ?
total = 0
for i in range(4):
for j in range(i):
total = total + i
- 10
- 12
- 14
- 20
- 10
- 12
- 14
- 20
i
prend les valeurs 0 à 3.
Quand i = 0
, j
ne prend aucune valeur et total
n'est pas augmenté.
Quand i = 1
, j
prend la valeur 0 et total
est augmenté la valeur de i
, soit de 1.
Quand i = 2
, j
prend les valeurs 0 puis 1, et total
est augmenté 2 fois de la valeur de i
, soit de 2*2 = 4.
Quand i = 3
, j
prend les valeurs 0, 1 et 2, et total
est augmenté 3 fois de la valeur de i
, soit de 3*3 = 9.
Finalement, total
vaut 0 + 1 + 2*2 + 3*3 = 14.
valeurs ajoutées à total |
j = 0 | j = 1 | j = 2 |
---|---|---|---|
i = 0 | X | X | X |
i = 1 | 1 | X | X |
i = 2 | 2 | 2 | X |
i = 3 | 3 | 3 | 3 |
Question 6.3
Question
Quelle sera la valeur de la variable total
à l'issue de l'exécution de ces instructions ?
total = 0
for i in range(5):
for j in range(i):
total = total + j
- 10
- 12
- 14
- 20
- 10
- 12
- 14
- 20
i
prend les valeurs 0 à 4.
Quand i = 0
, j
ne prend aucune valeur et total
n'est pas augmenté.
Quand i = 1
, j
prend la valeur 0 et total
est augmenté de 0.
Quand i = 2
, j
prend les valeurs 0 puis 1, et total
est augmenté à chaque fois de la valeur de j
, soit de 0 + 1 = 1.
Quand i = 3
, j
prend les valeurs 0, 1 et 2, et total
est augmenté à chaque fois de la valeur de j
, soit de 0 + 1 + 2 = 3.
Quand i = 4
,j
prend les valeurs 0, 1, 2 et 3, et total
est augmenté à chaque fois de la valeur de j
, soit de 0 + 1 + 2 + 3 = 6
Finalement, total
vaut 0 + 1 + 3 + 6 = 10
valeurs ajoutées à total |
j = 0 | j = 1 | j = 2 | j = 3 |
---|---|---|---|---|
i = 0 | X | X | X | X |
i = 1 | 0 | X | X | X |
i = 2 | 0 | 1 | X | X |
i = 3 | 0 | 1 | 2 | X |
i = 4 | 0 | 1 | 2 | 3 |
Question 6.4
Question
Parmi les programmes suivants, lequel permet de faire tracer à la tortue la figure ci-dessous ?
Programme A :
for nb_carre in range(4) :
for nb_cote in range(3) :
forward(100)
left(90)
right(120)
Programme B :
for nb_carre in range(3) :
for nb_cote in range(4) :
forward(100)
left(90)
left(30)
Programme C :
for nb_carre in range(3) :
for nb_cote in range(4) :
forward(100)
left(90)
left(120)
Programme D :
for nb_carre in range(3) :
for nb_cote in range(4) :
forward(100)
left(120)
left(90)
- A
- B
- C
- D
- A
- B
- C
- D
Il y a 3 carrés à tracer (range(3)
) et chaque carré possède 4 côtés (range(4)
). Les angles du carré font 90° et chaque carré est l'image d'un autre par une rotation d'un tiers d'angle plein (360/3 = 120°). Le sens de cette rotation importe peu : right(120)
aurait aussi convenu.
Question 6.5
Question
Parmi les programmes suivants, lequel permet de faire tracer à la tortue la figure ci-dessous ?
Programme A :
for nb_poly in range(6) :
for nb_cote in range(3) :
forward(80)
left(120)
left(60)
Programme B :
for nb_poly in range(3) :
for nb_cote in range(6) :
forward(80)
left(120)
left(60)
Programme C :
for nb_poly in range(6) :
for nb_cote in range(3) :
forward(80)
left(60)
left(120)
Programme D :
for nb_poly in range(3) :
for nb_cote in range(6) :
forward(80)
left(60)
left(120)
- A
- B
- C
- D
- A
- B
- C
- D
Il y a 3 hexagones réguliers à tracer (range(3)
) et chaque hexagone possède 6 côtés (range(6)
). Les angles de l'hexagone font 120° (donc la tortue doit pivoter de 180 - 120 = 60°) et chaque hexagone est l'image d'un autre par une rotation d'un tiers d'angle plein (360/3 = 120°). Le sens de cette rotation importe peu : right(120)
aurait aussi convenu.