Calcule de moyennes en Boucle dans une liste
Fermé
Johny34110
Messages postés
5
Date d'inscription
dimanche 29 mai 2022
Statut
Membre
Dernière intervention
31 mai 2022
-
29 mai 2022 à 09:23
jee pee Messages postés 40470 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 novembre 2024 - 31 mai 2022 à 14:18
jee pee Messages postés 40470 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 novembre 2024 - 31 mai 2022 à 14:18
A voir également:
- Typeerror: 'list' object cannot be interpreted as an integer
- List disk - Guide
- Shockwave flash object - Télécharger - Divers Web & Internet
- Directory list & print - Télécharger - Divers Utilitaires
- The language dll vb6fr.dll could not be found - Forum Windows
- Pfn list corrupt ✓ - Forum Windows
7 réponses
Utilisateur anonyme
29 mai 2022 à 09:54
29 mai 2022 à 09:54
Bonjour
Tout d'abord une remarque
D'un point de vue strictement mathématique, faire la moyenne de tous les éléments en une seule fois te donnera le même résultat.
En informatique, il peut y avoir une différence sensible, mais ce sera dû à la façon de transcrire les nombre décimaux en binaire qui arrondit beaucoup de valeurs à un plus proche que l'on peut coder.
Et donc pour obtenir un résultat le plus vrai possible, il est préférable de faire la moyenne d'un coup.
Sauf bien sûr, si les moyennes intermédiaires ont de l'intérêt pour toi (et encore que....)
Si tu n'es pas sensibilisé à ce point, voir ceci https://forums.commentcamarche.net/forum/affich-35846831-erreur-de-calcul#3
Bref, maintenant que tu es averti, une solution est de faire une boucle dans une boucle, une autre est de faire une boucle qui va de 4 en 4
Tout d'abord une remarque
j'aimerais calculer la moyenne des 4 premières valeurs puis des 4 suivantes etc.... jusqu'à la fin.
Pour enfin faire la moyenne de toutes ces moyennes ....
D'un point de vue strictement mathématique, faire la moyenne de tous les éléments en une seule fois te donnera le même résultat.
En informatique, il peut y avoir une différence sensible, mais ce sera dû à la façon de transcrire les nombre décimaux en binaire qui arrondit beaucoup de valeurs à un plus proche que l'on peut coder.
Et donc pour obtenir un résultat le plus vrai possible, il est préférable de faire la moyenne d'un coup.
Sauf bien sûr, si les moyennes intermédiaires ont de l'intérêt pour toi (et encore que....)
Si tu n'es pas sensibilisé à ce point, voir ceci https://forums.commentcamarche.net/forum/affich-35846831-erreur-de-calcul#3
Bref, maintenant que tu es averti, une solution est de faire une boucle dans une boucle, une autre est de faire une boucle qui va de 4 en 4
Utilisateur anonyme
Modifié le 29 mai 2022 à 09:57
Modifié le 29 mai 2022 à 09:57
Bonjour,
Je ne code pas en Python, mais la logique devrait être la même que dans les autres langages.
Initialise une variable
Pour chaque tour de boucle, ajoute 1 sur
Lorsque tu atteins 4, remet
Je ne code pas en Python, mais la logique devrait être la même que dans les autres langages.
Initialise une variable
nbLoopen dehors de ta boucle avec la valeur 0, et une autre
tmpTotalqui servira à stocker le total des 4 dernières valeurs.
Pour chaque tour de boucle, ajoute 1 sur
nbLoop, et tu additionnes
tmpTotal.
Lorsque tu atteins 4, remet
nbLoopà 0 et recommence ton addition dans
tmpTotal.
jee pee
Messages postés
40470
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
23 novembre 2024
9 427
Modifié le 29 mai 2022 à 10:21
Modifié le 29 mai 2022 à 10:21
Bonjour,
En dehors de l'aspect signalé par Whismeril, c'est typiquement le rôle d'une boucle avec un pas d'incrément, 4 dans ton cas. Exemple
En dehors de l'aspect signalé par Whismeril, c'est typiquement le rôle d'une boucle avec un pas d'incrément, 4 dans ton cas. Exemple
import random taille=32 tab = [random.randint(0, 100) for x in range(taille)] print(tab) cumulGlobal=0 for i in range(0,taille,4): print("i =",i) cumul=0 for j in range(4): print(" j =",j," i+j =",i+j,"tab[i+j} =",tab[i+j])
Johny34110
Messages postés
5
Date d'inscription
dimanche 29 mai 2022
Statut
Membre
Dernière intervention
31 mai 2022
29 mai 2022 à 20:55
29 mai 2022 à 20:55
Merci
j'ai éssayer d'intégrer le code au mien mais j'obtiens cette erreur
" line 40, in <module>
for i in range(0,turbi,4):
TypeError: 'list' object cannot be interpreted as an integer
voilà mon programme:
turbi = []
prof = []
temp = []
date = []
a = 4 # convertir min
b = 4 * 24
c = 4 * 24 * 7
with open("C:\\Users\John\Desktop\PYTHON\Poizot\STBD_33002_20130712_085653.txt",
"r") as data: # ouverture et lecture des datas
data = [e.replace(',', '.') for e in data]
data = data[5:]
for ligne in data: # lecture des lignes dans data , exclusion des 6 premieres
liste = ligne.split(';') # supprimation des espaces
turbi.append((float(liste[0])))
prof.append((float(liste[1])))
temp.append((float(liste[2])))
date.append(((liste[3])))
cumulGlobal=0
for i in range(0,turbi,4):
cumul=0
for j in range(4):
print(" j =",j," i+j =",i+j,"tab[i+j} =",tab[i+j])
si vous pouvez m'aider ? :)
merci
j'ai éssayer d'intégrer le code au mien mais j'obtiens cette erreur
" line 40, in <module>
for i in range(0,turbi,4):
TypeError: 'list' object cannot be interpreted as an integer
voilà mon programme:
turbi = []
prof = []
temp = []
date = []
a = 4 # convertir min
b = 4 * 24
c = 4 * 24 * 7
with open("C:\\Users\John\Desktop\PYTHON\Poizot\STBD_33002_20130712_085653.txt",
"r") as data: # ouverture et lecture des datas
data = [e.replace(',', '.') for e in data]
data = data[5:]
for ligne in data: # lecture des lignes dans data , exclusion des 6 premieres
liste = ligne.split(';') # supprimation des espaces
turbi.append((float(liste[0])))
prof.append((float(liste[1])))
temp.append((float(liste[2])))
date.append(((liste[3])))
cumulGlobal=0
for i in range(0,turbi,4):
cumul=0
for j in range(4):
print(" j =",j," i+j =",i+j,"tab[i+j} =",tab[i+j])
si vous pouvez m'aider ? :)
merci
En Python, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
jee pee
Messages postés
40470
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
23 novembre 2024
9 427
Modifié le 29 mai 2022 à 21:14
Modifié le 29 mai 2022 à 21:14
peut être len(turbi), pas turbi
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Johny34110
Messages postés
5
Date d'inscription
dimanche 29 mai 2022
Statut
Membre
Dernière intervention
31 mai 2022
Modifié le 30 mai 2022 à 08:36
Modifié le 30 mai 2022 à 08:36
Merci pour le petit tuto whismeril , de mon coté sa n'avance toujours pas vraiment je suis toujours bloqué sur la partie
boucle de jee pee
je vois pas trop comment l'adapter pour mon projet :/
si vous pouvez m'éclairer ! merci d'avance
boucle de jee pee
turbi = [] prof = [] temp = [] date = [] a = 4 # convertir min b = 4 * 24 c = 4 * 24 * 7 with open("C:\\Users\John\Desktop\PYTHON\Poizot\STBD_33002_20130712_085653.txt", "r") as data: # ouverture et lecture des datas data = [e.replace(',', '.') for e in data] data = data[5:] for ligne in data: # lecture des lignes dans data , exclusion des 6 premieres liste = ligne.split(';') # supprimation des espaces turbi.append((float(liste[0]))) prof.append((float(liste[1]))) temp.append((float(liste[2]))) date.append(((liste[3]))) MoyTh = sum(turbi) / (len(date) *a ) MoyPh = sum(prof) / (len(date) * a) MoyTph = sum(temp) / (len(date) * a) MoyTj = sum(turbi) / (len(date) * b) MoyPj = sum(prof) / (len(date) * b) MoyTpj = sum(temp) / (len(date) * b) MoyTs = sum(turbi) / (len(date) * c) MoyPs = sum(prof) / (len(date) * c) MoyTps = sum(temp) / (len(date) * c) taille=len(turbi) tab = [random.randint(0, 100) for x in range(taille)] print(tab) cumulGlobal=0 for i in range(0,taille,4): print("i =",i) cumul=0 for j in range(4): print(" j =",j," i+j =",i+j,"tab[i+j} =",tab[i+j])
je vois pas trop comment l'adapter pour mon projet :/
si vous pouvez m'éclairer ! merci d'avance
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 30 mai 2022 à 10:17
Modifié le 30 mai 2022 à 10:17
Bonjour,
A mon avis, les lignes 15 à 21 devraient être indentées, donc sous le with()
Je me demande comment se présente ton fichier texte ...
Sinon:
# ouverture et lecture des datas : pas de s a data, c'est déjà un mot au pluriel (singulier : datum)
# supprimation des espaces : c'est plutôt suppression :-) :-)
et calcul de moyennes
A mon avis, les lignes 15 à 21 devraient être indentées, donc sous le with()
Je me demande comment se présente ton fichier texte ...
Sinon:
# ouverture et lecture des datas : pas de s a data, c'est déjà un mot au pluriel (singulier : datum)
# supprimation des espaces : c'est plutôt suppression :-) :-)
et calcul de moyennes
jee pee
Messages postés
40470
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
23 novembre 2024
9 427
Modifié le 30 mai 2022 à 10:50
Modifié le 30 mai 2022 à 10:50
Si les valeurs à traiter sont dans turbi :
tu peux te passer de cumulGlobal si en fin tu effectues la moyenne des moyennes, tu pourrais te passer de la boucle j si tu mets en dur les 4 indices i, i+1, i+2, i+3 pour calculer la moyenne directe, tu peux utiliser sum(turbi), ... suivant ce que tu connais des instructions, mais utiliser les boucles i et j avec des prints doit te permettre de décomposer l'algorithme
cumulGlobal=0 moyenne4=[] for i in range(0,len(turbi),4): print("i =",i) cumul=0 for j in range(4): print(" j =",j," i+j =",i+j,"turbi[i+j] =",turbi[i+j]) cumul += turbi[i+j] cumulGlobal += turbi[i+j] moyenne4.append(cumul/4) print(moyenne4) moyenneGlobale = cumulGlobal / len(turbi) print(moyenneGlobale)
tu peux te passer de cumulGlobal si en fin tu effectues la moyenne des moyennes, tu pourrais te passer de la boucle j si tu mets en dur les 4 indices i, i+1, i+2, i+3 pour calculer la moyenne directe, tu peux utiliser sum(turbi), ... suivant ce que tu connais des instructions, mais utiliser les boucles i et j avec des prints doit te permettre de décomposer l'algorithme
moyenneGlobale = sum(turbi)/len(turbi) moyenne4=[] for i in range(0,len(turbi),4): moyenne4.append((turbi[i]+turbi[i+1]+turbi[i+2]+turbi[i+3])/4)
Johny34110
Messages postés
5
Date d'inscription
dimanche 29 mai 2022
Statut
Membre
Dernière intervention
31 mai 2022
31 mai 2022 à 07:16
31 mai 2022 à 07:16
Merci à tous pour votre aide !
Ducoup après bidouillages je suis partie sur une boucle permettant de calculer mes moyennes du type :
Merci encore!
Ducoup après bidouillages je suis partie sur une boucle permettant de calculer mes moyennes du type :
i , pas = 0,4 while 1: s=0 try: for x in range(pas): s=s+turbi[i+x] #calcule de la somme MoyTh.append(s/pas) #Liste apprend les valeurs somme/pas i=i+pas #passer aux "pas" suivant except: break MoyTh1= sum(MoyTh)/len(MoyTh)
Merci encore!
jee pee
Messages postés
40470
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
23 novembre 2024
9 427
Modifié le 31 mai 2022 à 07:47
Modifié le 31 mai 2022 à 07:47
bidouillages c'est exactement ce que je pensais en lisant ton code. Tu cherches les complications, gérer un indice à la main alors qu'une boucle le fait mieux et surtout la sortie est horrible, générer une erreur d'indice pour quitter. C'est comme scier la branche sur laquelle on est assis, juste pour ne pas avoir à prendre la décision de sauter pour descendre ;-)
Johny34110
Messages postés
5
Date d'inscription
dimanche 29 mai 2022
Statut
Membre
Dernière intervention
31 mai 2022
31 mai 2022 à 14:03
31 mai 2022 à 14:03
j'étais obligé de créer une boucle avec condition car sinon j'avais une erreur de range quand j'utilisais le tien , car je penses qu'il était impossible de classer toute les valeurs de la liste par groupe de 4.
De plus , j'ai commencé python il y'a une semaine, donc forcement je suis pas encore un "maitre" dans le domaine.
Mais merci pour la remarque...
De plus , j'ai commencé python il y'a une semaine, donc forcement je suis pas encore un "maitre" dans le domaine.
Mais merci pour la remarque...
jee pee
Messages postés
40470
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
23 novembre 2024
9 427
31 mai 2022 à 14:18
31 mai 2022 à 14:18
Tu peux utiliser la division entière //
Après une question pratique se pose quand les valeurs ne sont pas des multiples de 4, comment moyenne générale doit être évaluée, avec toutes les valeurs, ou seulement celles retenues dans les groupes par 4 ?
for i in range(0,(len(turbi)//4)*4,4):
Après une question pratique se pose quand les valeurs ne sont pas des multiples de 4, comment moyenne générale doit être évaluée, avec toutes les valeurs, ou seulement celles retenues dans les groupes par 4 ?