Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation d'une liste dans un IF

Sujet résolu
    25 juin 2020 à 12:46:38

    Salut à tous,

    J'ai un problème avec l'utilisation d'une liste dans un "if-statement". Voilà une partie du code pour mieux comprendre :

    n = -1
    
    for i in dna_str:
    
            n += 1
            l = len(dna_str[n])
    
            for c in sq:
                j += 1
                if sq[j:j+l] == dna_str[n]:

    Ici le dna_str[n] est un string et la variable l est un int j(ai vérifié via type()). Or ce code ne fonctionne pas. Alors que si je remplace n par un nombre, le même que ce qu'il devrait être à ce moment là dans la boucle, le code fonctionne...

    Auriez-vous des idées, des solutions à mon problème ?

    Merci beaucoup !

    • Partager sur Facebook
    • Partager sur Twitter
      25 juin 2020 à 12:55:30

      Tu veux comparer dna_str et seq ?
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        25 juin 2020 à 13:54:10

        Je veux comparer dna_str[n] avec une partie de sq comprise dans les bornes [j:j+l].

        Plus haut dans le code je stocke des strings dans dna_str. Dans cette boucle, j'ai bien accès à ces strings car quand je print(dna_string[n]), j'ai bien un résultat, de même que pour len(dna_str[n]).

        Or dans ce IF, ni l ni dna_str ne fonctionne lors de la comparaison.

        • Partager sur Facebook
        • Partager sur Twitter
          25 juin 2020 à 14:18:50

          dna_str c'est bien une liste de string ?

          et sq, c'est quoi, un string ?

          • Partager sur Facebook
          • Partager sur Twitter
            25 juin 2020 à 14:20:18

            VictorCs50 a écrit:

            Alors que si je remplace n par un nombre, le même que ce qu'il devrait être à ce moment là dans la boucle, le code fonctionne...

            Auriez-vous des idées, des solutions à mon problème ?

            On peut supposer que si ça marche en remplaçant n par la valeur qu'il devrait avoir, alors c'est que la variable n dans le programma n'a pas la valeur qu'elle devrait ?

            Pour vérifier si n a bien les bonnes valeurs, tu peux juste l'afficher avec un print.

            • Partager sur Facebook
            • Partager sur Twitter

            Blond, bouclé, toujours le sourire aux lèvres...

              25 juin 2020 à 14:51:11

              thelinekioubeur a écrit:

              dna_str c'est bien une liste de string ?

              et sq, c'est quoi, un string ?


               Les deux sont bien des strings. Et le IF fonctionne parfaitement si je remplace dna_str par un string entre "" et si je remplace l par un nombre.

              -
              Edité par VictorCs50 25 juin 2020 à 14:52:02

              • Partager sur Facebook
              • Partager sur Twitter
                25 juin 2020 à 14:59:47

                Encore une fois, fait des print des diverses variables avant ton if pour voir si elles correspondent à ce que tu penses qu'elles doivent valoir
                • Partager sur Facebook
                • Partager sur Twitter
                  25 juin 2020 à 15:13:10

                  Si dna_str est un string, alors dna_str[n] est forcément un string de longueur 1...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 juin 2020 à 17:58:19

                    Que vaut la variable 'j' au moment du if?
                    tu as des variables 'i' et 'c' qui ne semblent pas servir ...
                    sq[j:j+l] ne sera égal à dna_str[n] que si j vaut 0, je me trompe?
                    edit:
                    Oui, je me trompe car sq peut être plus long que dna_str[n].
                    Par contre si j est trop grand, ça ne marchera pas.
                    Il faut j <= len(sq) - l

                    -
                    Edité par PierrotLeFou 25 juin 2020 à 18:43:46

                    • Partager sur Facebook
                    • Partager sur Twitter

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

                      25 juin 2020 à 19:20:25

                      Je mets juste en dessous le résultat des type() et la valeur de n :

                       for i in dna_str:
                      
                              n += 1
                              l = len(dna_str[n])
                              
                              print(n)
                              print(type(l))
                              print(type(dna_str[n]))
                              print()
                          
                              for c in sq:
                                  j += 1
                                  if sq[j:j+l] == dna_str[n]:

                      Merci à vous tous

                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 juin 2020 à 20:23:05

                        Pourquoi tu print les types et pas les variables directement ?

                        Aussi où te sert tu de la variable i ?

                        -
                        Edité par thelinekioubeur 25 juin 2020 à 20:23:35

                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 juin 2020 à 23:19:53

                          Effectivement je ne me servais pas de la variable i. Néanmoins malgré ça, le problème reste le même...

                           for i in dna_str:
                                  l = len(i)
                                  
                                  print(i)
                                  print(l)
                                  print()
                              
                                  for c in sq:
                                      j += 1
                                      if sq[j:j+l] == i:

                          Merci pour tes retours en tous cas !

                          -
                          Edité par VictorCs50 25 juin 2020 à 23:20:49

                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 juin 2020 à 0:12:04

                            Print aussi l'autre élément de la comparaison ( sq[j:j+l] ).

                            C'est logique, si la comparaison ne produit pas le résultat voulu il faut afficher les deux éléments comparés pour comprendre.

                            Il faut que tu prenne l'habitude de faire ça, programmer sans savoir debug c'est pas possible.

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Blond, bouclé, toujours le sourire aux lèvres...

                              26 juin 2020 à 1:36:45

                              LoupSolitaire a écrit:

                              Print aussi l'autre élément de la comparaison ( sq[j:j+l] ).

                              C'est logique, si la comparaison ne produit pas le résultat voulu il faut afficher les deux éléments comparés pour comprendre.

                              Il faut que tu prenne l'habitude de faire ça, programmer sans savoir debug c'est pas possible.

                              D'accord avec ça, mais je le répète, il faut afficher 'j' également

                              • Partager sur Facebook
                              • Partager sur Twitter

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

                                26 juin 2020 à 9:00:11

                                Et la variable "c" elle sert à quoi ?

                                Et où est initialisé j ?

                                -
                                Edité par thelinekioubeur 26 juin 2020 à 9:00:35

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  26 juin 2020 à 16:55:26

                                  Je verrais plutôt:
                                          for j in range(len(sq) - l):
                                              if sq[j:j+l] == dna_str[n]:
                                                  # on cherche le gène dans la séquence ...

                                  -
                                  Edité par PierrotLeFou 26 juin 2020 à 16:58:48

                                  • Partager sur Facebook
                                  • Partager sur Twitter

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

                                    26 juin 2020 à 17:22:27

                                    Perso j'ai toujours pas compris ce qu'il faut faire.
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Python c'est bon, mangez-en. 

                                      26 juin 2020 à 18:55:02

                                      josmiley a écrit:

                                      Perso j'ai toujours pas compris ce qu'il faut faire.

                                      Ha bon, tu n'as pas de boule de cristal comme les gens du langage C?

                                      Il donne un indice en donnant 'dna' comme nom de variable (DeoxyriboNucleic Acid)

                                      C'est le genre de code pour vérifier si une séquence est dans un brin d'ADN. Ça ne peut pas être plus clair. :)

                                      -
                                      Edité par PierrotLeFou 26 juin 2020 à 19:04:11

                                      • Partager sur Facebook
                                      • Partager sur Twitter

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

                                        26 juin 2020 à 18:59:19

                                        bha juste avec des `in` ou str.find ça le fait pas ?

                                        -
                                        Edité par josmiley 26 juin 2020 à 18:59:43

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Python c'est bon, mangez-en. 

                                          26 juin 2020 à 19:08:18

                                          josmiley a écrit:

                                          bha juste avec des `in` ou str.find ça le fait pas ?

                                          -
                                          Edité par josmiley il y a 5 minutes

                                          Ça dépend s'il veut savoir exactement où se trouve sa sous-chaîne.
                                          str.find() retourne bien l'indice de la première occurrence.

                                          -
                                          Edité par PierrotLeFou 26 juin 2020 à 19:19:28

                                          • Partager sur Facebook
                                          • Partager sur Twitter

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

                                            27 juin 2020 à 14:41:32

                                            La solution était dans la variable j. Plus loin dans le code j'oubliais de remettre j à sa valeur initiale. sq[j:j+l] allait donc plus loin que prévu...

                                            Merci à tous pour votre aide !

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              27 juin 2020 à 18:23:56

                                              VictorCs50 a écrit:

                                              La solution était dans la variable j. Plus loin dans le code j'oubliais de remettre j à sa valeur initiale. sq[j:j+l] allait donc plus loin que prévu...

                                              Merci à tous pour votre aide !

                                              Ha bon, ma boule de cristal a fonctionné ... Tu pourras t'attaquer au génome du Covid-19 maintenant :)

                                              • Partager sur Facebook
                                              • Partager sur Twitter

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

                                              Utilisation d'une liste dans un IF

                                              × 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