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 couples possibles.
Pour une file de longueur trois, on reprend le raisonnement précédent. Pour chacune des files de longueur deux, il y a 18 possibilités de troisième enfant. Cela fait donc possibilités de files de longueur trois.
- 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 files de longueur 4 ce qui fait 116280 possibilités
files_4 = 116280
- 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 variablesomme
. 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
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 formesomme = somme + quelque_chose
. Ici il faut adapter car on veut réassigner la variablefiles
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 faisantfiles = files * (20 - i)
afin de multiplierfiles
par 20, 19, 18 ... lorsquei
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 fairerange(20, 12, -1)
pour avoir un tel décompte.Dans ce cas pour réassigner
files
il reste à multiplier directement par la variablei
en faisantfiles = files * i
cari
prend déjà toutes les valeurs 20, 19, ... 13files = 1 for i in range(20, 12, -1): files = files * i print(files)
- 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
- 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)
- Première possibilité