Structure while

Objectifs

  • Comprendre la structure de la boucle while ;

  • Savoir utiliser et interrompre une boucle while.

Mise en situation

Toutes les situations ne se prêtent pas à une boucle avec un compteur à incrémenter. Prenons par exemple un programme qui demande à l'utilisateur d'entrer son âge. Si l'âge entré n'est pas un nombre valide, le programme redemande de renseigner son âge. Nous avons donc ici un mécanisme de boucle qui va devoir s'exécuter un nombre de fois inconnu à l'avance. Ici la condition de notre boucle sera de vérifier la validité de la valeur entrée par l'utilisateur, par exemple en testant le type de la variable.

SyntaxeBoucle while

La boucle while, ou « tant que », permet de réaliser des itérations en fonction de conditions booléennes (vrai ou faux). Algorithmiquement, la boucle while peut se traduire par : « Tant que condition vraie, faire ... ».

La structure de cette boucle est très simple et comporte une condition et un bloc d'instructions.

1
while (condition) {
2
  // instructions
3
}

ExempleMenu des recommandations

On affiche un menu avec des options. Seule l'option « 0 » permet de sortir du menu grâce à la condition du while.

1
"""Python."""
2
choice = ''
3
4
# Continue tant que 0 n'est pas sélectionné
5
while choice != '0':
6
  print('0. Sortir')
7
  print('1. Afficher le film recommandé')
8
  print('2. Afficher l\'album recommandé')
9
  # Attend la réponse
10
  choice = input('Choix > ')
11
12
  if choice == '1': # film 
13
    print('Titanic (1997) - James Cameron\n')
14
  elif choice == '2': # album 
15
    print('Thriller (1982) - Michael Jackson\n')
1
/** JavaScript */
2
let choice = ''
3
4
// continue tant que 0 n'est pas sélectionné
5
while (choice !== '0') {
6
  console.log('0. Sortir')
7
  console.log('1. Afficher le film recommandé')
8
  console.log('2. Afficher l\'album recommandé')
9
  // attend la réponse
10
  choice = prompt('Choix')
11
12
  if (choice === '1') { // film
13
    console.log('Titanic (1997) - James Cameron\n')
14
  } else if (choice === '2') { // album
15
    console.log('Thriller (1982) - Michael Jackson\n')
16
  }
17
}
18

ExempleRoulette

Une mise de départ est fixée à 10 €. À chaque tour, la roulette sort un nombre : s'il est pair, on empoche l'argent (moins la mise), sinon la mise double et on continue.

1
"""Python."""
2
import random
3
4
attempts = 0
5
gain = 0
6
bet = 10
7
loss = 0
8
winner = False
9
10
print('Tu gagnes si la roulette sort un nombre pair. La mise de départ est à 10 euros.')
11
12
# continue jusqu'à perdre
13
while not winner:
14
  # argent mis en jeu
15
  loss = loss + bet
16
  attempts = attempts + 1
17
  # nombre aléatoire entre 0 et 30
18
  number = random.randint(0, 30)
19
  print('Tentative...........', number)
20
21
  if number%2 == 1: # nombre impair
22
    print('Dommage, ta mise double. Retente ta chance')
23
    bet = bet * 2
24
  else: # nombre pair
25
    print('C\'est gagné')
26
    gain = bet * 2
27
    winner = True
28
29
  input('(Entrée)')
30
31
print('Gain de', (gain - loss), ' euros après ', attempts, ' tentative(s)')
1
/** JavaScript */
2
let attempts = 0
3
let gain = 0
4
let bet = 10
5
let loss = 0
6
let winner = false
7
8
console.log('Tu gagnes si la roulette sort un nombre pair. La mise de départ est à 10 euros.')
9
10
// continue jusqu'à perdre
11
while (!winner) {
12
  // argent mis en jeu
13
  loss = loss + bet
14
  attempts = attempts + 1
15
  // nombre aléatoire entre 0 et 30
16
  const number = Math.floor(Math.random() * 31)
17
  console.log('Tentative...........', number)
18
19
  if (number % 2 === 1) { // nombre impair
20
    console.log('Dommage, ta mise double. Retente ta chance')
21
    bet = bet * 2
22
  } else { // nombre pair
23
    console.log('C\'est gagné')
24
    gain = bet * 2
25
    winner = true
26
  }
27
  prompt('(Entrée)')
28
}
29
30
console.log('Gain de ' + (gain - loss) + ' euros après ' + attempts + ' tentative(s)')

ComplémentBoucle do...while

En JavaScript, il existe une structure proche de la boucle while : la boucle do while. Cette fois ci, le bloc d'instruction est exécuté d'abord, la condition est testée ensuite. Si la condition est remplie, on continue. Il y a donc donc toujours au moins une itération.

Algorithmiquement, la boucle do while peut se traduire par : « Faire... Tant que condition vraie ».

1
do {
2
  // instructions
3
} while (condition)
1
/** JavaScript: itère une seule fois */
2
let i = 0
3
do {
4
  console.log(i)
5
} while (i < -2)

ComplémentCompteur avec while

La boucle while peut reproduire le comportement d'un compteur (mais en général, dans ce cas, on préfère une boucle for).

1
/** JavaScript: itère 5 fois */
2
let i = 0
3
while (i < 5) {
4
  console.log(i++)
5
}
1
"""Python: itère 5 fois."""
2
i = 0
3
while i < 5:
4
  print(i)
5
  i+=1

À retenir

  • La boucle while permet des itérations avec des conditions quelconques.

  • Elle est principalement utilisée quand on ne connaît pas le nombre d'itérations à faire avant le début de la boucle.