Plus longue période de gelées⚓︎
Un météorologue a relevé les températures au lever du jour dans sa rue. Il souhaite déterminer la durée de la plus longue période de gelées consécutives durant ces relevés.
Vous devez écrire une fonction gelees(temperatures)
qui renvoie la longueur de la plus longue séquence de nombres négatifs ou nuls consécutifs dans la liste.
Les températures sont données sous forme d'une liste de nombres :
temperatures = [2, -3, -2, 0, 1, -1]
Si la liste est vide, la fonction renverra la valeur 0
.
On rappelle que l'eau gèle à partir de 0°C inclus.
Exemples
>>> gelees([2, -3, -2, 0, 1, -1])
3
>>> gelees([3, 2, 2])
0
>>> gelees([])
0
def gelees(temperatures):bksl-nl ...bksl-nlbksl-nlbksl-nlbksl-nlbksl-nl# Testsbksl-nlassert gelees([2, -3, -2, 0, 1, -1]) == 3bksl-nlassert gelees([3, 2, 2]) == 0bksl-nlassert gelees([]) == 0bksl-nldef gelees(temperatures):bksl-nl pluspy-undlonguepy-undperiode = 0bksl-nl periode = 0bksl-nl for temp in temperatures:bksl-nl if temp <= 0:bksl-nl periode += 1bksl-nl if periode > pluspy-undlonguepy-undperiode:bksl-nl pluspy-undlonguepy-undperiode = periodebksl-nl else:bksl-nl periode = 0bksl-nl return pluspy-undlonguepy-undperiodebksl-nlbksl-nlbksl-nl# Testsbksl-nlassert gelees([2, -3, -2, 0, 1, -1]) == 3bksl-nlassert gelees([3, 2, 2]) == 0bksl-nlassert gelees([]) == 0bksl-nl
A
Sorti de son contexte, l'exercice revient à déterminer la longueur de la plus longue sous-séquence d'éléments vérifiant une certaine condition dans une liste. En l'occurrence, la longueur de la plus longue sous-séquence de nombres négatifs.
Une solution possible⚓︎
Comme on cherche la plus longue longueur, on commence par l'initialiser à 0
(ligne 2).
On crée ensuite la variable periode
qui stockera la longueur de la sous-séquence de nombres négatifs actuellement lue. Avant la lecture, elle est naturellement à 0
(ligne 3).
On parcourt ensuite les valeurs de la liste temperatures
et pour chacune d'elle :
-
si elle est négative :
-
on incrémente la valeur de la sous-séquence actuelle
-
on teste si cette sous-séquence est plus longue que la plus longue déjà trouvée. Si c'est le cas, on met à jour la valeur (ligne 8)
-
sinon (la température est strictement positive), on remet la longueur de la séquence actuelle à
0
(ligne 10)
La fonction renvoie pour terminer la longueur de la plus longue période.
Z