Partage
  • Partager sur Facebook
  • Partager sur Twitter

Faire une moyenne de float dans une liste

Sujet résolu
    17 novembre 2021 à 18:22:09

    Bonjour, pour mes cours de python je dois faire une moyenne de notes contenu dans un fichier .txt, pour cela j'ai donc récupérer les notes en str dans une liste, j'ai enlever les \n puis j'ai transformer chacun des nombres en float, j'ai ensuite essayer d'additionner tout ces nombres pour ensuite faire la moyenne? Malheureusement, je vois un message d'erreur "float object is not iterable "

    Merci beaucoup a tout ceux qui m'aiderait ! Bonne journée et au revoir.

    -
    Edité par GerardDupond 19 novembre 2021 à 16:38:37

    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2021 à 19:18:38

      Il faudrait voir ton code pour savoir.
      C'est comme si tu avais un seul float par ligne et que tu fais un range dessus
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        17 novembre 2021 à 19:59:11

        Bonjour,

        Merci de colorer votre code à l'aide du bouton Code

        Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: python;">Votre code ici</pre>.

        Merci de modifier votre message d'origine en fonction.

        Manque de Politesse

        Votre message ne comporte pas ou peu de formules de politesse (« Bonjour », « Merci », « Au revoir », etc.). Les règles du site exigent que chaque nouveau message comporte un minimum de politesse. Après tout, les gens qui répondent le font gratuitement, sur leur temps libre. Ils méritent bien un minimum de considération, n'est-ce pas ?

        Liens conseillés

        • Partager sur Facebook
        • Partager sur Twitter
          17 novembre 2021 à 20:41:26

          Bonjour. str.strip ne modifie pas la chaîne, mais en renvoie une version modifiée. Par conséquent ta ligne 10 n'a aucun impact mais le float peut très bien se débrouiller avec un '\n' en fin de chaîne.

          D'après la ligne 11, number est un float. Or, en utilisant help(sum) dans un interpréteur on se rend compte que sum prends comme argument une liste (ou n'importe quel objet qui se comporte comme une liste).

          • Partager sur Facebook
          • Partager sur Twitter

          typage structurel ftw

            18 novembre 2021 à 9:40:12

            Bonjour,

            on peut aussi faire comme ça:

            somme = 0
            with open('notes.txt','r') as f:
                for line in f:
                    somme += float(line[:-1])
            
            print(somme)



            • Partager sur Facebook
            • Partager sur Twitter
              18 novembre 2021 à 11:04:36

              Ou comme ça:
              sum(map(float, open("notes.txt")))
              • Partager sur Facebook
              • Partager sur Twitter
                19 novembre 2021 à 16:32:13

                Merci de votre aide mais mon exercice est bien de stocké d'abord toutes les notes dans une liste avant de faire la moyenne

                -
                Edité par GerardDupond 19 novembre 2021 à 17:05:14

                • Partager sur Facebook
                • Partager sur Twitter
                  19 novembre 2021 à 16:40:31

                  Bonjour,

                  Sujet résolu

                  Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 novembre 2021 à 16:52:34

                    Phil_1857 a écrit:

                    Bonjour,

                    on peut aussi faire comme ça:

                    somme = 0
                    with open('notes.txt','r') as f:
                        for line in f:
                            somme += float(line[:-1])
                    
                    print(somme)

                    Merci pour cette solution mais mon exercice est de stocké les notes dans une liste et non de les additionner directement, auriez-vous une solution pour cela? Merci d'avance



                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 novembre 2021 à 16:56:26

                      tu peux modifier ainsi, mais bon c'est juste pour passer par une liste intermédiaire

                      somme = 0
                      with open('notes.txt','r') as f:
                          lignes=f.readlines()
                      
                      for line in lignes:
                          somme += float(line[:-1])
                       
                      print(somme)



                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 novembre 2021 à 17:10:08

                        sum(map(float, list(open("notes.txt"))))
                        :lol:
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 novembre 2021 à 13:34:47

                          ЯК a écrit:

                          sum(map(float, list(open("notes.txt"))))

                          :lol:

                          Je ne connaissais pas cette façon de faire mais merci beaucoup :D

                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 novembre 2021 à 14:41:17

                            Sauf que, si je ne m'abuse, cette ligne équivaut à la somme des valeurs de la liste, et pas sa moyenne.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            typage structurel ftw

                              20 novembre 2021 à 18:38:40

                              Hello,

                              Voici une solution que je trouve plus de niveau débutant à mon sens,

                              def mean_values_from_file(path):
                                  my_sum = 0.0
                                  number_of_values = 0
                                  with open(path, 'r') as f:
                                      for ind, line in enumerate(f, start=1):
                                          if line:
                                              value = float(line.rstrip())
                                              my_sum += value
                                              number_of_values = ind
                                  if number_of_values:
                                      return my_sum / number_of_values
                                  return None



                              • Partager sur Facebook
                              • Partager sur Twitter

                              Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                              La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                21 novembre 2021 à 16:58:07

                                Sauf qu'il vaut 100 fois mieux juste incrémenter number_of_values au lieu d'utiliser ind puisque une seule ligne vide dans ton fichier rends le résultat incorrect.

                                def get_mean(file_path: str) -> float or None:
                                
                                    with open(...) as f:
                                        nums = [float(l) for l in f if l]
                                
                                    try:
                                        return sum(nums)/len(nums)
                                
                                    except ZeroDivisionError:
                                        return None



                                • Partager sur Facebook
                                • Partager sur Twitter

                                typage structurel ftw

                                  22 novembre 2021 à 6:24:51

                                  digammaF a écrit:

                                  Sauf qu'il vaut 100 fois mieux juste incrémenter number_of_values au lieu d'utiliser ind puisque une seule ligne vide dans ton fichier rends le résultat incorrect.

                                  def get_mean(file_path: str) -> float or None:
                                  
                                      with open(...) as f:
                                          nums = [float(l) for l in f if l]
                                  
                                      try:
                                          return sum(nums)/len(nums)
                                  
                                      except ZeroDivisionError:
                                          return None



                                  Oui effectivement tu as raison

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                  La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                  Faire une moyenne de float dans une liste

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown