Bonjour, je dois écrire un programme en python pour trouver la médiane d'une liste. Pour cela je dois passer par ces étapes :
-on recherche le max et le min d'une liste d'entiers,
-on les supprime,
-on recommence jusqu'à obtenir une liste de 1 ou 2 éléments,
-la médiane est l'entier restant ou la moyenne des deux entiers restants
J'ai donc essayé d'écrire ce programme mais je n'arrive pas à obtenir la médiane. Je vous mets ci-dessous mon programme :
def mediane(L) :
m=0
n=len(L)
if n>=3 :
m = L.remove(max(L))
m = L.remove(min(L))
else :
if n == 2 :
m = (L[0]+L[1])/2
else :
m = L
return m
Est-ce que vous voyez où sont les erreurs ?
Merci d'avance pour votre aide.
salut
je pense que les instructions dans la condition if n >= 3 : sont fausses
tu dois supprimer de ta liste L sont max et son min ...
et en plus cette condition est fausse : tu dois faire cela tant que n >= 3
...
Donc je devrais plutôt mettre :
def mediane(L) :
m=0
n=len(L)
while n>=3 :
m = L.remove(max(L))
m = L.remove(min(L))
if n == 2 :
m = (L[0]+L[1])/2
else :
m = L
return m
A chaque fois Python affiche que argument dans max et min est vide
Hello ! Pas besoin d'écrire
m = L.remove(...)
Ca veut rien dire et c'est pas ce que tu veux. L.remove est une opération que tu fais sur la liste L. Elle ne renvoie rien. La liste L est changée en utilisant cette opération
Dans la fonction de fm mediane est appelée récursivement il utilise pas d'autres fonctions que tu connais pas
Non , mediane est un exemple de fonction qu'on peut écrire pour résoudre l'exercice posé . La particularité de cette fonction , c'est qu'elle s'appelle elle même . C'est ce qu'on nomme une fonction récursive . Mais ce n'est pas obligatoire . On peut écrire une fonction non récursive .
il est bien dommage de donner des réponses toutes faites ...
et il manque le cas où L ne contient plus que deux valeurs ...
J'ai écris avec vos conseils et pourtant j'ai toujours le même problème avec max et min qui sont vides :
def mediane2(L) :
m=0
n=len(L)
while n>2 :
L.remove(max(L))
L.remove(min(L))
if n == 2 :
m = (L[0]+L[1])/2
else :
m = L[0]
return m
D'accord j'ai compris ! Je me souviendrai qu'il faut mettre len(L) dans la boucle while. Merci beaucoup pour votre aide.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :