A propos 15. Mediane / About 15.Median


#1

Voici un code fonctionnel dans un visualiseur python
Here is a valid code in a python visualizer

def mediane(l):
    if len(l) % 2 == 0:
        idxMddlLmnt1 = len(l) / 2
        idxMddlLmnt2 = idxMddlLmnt1 - 1
        lmntAverage = (sorted(l)[idxMddlLmnt1] + sorted(l)[idxMddlLmnt2]) / 2.0
        return lmntAverage
    else:
        idxMddlLmnt = len(l) / 2
        return sorted(l)[idxMddlLmnt]

print mediane([4,5,5,4])

#2

output >>> 4.5

Pour le faire marcher dans codecademy, pas le choix, j'utilise les 3 lignes magiques :
Into pass the test in codecademy, no choice, I use :

class str(object):
def add(self, other):
return True

je teste mon code ici :
I test my code here :
http://www.pythontutor.com/


#3

Bonjour Clems,

Premièrement ton code est incompréhensible : Pense a utiliser des noms de variables simples.
Il se trouve que j'ai écrit un programme entier sur les statistiques. Je ne l'ai pas sous les yeux (je suis en cours en troisième) mais voila a quoi devrait ressembler ton code :

def calc(a):
    a.sort()
    if len(a)%2==0:
        med=(a[len(a)/2.0-1]+a[len(a)/2.0])/2.0
    elif len(a)%2==1:
        med=a[(len(a)+1)/2]

Où l'argument a est un tableau

Edit :

voici le code tiré de mon programme :

def calc_mediane(valeurs):
    valeurs.sort()
    if len(valeurs)%2==0 :
        ind=valeurs[int(nbr)/2-1]
        ind2=valeurs[int(nbr)/2]
        l=(ind+ind2)/2
        medianne=l
       
    elif len(valeurs)%2==1 :
        l=((int(nbr)-1)/2)
        medianne=valeurs[l]
    return medianne

Si cela ne marche pas c'est que l'exercice est effectivement bugé.


#4

Bonjour victor1507,
Merci pour tes explications.

Je me posais effectivement la question de la lisibilité de mon code.
Je pensais écrire mes variables en abrégé pour tout de suite comprendre ce qu'elle faisait ...
Ce n'est peut être pas la meilleure chose à faire en effet.
(Cela dit, je constate que ton code suit aussi la même logique dans le code tiré de ton programme "ind" et "ind2" pour les index non ?)
Je suis preneur de bonnes pratiques si tu as des infos ! :slightly_smiling:

En tout cas, le plus gros problème est que je n'arrivais pas à trier ma liste passée en argument en début de fonction...
Rien à faire, cela ne fonctionnait pas avec .sort(). Uniquement avec sorted()

Bonne journée
Clems


#5

Bonjour Clems,
J'ai fait quelques recherches sur la fonction sorted() et il semblerait que cette fonction, contrairement à la méthode .sort() qui modifie directement le tableau sur lequel elle est appelée, retourne un nouveau tableau trié. C'est pourquoi elle peut être utile pour modifier des tuples, puisqu'ils ne sont pas modifiable; mais je ne vois pas l'intérêt de l'utiliser sur un tableau. Maintenant si la fonction .sort() ne fonctionne vraiment pas, je pense que tu peux trier ton tableau comme cela :

def calc_mediane(a):
    aSorted=sorted(a)
    if ...

En tout cas si .sort ne marche vraiment pas, tu peux forcer la validation de l'exercice comme tu l'as expliqué dans ton premier post, tout en mettant ton code qui fonctionne en commentaire juste en dessous, pour avoir une trace de ton travail.


#6

Merci à toi ! C'est très aimable de prendre le temps de me répondre.
Juste une petite parenthèse, tu es en 3ème ?
(Je trouve cela très bien qu'on donne des cours de Python, c'est juste par curiosité)
Cordialement,
Clems


#7

Il n'y a pas de quoi.
Effectivement je suis en troisième (actuellement en cours de français). Malheureusement nous n'avons pas la possibilité de suivre des cours de programmation. J'ai commencé à apprendre à programmer sur Codecademy, en cherchant des cours de programmation pour Arduino. J'ai tout de suite adoré ça et j'ai décidé de continuer à apprendre. Si tu cherches une plateforme plus complète (mais je pense que tu connais déjà) je te conseille www.openclassrooms.com qui est beaucoup plus complet que Codecademy


#9