Contenu principal
Chapitre 4 · La boucle for › Leçon 9 sur 9

En file indienne

Pour le spectacle de fin d'année, les élèves d'une école passent en file indienne. Par exemple leur professeur veut créer une file de trois, combien a-t-il de possibilités ? Ou encore combien peut-il faire de files de dix élèves ?

Il y a 20 élèves dans la classe.

Pour une file de longueur deux : tout le monde peut être en tête donc il y a 20 possibilités pour le premier enfant. Ensuite pour chacune de ces 20 têtes de file possibles il y a 19 successeurs possibles, ce qui fait 20×1920\times 19 couples possibles.

Pour une file de longueur trois, on reprend le raisonnement précédent. Pour chacune des 20×1920\times 19 files de longueur deux, il y a 18 possibilités de troisième enfant. Cela fait donc (20×19)×18(20\times 19)\times 18 possibilités de files de longueur trois.

  1. 1

    Combien peut-on faire de files de quatre élèves ? Donne ta réponse dans une variable files_4.

    Solution

    En reprenant le raisonnement de l'introduction, il y a 20×19×18×1720 \times 19 \times 18 \times 17 files de longueur 4 ce qui fait 116280 possibilités

    files_4 = 116280
  2. 2

    Le professeur souhaite connaître combien il y a de files possibles de 8 élèves. Dans les questions qui viennent tu vas l'aider avec une boucle for

    Pour commencer, définis une variable files qui sera mise à jour par la boucle for. Dans les leçons précédentes, la boucle for nous a servi à incrémenter une variable somme. Dans ce cas on a utilisé la valeur initiale 0. Ici on veut multiplier des variables. Donc on utilise la valeur initiale 1.

    Solution

    On initialise la variable files à 1 afin de pouvoir la multiplier successivement par les différentes valeurs.

    files = 1
  3. 3

    Il ne reste plus qu'à écrire la boucle for. Pour créer la séquence 20, 19, 18, ... tu peux t'aider d'un compteur avec un pas négatif comme dans la leçon 4 de ce chapitre.

    De plus, dans les leçons précédentes, pour incrémenter une variable somme tu as utilisé une expression de la forme somme = somme + quelque_chose. Ici il faut adapter car on veut réassigner la variable files en la multipliant.

    Solution

    Il y a plusieurs solutions possibles.

    • Comme il y a 8 élèves dans la file on peut définir une séquence de nombres de 0 à 8 qui correspondent à chacun des élèves à l'aide de range(8).

      Dans ce cas il faut réassigner files en faisant files = files * (20 - i) afin de multiplier files par 20, 19, 18 ... lorsque i parcourt la séquence 0, 1, 2 ...

      files = 1
      for i in range(8):
          files = files * (20 - i)
      
      print(files)
    • Une autre possibilité est d'utiliser un décompte pour que le range nous génère directement la séquence décroissante de huit nombres 20, 19, 18... Il faut utiliser un pas négatif et faire range(20, 12, -1) pour avoir un tel décompte.

      Dans ce cas pour réassigner files il reste à multiplier directement par la variable i en faisant files = files * i car i prend déjà toutes les valeurs 20, 19, ... 13

      files = 1
      for i in range(20, 12, -1):
          files = files * i
      
      print(files)
  4. 4

    Ça fait beaucoup ! Mais ça tombe bien le professeur aura bientôt quelques millisecondes de temps libre, une fois son système mis à jour !

    Alors pourquoi ne pas faire une file indienne avec l'ensemble des vingt élèves ? Combien y a-t-il de possibilités de files de cette taille ?

    Solution

    On adapte les solutions de la question précédente en changeant la séquence dans le range pour qu'il y ait maintenant les vingt élèves.

    • Première possibilité
      files = 1
      for i in range(20):
          files = files * (20 - i)
      
      print(files)
    • Deuxième possibilité
      files = 1
      for i in range(20, 1, -1):
          files = files * i
      
      print(files)

Chargement...

Collecte des fichiers...

>>>