Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonction python

    15 mai 2013 à 21:42:21

    Notre prof nous a donné la fonction suivante:

    ## fonction qui lit le fichier d'orthologues
    
    def lit_fichier():
        try:
            f = open("orthologies",'r')
        except IOError, e:
            print "Fichier inconnu: ", nf
            return
    
        desp={}
        s=f.readline()
        ls=s.split()
        lesp=[]
        
        for m in ls:
            de=m.split("_")
            if not de[1] in lesp:
                lesp.append(de[1])
                
        for esp in lesp:
            desp[esp]=[]
    
        lorth=[]
        s=f.readline()
        while s:
            ls=s.split()
            d={}
            i=0
            for esp in lesp:
                d[esp]={}
                d[esp]["ch"]=ls[i]
                d[esp]["deb"]=int(ls[i+1])      !!!!!
                d[esp]["fin"]=int(ls[i+2])
                d[esp]["sens"]=ls[i+3]
                i+=4
            lorth.append(d)
            s=f.readline()
                        
        f.close()
    
        return lorth
    

    J'ai mis des !!! pour vous montrer l'erreur que relève python. C'est une erreur du type Indexerror: list index out of range. Alors j'ai lu un des sujets du forum qui parlait des erreurs courantes. Mais je n'ai pas trouvé ma réponse. A quoi es due cette erreur?

    Notre prof est censé être en plus bon en python.....

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 mai 2013 à 21:54:48

      ls est une liste, apparemment pas suffisamment assez longue pour appeler l'indice i+1, ce qui provoque l'erreur IndexError.

      Pour éviter cette erreur peut-être viré le i += 4.

      "Notre prof est censé être en plus bon en python....."

      Les profs ne sont pas des machines, mais je trouve son code un peu répétitif, donc peu optimisé.

      -
      Edité par Anonyme 15 mai 2013 à 21:57:57

      • Partager sur Facebook
      • Partager sur Twitter
        15 mai 2013 à 22:04:03

        Oui, tu as raison les profs ne sont pas des machines. Je disais ça dans le sens où je suis persuadé que l'erreur vient de moi. Bref, j'ai viré le i+=4 mais ça ne change rien.

        en fait, si je te donnais l'adresse du fichier orthologies, tu comprendrais plus le but de la fonction: http://pbil.univ-lyon1.fr/members/gueguen/lib/Exam_Python/11_12/orthologies

        En fait, c'est une fonction qui doit sortir une liste de dictionnaire de gènes....

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          15 mai 2013 à 22:07:47

          Prenons cette ligne

          17 57247114 57278992 + 11 86905299 86919638 - 19 7148717 7151635 +

           Tu devrais sortir quoi normalement?

          • Partager sur Facebook
          • Partager sur Twitter
            15 mai 2013 à 22:14:40

            chromosome=17

            début du gène=57247114

            fin du gène=57278992

            sens sur le chromosome (+ ou -)=+

            C'est la même idée pour la suite de la ligne. Il y a encore deux chromosomes.

            Ce qui est bizarre, c'est que tout à l'heure j'ai exécuté la fonction. Elle m'a sorti un dictionnaire vide (c'est déjà un résultat). Je n'ai rien changé dans cette fonction. Et là, problème IndexError...

            • Partager sur Facebook
            • Partager sur Twitter
              15 mai 2013 à 23:03:22

              fred1599 a écrit:

              Les profs ne sont pas des machines.


              Ni les profs ni les eleves ne sont des machines. Le fait de ne pas en etre une ne le dispense pas de donner a ses eleves un code correct, et si possible lisible.

              PEP8:

              Always surround these binary operators with a single space on either side: assignment (=), augmented assignment (+=, -= etc.), comparisons (==, <, >, !=, <>, <=, >=, in, not in, is, is not), Booleans (and, or, not).

              -
              Edité par stackOverflow 15 mai 2013 à 23:03:31

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                15 mai 2013 à 23:23:35

                @stack

                T'as raison... Je ne parlais pas du style, mais en effet la lisibilité laisse à désirer.

                @archaostol

                C'est un bon exercice pour le refaire toi même et en plus propre.

                • Partager sur Facebook
                • Partager sur Twitter
                  16 mai 2013 à 14:36:40

                  Plusieurs choses m'échappent! Mon professeur m'a dit que cette fonction marchait parfaitement sur sa machine. Du coup, je me suis dit que le problème venait de moi et j'ai repris depuis internet la fonction et le fichier orthologies. Et la, effectivement la fonction marchait parfaitement!!! Donc je suis un peu perdu....

                  Pourquoi hier Python détectait une erreur??? (la fonction était exactement la même). Le seul truc qui a changé c'est que j'ai importé proprement le fichier orthologies (je suis sous mac) et que j'ai changé d'éditeur pour mes programmes python. Je trouvais Fraise pas mal mais je réutilise maintenant l'IDLE

                  Des idées??

                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 mai 2013 à 14:55:21

                    Bonjour,

                    En lisant ce code j'ai eu l'impression de voir un code candidat à un concours d'obfuscation : desp, lesp, esp...

                    Sinon...

                    Que veux-tu dire par " j'ai importé proprement le fichier orthologies (je suis sous mac)" ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 mai 2013 à 15:39:54

                      Clic droit sur le fichier et enregistrer. Et le fichier n'est pas au format txt (d'ailleurs j'arrive pas trop à voir le format de ce type de fichier...)

                      Auparavant, j'ai copier coller l'intégralité du contenu dans un fichier vierge txt

                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 mai 2013 à 16:44:58

                        Je jette un oeil en rentrant chez moi, si tu n'as toujours pas trouvé
                        • Partager sur Facebook
                        • Partager sur Twitter

                        fonction python

                        × 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