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
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
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é ***
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é ***
#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é ***
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é ***
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é ***
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é ***
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é ***
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é ***
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é ***
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é ***
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é ***
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é ***
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é ***
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é ***
voilà ce que ça donne
Bonsoir.
La réponse à son problème est d'utiliser la fonction raw_input(). qui retourne une chaîne de caractères...
la fonction input () retourne aussi une chaine de caractère . Exemple :
nbtxt = input ("Nombre = (STOP pour terminer) ")
nb = float (nbtxt)
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'>
>>>
>>>
>>> float("toto")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: toto
>>>
j'oubliais
>>>
>>> in4 = input("in4 : entrez 3 \n")
in4 : entrez 3
3
>>> print "type in4 : %s\n" % type(in4)
type in4 : <type 'int'>
>>>
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :