Partage
  • Partager sur Facebook
  • Partager sur Twitter

Opération liste de valeur

    22 avril 2016 à 10:22:18

    bonjour à tous !
    Grand débutant de Python, j'apprend grace à ce site pour mon stage.
    je code surtout en shell (bash), ai des bases de C++, mais dois (et devrais) faire du post traitement sous python. Bref, ça ne sera pas la dernière fois que je viendrai ici !

    J'ai un fichier composé ainsi
    15 lignes de blabla
    valeur1
    valeur 2
    ....


    J'ai besoin de faire la somme de valeurs comprises entre 2 lignes précises (lignes fonctions d'un paramètre h).

    J'ai éffectué plusieurs recherches (google, sur ce site ...etc), mais me trouve comme une poule devant un couteau pour mon 1er programme ...

    Je pensais à quelque chose comme ça :

    n= numéro ligne
    h= paramètre

    while n>= (h/2-1)*289+16 & n<=(h/2)*289+16:
           somme récurcive des valeurs.

    echo "somme"

    est-ce correct ou vaut-il mieux que je passe mes valeurs dans un tableau, et que je manipule les éléments de l'array ?


    Merci de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2016 à 10:57:57

      Bonjour, si chaque ligne contient exactement une valeur et que tu veux calculer n valeurs à partir de la ligne h tu peux utiliser ça:

      def calcul_lignes(n, h):
          """calcule n lignes à partir de la ligne h"""
          res=0
          with open("valeur.txt", "r") as f: #ouverture du fichier en mode "read"
              i = 1
              for line in f:  #on boucle sur les lignes du fichier
                  if h < i < h+n:  #si i est compris entre h et h+n
                      res += int(line)
                  elif i == h+n:
                      return res
                  i+=1

      Sinon une version un poil plus compact mais plus compliqué:

      def calcul_lignes(n, h):
          """calcule n lignes à partir de la ligne h"""
          res=0
          with open("valeur.txt", "r") as f:
              for i, line in enumerate(f, 1):
                  if h < i < h+n:
                      res += int(line)
                  elif i == h+n:
                      return res




      -
      Edité par lewisbm 22 avril 2016 à 11:00:41

      • Partager sur Facebook
      • Partager sur Twitter
        22 avril 2016 à 11:23:36

        Merci pour cette réponse rapide, est ce une écritude pour Python 3 ?
         Je suis actuellement sous 2.4.3, ce qui explique peut être le message d'erreur que j'ai :

        with open ....

        SyntaxError : invalid syntax



        problème de syntaxe dû aux différentes versions de python ou peut être qu'il me faut ajouter un "import" ?

        • Partager sur Facebook
        • Partager sur Twitter
          22 avril 2016 à 11:38:56

          avec :

          f= open( .........)

          pas d'erreur sur cette ligne, mais sur la suivante i=1 : SyntaxError : invalid syntax
          • Partager sur Facebook
          • Partager sur Twitter
            22 avril 2016 à 11:39:10

            CharlesRigoudy a écrit:

            Merci pour cette réponse rapide, est ce une écritude pour Python 3 ?
             Je suis actuellement sous 2.4.3, ce qui explique peut être le message d'erreur que j'ai :

            with open ....

            SyntaxError : invalid syntax



            problème de syntaxe dû aux différentes versions de python ou peut être qu'il me faut ajouter un "import" ?

            2.4.3 ... sérieusement ?

            "We are pleased to announce the release of Python 2.4.3 (final), a bugfix release of Python 2.4, on March 29, 2006."

            Non pas de soucis d'import mais ca serait pas mal de passer à python 3 parce que la 2.4.3 ca fait tout de même 10 ans :p

            • Partager sur Facebook
            • Partager sur Twitter
              22 avril 2016 à 14:30:51

              2.4.3, malheureusement oui, je suis en stage et ne peux mettre python à jour !

              Merci pour l'aide, il m'a fallu ajouter une ligne pour préciser que ce qu'il y a sur la ligne est un nombre sinon il refusait toute opération.
              j'ai eu aussi des problème avec le with open, sous cette forme ça fonctionne.

              h=10  #hauteur assemblage
              l= (h/2-1)*289+16    #debut ligne d'interet
              n=289   # nombre de valeurs d'interet
              a = 0
              res=0

              adresse = 'calcul_assemblage.tr4_1_0_0_value.general'   
              f= open(adresse,'r') 
              i=1
                 
              for ligne in f:
                a += 1
                if a>=l and a<=l+n:
                   x = str(ligne.split(" ") [0])
                   res += float(x)

              print res


              Encore merci !
              • Partager sur Facebook
              • Partager sur Twitter
                22 avril 2016 à 17:17:03

                Attention avec ce code tu ne fermes pas ton fichier. Utilises plutot un bloc try/finally
                • Partager sur Facebook
                • Partager sur Twitter

                Opération liste de valeur

                × 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