Dans cet exercice, on travaille de façon générale avec des séquences. Mais, sans perdre en généralité et par commodité, vous pourrez vous limiter aux listes si vous le souhaitez.
On souhaite proposer un prédicat est_triee_croissant()
qui prend en paramètre
sequence
, une séquence, et qui retourne True
si cette séquence est triee
dans l’ordre croissant et False
sinon.
a) Proposer un jeu de tests pour cette fonction.
b) Écrire en Python une fonction qui répond aux critères imposés.
Voici la correction tant attendue !
def est_triee_croissant(sequence):
"""
Répond à la question de savoir si la sequence donnée est triée dans
l'ordre croisante
:param sequence: (list, string, tuple) séquence
:return rep: (bool)
>>> seq = [2, 7, 11, 13]
>>> est_triee_croissant(seq)
True
>>> seq = [2, 11, 7, 13]
>>> est_triee_croissant(seq)
False
>>> seq = "aertyz"
>>> est_triee_croissant(seq)
True
>>> seq = "azerty"
>>> est_triee_croissant(seq)
False
>>> seq = ('2', 'n', 'nsi', 's')
>>> est_triee_croissant(seq)
True
>>> seq = ('2', 'n', 's', 'nsi')
>>> est_triee_croissant(seq)
False
"""
rep = True
for i in range(len(sequence)-1):
if sequence[i+1] < sequence[i]:
rep = False
return rep
On souhaite proposer cette fois deux fonctions montees()
et descentes()
qui
permettent de déterminer le nombre de montées respectivement de descentes
dans une séquence donnée.
Dans un séquence, deux éléments consécutifs placés dans l'ordre croissant (respectivement décroissant) définit une montée (respectivement une descente).
Voici un jeu de tests possibles pour ces deux fonctions:
>>> liste = [1, 5, 3, 4, 2 ,0]
>>> montees(liste)
2
>>> descentes(liste)
3
Explications: dans la liste donnée, 1<5
et 3<4
. Il y a donc 2 montées.
Écrire en Python les deux fonctions demandées.
def montees(sequence):
"""
Retourne le nombre de montées, c'est à dire le nombre de paires
d'éléments consécutifs dans l'ordre croissant
:param sequence: (list, string, tuple) séquence
:return cpt: (int) le nombre de paires qui répondent à la contrainte
>>> liste = [1, 5, 3, 4, 2 ,0]
>>> montees(liste)
2
"""
cpt = 0
for i in range(len(sequence)-1):
if sequence[i+1] > sequence[i]:
cpt = cpt + 1 # cela peut s'écrire cpt += 1
return cpt
def descentes(sequence):
"""
Retourne le nombre de montées, c'est à dire le nombre de paires
d'éléments consécutifs dans l'ordre croissant
:param sequence: (list, string, tuple) séquence
:return cpt: (int) le nombre de paires qui répondent à la contrainte
>>> liste = [1, 5, 3, 4, 2 ,0]
>>> descentes(liste)
3
"""
cpt = 0
for i in range(len(sequence)-1):
if sequence[i+1] < sequence[i]:
cpt = cpt + 1 # cela peut s'écrire cpt += 1
return cpt
def descentes2(sequence):
"""
Retourne le nombre de montées, c'est à dire le nombre de paires
d'éléments consécutifs dans l'ordre croissant
:param sequence: (list) or (str) or (tuple) séquence
:return cpt: (int) le nombre de paires qui répondent à la contrainte
>>> liste = [1, 5, 3, 4, 2 ,0]
>>> descentes2(liste)
3
"""
return len(sequence)-1-montees(sequence)