La course cycliste⚓︎
Une course cycliste se dispute.
source : Wikipedia
Chaque cycliste est identifié par un numéro de dossard : "Nadia-01"
, "Franck-64"
Les cyclistes se doublent les uns les autres durant la course.
Il peut arriver qu'un cycliste crève, et se fasse doubler par tous les autres coureurs et se retrouve à la dernière place, puis repart.
Les cyclistes sont rangés dans un tableau suivant leur position dans la course.
Exemple :
course = ["Nadia-01", "Franck-64", "Thomas-31", "Elizabeth-22", "Laure-66"]
-
Écrire la fonction
premier
qui prend en paramètre le tableau qui stocke la course et qui renvoie le coureur en première position de la course.🐍 Console Python>>> premier(course) 'Nadia-01'
-
Écrire la fonction
dernier
qui prend en paramètre le tableau qui stocke la course et qui renvoie le coureur en dernière position de la course.🐍 Console Python>>> dernier(course) 'Laure-66'
-
Écrire la fonction
position
qui prend en paramètres le tableau qui stocke la course et le numéro de dossard et qui renvoie sa position dans la course. On supposera que le dossard donné est bien présent dans le classement. Attention : cette position correspond à l'indice du coureur dans le tableau. (ainsi le premier de la course aura la position 0 et non 1)🐍 Console Python>>> position(course, "Nadia-01") 0 >>> position(course, "Thomas-31") 2
-
Écrire la fonction
double
qui prend en paramètres le tableau qui stocke la course et le dossard d'un coureur et modifie puis renvoie le tableau avec le coureur qui est passé devant le coureur précédent.
>>> double(course, "Thomas-31")
['Nadia-01', 'Thomas-31', 'Franck-64', 'Elizabeth-22', 'Laure-66']
- Écrire la fonction
crevaison
qui prend en paramètres le tableau qui stocke la course et le dossard d'un coureur qui a crevé et modifie puis renvoie le tableau. On partira du principe que tous les coureurs derrière le malchanceux coureur le doublent jusqu'à ce que le coureur soit le dernier. On utilisera obligatoirement les fonctionsdouble
etdernier
.
>>> crevaison(course, "Thomas-31")
['Nadia-01', 'Franck-64', 'Elizabeth-22', 'Laure-66', 'Thomas-31']
def premier(classement):bksl-nl """renvoie le dossard du coureur en première position de la course."""bksl-nl ...bksl-nlbksl-nldef dernier(...):bksl-nl """renvoie le dossard du coureur en dernière position de la course."""bksl-nl ...bksl-nlbksl-nldef position(...):bksl-nl """renvoie la position d'un coureur identifié par son dossard"""bksl-nl ...bksl-nl bksl-nldef double(...):bksl-nl """modifie le tableau avec le coureur passé en paramètre qui est passé devant le coureur précédent."""bksl-nl ...bksl-nl bksl-nldef crevaison(...):bksl-nl """bksl-nl modifie le tableau avec le coureur passé en paramètre qui est passé en dernière positionbksl-nl après avoir été doublé par tous les autres coureurs.bksl-nl """bksl-nl ...bksl-nlbksl-nlcourse = ["Nadia-01", "Franck-64", "Thomas-31", "Elizabeth-22", "Laure-66"]bksl-nlassert premier(course) == "Nadia-01"bksl-nlassert dernier(course) == "Laure-66"bksl-nlassert position(course, "Elizabeth-22") == 3bksl-nldouble(course, "Thomas-31")bksl-nlassert course == ["Nadia-01", "Thomas-31", "Franck-64", "Elizabeth-22", "Laure-66"]bksl-nlcrevaison(course, "Franck-64")bksl-nlassert course == ["Nadia-01", "Thomas-31", "Elizabeth-22", "Laure-66", "Franck-64"]bksl-nlbksl-nldef premier(classement):bksl-nl """renvoie le dossard du coureur en première position de la course."""bksl-nl return classement[0]bksl-nlbksl-nlbksl-nldef dernier(classement):bksl-nl """renvoie le dossard du coureur en dernière position de la course."""bksl-nl dernierepy-undposition = len(classement) - 1bksl-nl return classement[dernierepy-undposition]bksl-nlbksl-nldef position(classement, dossard):bksl-nl """renvoie la position d'un coureur identifié par son dossard"""bksl-nl for positionpy-undcoureur in range(len(classement)):bksl-nl if classement[positionpy-undcoureur] == dossard:bksl-nl return positionpy-undcoureurbksl-nl bksl-nlbksl-nldef double(classement, dossard):bksl-nl """bksl-nl modifie le tableau avec le coureur (passé en paramètre) bksl-nl qui s'est positionné devant le coureur précédent.bksl-nl """bksl-nl positionpy-undcoureur = position(classement, dossard)bksl-nl coureurpy-unddevant = classement[positionpy-undcoureur - 1]bksl-nl classement[positionpy-undcoureur - 1] = classement[positionpy-undcoureur]bksl-nl classement[positionpy-undcoureur] = coureurpy-unddevantbksl-nl return classementbksl-nlbksl-nlbksl-nldef crevaison(classement, dossard):bksl-nl """bksl-nl modifie le tableau avec le coureur passé en paramètre qui est passé en dernière positionbksl-nl après avoir été doublé par tous les autres coureurs.bksl-nl """bksl-nl positionpy-undcoureur = position(classement, dossard)bksl-nl while dossard != dernier(classement):bksl-nl precedent = classement[positionpy-undcoureur + 1]bksl-nl double(classement, precedent)bksl-nl positionpy-undcoureur += 1bksl-nl return classementbksl-nlbksl-nl
A
{{ IDE('exo_corr') }}
On pouvait également opter pour la solution suivante :
def dernier(classement):
"""renvoie le dossard du coureur en dernière position de la course."""
return classement[-1]
Z