Inscription / Connexion Nouveau Sujet
Niveau seconde
Partager :

Calculer médiane sur Python

Posté par
Hopio
11-04-17 à 12:00

Bonjour,

J'ai un devoir pour le 20 Avril dans lequel je dois calculer la médiane d'une liste de valeurs sur Python, j'aimerai que vous m'aidiez car je suis bloqué

Voilà ce que j'ai fait:
serie = []
nb_notes = int(input("entrer le  nombre de notes:"))
for i in range (nb_notes):
    serie.append(float(input("entrer une note :")))
    serie.sort ()
    sorted(serie)
    m=len(serie)
    if m%2!=0:
        e=(nb_notes/2)-1/2
        e=int(e)
serie[e]

Merci d'avance à tous ceux qui m'aideront

Posté par
Hopio
re : Calculer médiane sur Python 11-04-17 à 12:41

up

Posté par
bbomaths
re : Calculer médiane sur Python 11-04-17 à 13:49

Bonjour

serie = []

nb_notes = 0

nb_notes = int(input("entrer le  nombre de notes : "))

for i in range (nb_notes) :

     serie.append(float(input("entrer une note : ")))

serie.sort()

nb_notes = len(serie)

# nombre de notes impairs ?
if nb_notes % 2 != 0 :

     # oui :
     mediane = serie[((nb_notes + 1) / 2) - 1]

else :

     # non :
     mediane = (serie[(nb_notes / 2) - 1] + serie[nb_notes / 2]) / 2

print "\n mediane = %f\n" % mediane

Posté par
Hopio
Algorithme 24-04-17 à 19:02

Oui bonjour j'ai fait un algorithme calculant la médiane , la moyenne , les quartiles et l'étendue mais le problème est qu'il faut inscrire le nombre de notes, donc la prof nous a demandé d'en sans cette condition en faisant un boucle "while" et que lorsque qu'on tapes "stop" dans le input de Python mais je ne sais pas comment je pourrais faire, c'est pour cela que j'aurai besoin de votre aide

*** message déplacé ***

Posté par
Hopio
re : Algorithme 24-04-17 à 20:13

up

*** message déplacé ***

Posté par
fm_31
re : Algorithme 24-04-17 à 21:03

Bonjour ,

une solution est de saisir dans un premier temps le nombre  n  de notes à saisir puis de faire une boucle  (pour i de 1 à n  ....)  pour saisir les  n  notes .

Cordialement

*** message déplacé ***

Posté par
Hopio
re : Algorithme 24-04-17 à 21:13

#On definit la liste qui ici s'appelle:"serie".
serie = []
#On vous demande le nombre de notes
nb_notes = int(input("Entrer le nombre de notes:"))
for i in range (nb_notes):
#Pour le nombres de notes que vous avez ,on vous demandera x notes
    serie.append(float(input("Entrer la note :")))
#On trie la liste
    serie.sort()
#Calcul de la mediane
if nb_notes % 2 != 0 :
    med= serie[((nb_notes + 1) // 2) - 1]
else :
    med= (serie[(nb_notes // 2) - 1] + serie[nb_notes // 2]) / 2
#Calcul de la moyenne
total=sum(serie)
m=total/nb_notes
#Calcul de l'etendue
e= max(serie) - min(serie)
#Calcul du premier quartile
if nb_notes%4==0:
    q1=(serie[(nb_notes//4)- 1])
if nb_notes%4==1:
    q1=(serie[(nb_notes+3)//4-1])
if nb_notes%4==2:
    q1=(serie[(nb_notes+2)//4-1])
if nb_notes%4==3:
    q1=(serie[(nb_notes+1)//4-1])
#Calcul du troisieme quartile
if nb_notes%4==0:
    q3=serie[(nb_notes*3//4)-1]
if nb_notes%4==1:
    q3=serie[((nb_notes+3)*3//4-2)-1]
if nb_notes%4==2:
    q3=serie[(nb_notes+2)*3//4-2]
if nb_notes%4==3:
    q3=serie[(nb_notes+1)*3//4-1]
#Calcul de l'ecart inter-quartiles
eq=q3-q1
#Affichage des resultats.
print("La moyenne est de",m)
print("La mediane est de",med)
print("L'etendue est de",e)
print("Le premier quartile est",q1)
print("Le troisieme quartile est",q3)
print("L'ecart interquartile est",eq)

Voici le script que j'ai fait , l'objectif est d'enlever la variable nb_notes !

*** message déplacé ***

Posté par
fm_31
re : Algorithme 24-04-17 à 21:20

Si on veut se passer de la variable   nb_notes  ,  on peut demander à l'utilisateur de rentrer ses notes et de terminer par une note négative (-1 par exemple)  pour arrêter la saisie .

*** message déplacé ***

Posté par
Leile
re : Algorithme 24-04-17 à 21:26

bonjour,
je ne connais pas le langage python, aussi je te donne un avis en langage naturel.

au lieu de
enter  le nb de notes
for i= 1 tu nb-notes  
entrer note
element (i) = note
endfor;

tu pourrais écrire :
i=0
entrer note    /* stop pour arreter  */
while note "stop"  faire
i=i+1
element (i)= note
entrer note
fin while

qu'en penses tu ?

*** message déplacé ***

Posté par
Hopio
re : Algorithme 24-04-17 à 21:30

La prof nous avait demandé de saisir par exemple stop pour arrêter la saisie mais pourquoi pas -1 ou une autre note négative

ça donne un truc du genre
if 0>n:
       break

*** message déplacé ***

Posté par
Leile
re : Algorithme 24-04-17 à 21:37

tu remplaces "stop" par ce que tu veux.. ça marche ; la question est davantage sur l'utilisation de la boucle while que sur la valeur de la condition d'arrêt.

ça donnerait :
while note > 0  faire
i=i+1
element (i)= note
entrer note
fin while

je ne sais pas ce que fait "break" ; ça stoppe l'execution de la boucle ?
dans ce que j'ai écrit, la condition est vraie pour continuer à donner des notes (et non pour stopper.. ).
A toi de transposer correctement en Python.  
OK ?

*** message déplacé ***

Posté par
Hopio
re : Algorithme 24-04-17 à 21:42

D'accord , merci je test ça tout de suite

*** message déplacé ***

Posté par
Hopio
re : Algorithme 24-04-17 à 21:46

La commande "break"  permet d'interrompre une boucle.

*** message déplacé ***

Posté par
Leile
re : Algorithme 24-04-17 à 22:07

OK,  

*** message déplacé ***

Posté par
Hopio
re : Algorithme 24-04-17 à 22:19

J'ai réussi à faire le programme, dites moi ce que vous en pensez !
#On definit une liste
serie=[]
#On cree une boucle
while True:
    #On demande a saisir une note
    note=float(input("Entrer votre note : "))
    #Si la note saisie est un nombre negatif, le programme s'arrete
    if note==0:
        break
    serie.append(note)
    #On trie la liste
    serie.sort()
    #On calcule la longueur de la liste
    n=len(serie)

#Calcul de la mediane
if n% 2 != 0 :
    med= serie[((n + 1) // 2) - 1]
else :
    med= (serie[(n// 2) - 1] + serie[n // 2]) / 2
#Calcul de la moyenne
total=sum(serie)
m=total/n
#Calcul de l'etendue
e= max(serie) - min(serie)
#Calcul du premier quartile
if n%4==0:
    q1=(serie[(n//4)- 1])
if n%4==1:
    q1=(serie[(n+3)//4-1])
if n%4==2:
    q1=(serie[(n+2)//4-1])
if n%4==3:
    q1=(serie[(n+1)//4-1])
#Calcul du troisieme quartile
if n%4==0:
    q3=serie[(n*3//4)-1]
if n%4==1:
    q3=serie[((n+3)*3//4-2)-1]
if n%4==2:
    q3=serie[(n+2)*3//4-2]
if n%4==3:
    q3=serie[(n+1)*3//4-1]
#Calcul de l'ecart inter-quartiles
eq=q3-q1
#Affichage des resultats.
print("La moyenne est de",m)
print("La mediane est de",med)
print("L'etendue est de",e)
print("Le premier quartile est",q1)
print("Le troisieme quartile est",q3)
print("L'ecart interquartile est",eq)

Mais après comme je vous l'ai dit , j'aurai aimé qu'on mette "stop" à la place d'un nombre négatif , savez vous comment faire ? Merci d'avance

*** message déplacé ***

Posté par
Hopio
re : Algorithme 24-04-17 à 22:54

up

*** message déplacé ***

Posté par
Leile
re : Algorithme 24-04-17 à 23:04

je ne peux pas te dire si ton prog est bien, car je ne connais pas ce langage..

"if note==0: "  : ça équivaut à "si note < 0"  ?   j'aurais cru que c'était "si note = 0".. mais je me trompe sans doute.

Dans certains langages, on définit la valeur saisie comme une chaine de caractères, pour pouvoir tester "stop", et si on veut la ranger dans la liste d'éléments numériques, comme une note, on la place dans un champ numérique...
Une autre façon de faire : proposer deux champs différents à la saisie
le premier c'est la note, le second peut recevoir "stop" et reste à espaces, tant qu'on veut continuer. Moins élégant, mais très facile à programmer.

bonne soirée

*** message déplacé ***

Posté par
fm_31
re : Algorithme 25-04-17 à 09:44

Pour compléter les remarques de  Leile    , je mettrais  
if note < 0 :   ....
et  note = float(input("Entrer votre note ou -1 pour terminer : "))

*** message déplacé ***

Posté par
fm_31
re : Algorithme 25-04-17 à 09:52

Si on s'attache aux performances , on peut remarquer qu'il n'est pas nécessaire de mettre le tri de la liste et le calcul de sa longueur dans la boucle while ....

Pour mettre  "stop" à la place d'un nombre négatif , il suffit de faire la saisie sous forme de chaine de caractères et de ne faire la conversion en float   que si la chaine est différente de "stop"

*** message déplacé ***

Posté par
Hopio
Algorithme 25-04-17 à 19:23


Bonjour,

J'ai fait un algorithme calculant la moyenne , la médiane , l'étendue , les quartiles.

J'ai fait une boucle qui fait que dès qu'on tape un chiffre négatif , la boucle s'arrête . Mais la prof veut que ce soit lorsque je tape "stop" que le programme s'arrête. J'aurai besoin d'aide car je ne comprend pas comment faire

Voici le programme:

#On definit une liste
serie=[]
#On cree une boucle
while True:
    #On demande a saisir une note
    note=float(input("Entrer votre note : "))
    print("Entrer un nombre negatif pour terminer la boucle")
    #Si la note saisie est un nombre negatif, le programme s'arrete
    if note < 0:
        break
    serie.append(note)
    #On trie la liste
    serie.sort()
    #On calcule la longueur de la liste
    n=len(serie)

#Calcul de la mediane
if n% 2 != 0 :
    med= serie[((n + 1) // 2) - 1]
else :
    med= (serie[(n// 2) - 1] + serie[n // 2]) / 2
#Calcul de la moyenne
total=sum(serie)
m=total/n
#Calcul de l'etendue
e= max(serie) - min(serie)
#Calcul du premier quartile
if n%4==0:
    q1=(serie[(n//4)- 1])
if n%4==1:
    q1=(serie[(n+3)//4-1])
if n%4==2:
    q1=(serie[(n+2)//4-1])
if n%4==3:
    q1=(serie[(n+1)//4-1])
#Calcul du troisieme quartile
if n%4==0:
    q3=serie[(n*3//4)-1]
if n%4==1:
    q3=serie[((n+3)*3//4-2)-1]
if n%4==2:
    q3=serie[(n+2)*3//4-2]
if n%4==3:
    q3=serie[(n+1)*3//4-1]
#Calcul de l'ecart inter-quartiles
eq=q3-q1
#Affichage des resultats.
print("-------------------------------")
print("La moyenne est de",m)
print("-------------------------------")
print("La mediane est de",med)
print("-------------------------------")
print("L'etendue est de",e)
print("-------------------------------")
print("Le premier quartile est",q1)
print("-------------------------------")
print("Le troisieme quartile est",q3)
print("-------------------------------")
print("L'ecart interquartile est",eq)
print("-------------------------------")

*** message déplacé ***

*** message déplacé ***

Posté par
cocolaricotte
re : Algorithme 25-04-17 à 19:26

Bonjour,

Cela ne serait pas la suite de l'autre sujet sur le calcul de la médiane, des quartiles, etc .....

*** message déplacé ***

*** message déplacé ***

Posté par
Hopio
re : Algorithme 25-04-17 à 19:35

Oui !
Je pense avoir trouvé un truc mais j'aurai besoin d'aide
note=input("entrer une note"
if note =="stop":
         break

*** message déplacé ***

*** message déplacé ***

Posté par
malou Webmaster
re : Algorithme 25-04-17 à 19:38

Algorithme

*** message déplacé ***

Posté par
cocolaricotte
re : Calculer médiane sur Python 25-04-17 à 19:40

Ce n'était pas le début du même algorithme ?

Posté par
bbomaths
re : Calculer médiane sur Python 25-04-17 à 19:59

Bonjour.

Le début se ressemble mais la fin diffère...

Posté par
bbomaths
re : Calculer médiane sur Python 25-04-17 à 20:20

voilà ce que ça donne

Citation :


> python C:\...\Ile_maths\739835_hopio.py
entrer le  nombre de notes : 5
entrer une note : 1
entrer une note : 2
entrer une note : 3
entrer une note : 4
entrer une note : 5

mediane = 3.000000

serie :  [1.0, 2.0, 3.0, 4.0, 5.0]

> python C:\...\Ile_maths\739835_hopio.py
entrer le  nombre de notes : 6
entrer une note : 1
entrer une note : 2
entrer une note : 3
entrer une note : 4
entrer une note : 5
entrer une note : 6

mediane = 3.500000

serie :  [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]

Posté par
bbomaths
re : Calculer médiane sur Python 25-04-17 à 20:30

Au fait, cocolaricotte, pourquoi cette question  ? Ai-je loupé quelque chose ?

Posté par
malou Webmaster
re : Calculer médiane sur Python 25-04-17 à 20:34

ça : (Lien cassé)

Posté par
bbomaths
re : Calculer médiane sur Python 25-04-17 à 20:48

Il y a un copyright ?   Futé l'artiste...  

Posté par
fm_31
re : Calculer médiane sur Python 25-04-17 à 21:05

Citation :
Je pense avoir trouvé un truc mais j'aurai besoin d'aide

Quel genre d'aide ?

Posté par
bbomaths
re : Calculer médiane sur Python 25-04-17 à 21:24

Bonsoir.

La réponse à son problème est d'utiliser la fonction  raw_input(). qui retourne une chaîne de caractères...

Posté par
fm_31
re : Calculer médiane sur Python 25-04-17 à 21:34

la fonction   input ()   retourne aussi une chaine de caractère . Exemple :

  nbtxt = input ("Nombre = (STOP pour terminer) ")
  nb = float (nbtxt)

Posté par
bbomaths
re : Calculer médiane sur Python 25-04-17 à 21:55

et float(nbtxt) donne quoi si nbtxt = "stop" ?

le problème avec la fonction input() est qu'elle interprète la donnée saisie :



>>> in1 = raw_input("in1 : entrez 3 \n")
in1 : entrez 3
3
>>> print "type in1 : %s\n" % type(in1)
type in1 : <type 'str'>

>>> in2 = input("in2 : entrez 3. \n")
in2 : entrez 3.
3.
>>> print "type in2 : %s\n" % type(in2)
type in2 : <type 'float'>

>>> in3 = input("in3 : entrez 3.0 \n")
in3 : entrez 3.0
3.0
>>> print "type in3 : %s\n" % type(in3)
type in3 : <type 'float'>

>>>

Posté par
bbomaths
re : Calculer médiane sur Python 25-04-17 à 21:58



>>>
>>> float("toto")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: toto
>>>

Posté par
fm_31
re : Calculer médiane sur Python 25-04-17 à 22:04

Citation :
et float(nbtxt) donne quoi si nbtxt = "stop" ?


Il faut évidemment faire break si la saisie retourne  STOP   et ne convertir que si on n'a pas  STOP

Posté par
bbomaths
re : Calculer médiane sur Python 25-04-17 à 22:04

j'oubliais


>>>
>>> in4 = input("in4 : entrez 3 \n")
in4 : entrez 3
3
>>> print "type in4 : %s\n" % type(in4)
type in4 : <type 'int'>

>>>

Posté par
fm_31
re : Calculer médiane sur Python 25-04-17 à 22:09

On peut aussi envisager l'utilisation des  exceptions pour une sécurisation totale des saisies  .

Posté par
bbomaths
re : Calculer médiane sur Python 25-04-17 à 22:18

on peut tout imaginer..



while True :
    entree = raw_input(" entrez un nombre decimal x.y ou q : "

    if entree == "q" :

      break

   else :

      l_nombre.append(float(entree))



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !