Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème de logique de code

pthon - debug

    11 mars 2024 à 20:52:00

    Hello à tous,

    j'espère que vous allez tous bien.

    je commence à me perdre dans la logique de mon code.

    pour faire simple, le code prend une liste de binaire en entrée (peu importe la taille de la liste).

    un tuple "t3" est défini à 0 au départ

    à chaque tour de boucle, le code vérifie ces condition :

    si valeur1 == 0 et valeur2 == 0, ou valeur1 == 1 et valeur2 == 1 => renvoie 0

    si valeur1 == 1 et valeur2 == 0, ou valeur1 == 0 et valeur2 == 1 => renvoie 1

    alors ça me retourne 3 tuples de valeurs définis comme suit :

    t1 :(1,0)

    t3: (1,0)

    et le couple 3 est formé par la valeur la plus représentée dans les tuples 1,2 et 3

    pour ce cas ci, je vérifie si t1[0], t2[0] et t3 (de départ) à une majorité de 0

    et si t1[1], t2[1] et t3 (de départ) à une majorité de 0

    là, je vois que t3 aura comme valeur 0 ou 1 en fonction de ce cas t1[0], t2[0] et t3 (de départ) ou 1[1], t2[1] et t3 (de départ)

    et, donc ensuite, mon code devrait NORMALEMENT passer au second élément de la liste en entrée, en déterminant les tuple t1, t2 et t3 possibles (en utilisant, cette fois le t3 de la première itération (t3 = (1,0))

    mon code boucle sur le le second for alors qu'il ne devrait pas, et je ne n'arrive pas à débug .

    si qqun peut jeter un coup d'oeuil et me dire où je me suis planté dans ma logique, ça serait cool.

    merci d'avance à tout ceux qui pourront me donner un petit peu d'aide.

    lstBinary = [0, 0, 0, 0]
    cpt0 = 0
    cpt1 = 0
    c = 0
    k = 0
    #lst_c = [[[0]]]
    lst_c = [[[0]], 0, 0, 0, 0]
    lst_c = []
    lst_i = []
    lst_j = []
    lst_c_sub = [[0]]
    lst_i_sub = []
    lst_j_sub = []
    
    #for index2, item2 in enumerate(lst_c_sub[k]):
    for index2, item2 in enumerate(lst_c_sub):
        print("len(lst_c_sub)", len(lst_c_sub))
    #for index, item in enumerate(lstBinary):
        item2 = tuple(item2)
        print("index2", index2)
        print("item2", item2)
        print(len(item2))
    
        #print("len(item2)", len(item2))
    
        #sleep(40)
    
        item2 = [item2]
        for i in range(0, len(item2)):
        #for i in range(0, 0):
            print("i", i)
            print("item2[0][i]", item2[0][i])
            #lstc = [0, 1]
            #lst_c.append(lstc)
            print("len(lst_c_sub)_", len(lst_c_sub))
            print("lstBinary[index2]", lstBinary[index2])
            print("item2[i]", item2[i])
    
    
            if (lstBinary[index2] == 0 and item2[0][i] == 0) or (lstBinary[index2] == 1 and item2[0][i] == 1):
                lst_c_sub = []
                lst_c_sub_sub = []
                tuple_i_sub_sub = (1, 0)
                tuple_j_sub_sub = (1, 0)
                lst_i_sub.append(tuple_i_sub_sub)
                lst_j_sub.append(tuple_j_sub_sub)
                lst_i.append(lst_i_sub)
                lst_j.append(lst_j_sub)
    
                print("lst_i", lst_i)
                print("lst_j", lst_j)
    
                print("lst_i[index2][i][1]", lst_i[index2][i][1])
                print("lst_j[index2][i][1]", lst_j[index2][i][1])
    
                lst_c_sub_b = [lst_i[index2][i][1], lst_j[index2][i][1], c]
                lst_c_sub_b_count_0 = lst_c_sub_b.count(0)
                lst_c_sub_b_count_1 = lst_c_sub_b.count(1)
                if lst_c_sub_b_count_0 > lst_c_sub_b_count_1:
                    lst_c_sub.append(0)
                else:
                    lst_c_sub.append(1)
    
                lst_c_sub_a = [lst_i[index2][i][0], lst_j[index2][i][0], c]
                lst_c_sub_a_count_0 = lst_c_sub_a.count(0)
                lst_c_sub_a_count_1 = lst_c_sub_a.count(1)
                if lst_c_sub_a_count_0 > lst_c_sub_a_count_1:
                    lst_c_sub.append(0)
                else:
                    lst_c_sub.append(1)
    
                lst_c_sub = list(dict.fromkeys(lst_c_sub))
                tuple_c_sub = tuple(lst_c_sub)
                del lst_c_sub
                #lst_c_sub = [lst_c_sub]
                lst_c_sub_sub.append(tuple_c_sub)
    
                print("lst_c_sub_sub", lst_c_sub_sub)
    
                print("tuple_c_sub", tuple_c_sub)
                #sleep(30)
                #lst_c_sub[k] = lst_c_sub_sub
    
                #print("lst_c_sub[k]", lst_c_sub[k])
                #lst_c[k] = lst_c_sub
                lst_c.append(lst_c_sub_sub)
                # lstc = lst_c_sub
                print("lst_c0_", lst_c)
    
            elif (lstBinary[index2] == 0 and item2[0][i] == 1) or (lstBinary[index2] == 1 and item2[0][i] == 0):
                lst_c_sub = []
                lst_i_sub_sub = []
                tuple_i_sub_sub = (0, 1)
                tuple_j_sub_sub = (1, 0)
                lst_i_sub.append(tuple_i_sub_sub)
                lst_j_sub.append(tuple_j_sub_sub)
                lst_i.append(lst_i_sub)
                lst_j.append(lst_j_sub)
    
                print("lst_i", lst_i)
                print("lst_j", lst_j)
    
                print("lst_i[index2][i][1]", lst_i[index2][i][1])
                print("lst_j[index2][i][1]", lst_j[index2][i][1])
    
                lst_c_sub_b = [lst_i[index2][i][1], lst_j[index2][i][1], c]
                lst_c_sub_b_count_0 = lst_c_sub_b.count(0)
                lst_c_sub_b_count_1 = lst_c_sub_b.count(1)
                if lst_c_sub_b_count_0 > lst_c_sub_b_count_1:
                    lst_c_sub.append(0)
                else:
                    lst_c_sub.append(1)
    
                lst_c_sub_a = [lst_i[index2][i][0], lst_j[index2][i][0], c]
                lst_c_sub_a_count_0 = lst_c_sub_a.count(0)
                lst_c_sub_a_count_1 = lst_c_sub_a.count(1)
                if lst_c_sub_a_count_0 > lst_c_sub_a_count_1:
                    lst_c_sub.append(0)
                else:
                    lst_c_sub.append(1)
    
                lst_c_sub = list(dict.fromkeys(lst_c_sub))
                tuple_c_sub = tuple(lst_c_sub)
                del lst_c_sub
                # lst_c_sub = [lst_c_sub]
                lst_c_sub_sub.append(tuple_c_sub)
    
                print("lst_c_sub_sub", lst_c_sub_sub)
    
                print("tuple_c_sub", tuple_c_sub)
                # sleep(30)
                # lst_c_sub[k] = lst_c_sub_sub
                print("lst_c_sub_sub", lst_c_sub_sub)
                # print("lst_c_sub[k]", lst_c_sub[k])
                # lst_c[k] = lst_c_sub
                lst_c.append(lst_c_sub_sub)
                # lstc = lst_c_sub
                print("lst_c0_", lst_c)
    
            else:
                pass
            k += 1
        print("lst_c_sub", lst_c_sub)
        #lst_c_sub = []
        lst_i_sub = []
        lst_j_sub = []
    
    
    
    print("lst_i", lst_i)
    print("lst_j", lst_j)
    print("lst_c", lst_c)



    • Partager sur Facebook
    • Partager sur Twitter
      11 mars 2024 à 23:09:50

      Si votre code est devenu illisible, c'est quand même osé de nous proposer de le relire à votre place. Pourquoi ne pas prendre l'initiative de le ré-écrire pus proprement?

      • Partager sur Facebook
      • Partager sur Twitter
        12 mars 2024 à 0:40:21

        Je retourne me coucher, je suis sûrement fatigué car je n'ai rien compris à ton probllème.

        Quelque part, ça ressemble étrangement à un XOR (OU exclusif), soit l'opérateur '^'.¸

        Reformules correctement ton problème.

        • Partager sur Facebook
        • Partager sur Twitter

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

          12 mars 2024 à 10:18:14

          mps a écrit:

          Si votre code est devenu illisible, c'est quand même osé de nous proposer de le relire à votre place. Pourquoi ne pas prendre l'initiative de le ré-écrire pus proprement?


          Bonjour,

          Merci pour votre message.

          Sachez qu'en général;je me débrouille tout seul pour gérer mon code lorsqu'il ne fonctionne pas comme je veux.

          là, j'ai évidemment déjà ré-écris depuis le début mon code.

          là, ce qui m'échappe, c'est pourquoi avec

          len(item2) = 0

          pourquoi sur la seconde boucle for:

          for i in range(0, len(item2)):

          le code, une fois exécutée, ne sort pas après le premier tour de boucle de

          for i in range(0, len(item2)):


          bien à vous @mps

          • Partager sur Facebook
          • Partager sur Twitter
            12 mars 2024 à 10:39:19

            Peut être à cause de la ligne 28 car une liste contenant un item de longueur nulle sera de longueur 1.

            >>> len([''])
            1
            >>>

            Pour le reste on écrit un code pour résoudre un problème! Non seulement vous ne prenez pas la peine de le décrire mais  le code qui a été produit ne permet pas de savoir ce qu'on a cherché à faire.

            • Partager sur Facebook
            • Partager sur Twitter
              12 mars 2024 à 11:17:00

              mps a écrit:

              Peut être à cause de la ligne 28 car une liste contenant un item de longueur nulle sera de longueur 1.

              >>> len([''])
              1
              >>>

              Pour le reste on écrit un code pour résoudre un problème! Non seulement vous ne prenez pas la peine de le décrire mais  le code qui a été produit ne permet pas de savoir ce qu'on a cherché à faire.


              Rebonjour @mps ,

              oui, je sais qu'une liste contenant un item de longueur nulle sera de longueur 1.

              lors du premier tour

              for index2, item2 in enumerate(lst_c_sub):

              item2 à pour valeur 0

              de ce fait, lors du passage dans la boucle:

              for i in range(0, len(item2)):

              il ne devrait exécuter le code dans le second for qu'une seule fois.

              hors, bien que len(item2) à pour valeur 1, il passe une deuxième fois dans le second for au lieu de sortir de ce ce for et iterer

              for index2, item2 in enumerate(lst_c_sub):

              D'autres part, j'ai expliqué (avant de coller mon code) dans le texte explicatif de mon premier message, ce que le code est censé faire.

              Peut-être n'ai-je pas été ien clair, auquel cas, je m'en excuse.

              Bien à vous @mps,


              • Partager sur Facebook
              • Partager sur Twitter
                12 mars 2024 à 11:58:15

                Tu n'expliques pas le but du programme, seulement son déroulement. Et ces explications sont aux moins aussi incompréhensibles que le code lui-même.

                Commences donc par nous expliquer quel problème doit résoudre le programme ou le morceau de programme que tu essayes de coder.

                -
                Edité par PasEnvie2 12 mars 2024 à 12:01:44

                • Partager sur Facebook
                • Partager sur Twitter
                  12 mars 2024 à 12:10:59

                  Je teste ton code, et il "fonctionne" (je n'ai pas regardé la cohérence ou si ça donne le bon résultat), juste erreur à la ligne 143 où on cherche à afficher lst_c_sub que l'on a supprimé plus haut dans le code (donc erreur normale). ça ne rerentre pas dans la boucle (on ne voit d'affichage "i 1" lors de l'exécution du script)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 mars 2024 à 13:04:58

                    moimeme10 a écrit:

                    hors, bien que len(item2) à pour valeur 1, il passe une deuxième fois dans le second for au lieu de sortir de ce ce for et iterer

                    for index2, item2 in enumerate(lst_c_sub):

                    Soit ce que vous décrivez est un bug dans l'interpréteur, soit on doit s'infliger la lecture de votre pensum pour expliquer ce que vous cherché à écrire...

                    moimeme10 a écrit:

                    D'autres part, j'ai expliqué (avant de coller mon code) dans le texte explicatif de mon premier message, ce que le code est censé faire.

                    Vous essayez d'expliquer ce que le code que vous avez écrit devrait faire mais pas pourquoi, pour résoudre quel problème vous avez choisi ces structures de données ou l'algo. que réalise le code.

                    Et commencer par une énormité comme "un tuple "t3" est défini à 0 au départ"... ça promet.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 mars 2024 à 14:13:57

                      PasEnvie2 a écrit:

                      Tu n'expliques pas le but du programme, seulement son déroulement. Et ces explications sont aux moins aussi incompréhensibles que le code lui-même.

                      Commences donc par nous expliquer quel problème doit résoudre le programme ou le morceau de programme que tu essayes de coder.

                      -
                      Edité par PasEnvie2 hier à 12:01

                      Et de préférence avec plusieurs exemples

                      • Valeurs des données en entrée
                      • Résultats attendus en sortie

                      Ps avec des identifiants charmants comme "item2" et "lst_j", on est sur de se paumer dans son propre code dès que ça dépasse 10 lignes. Alors 146 sans découpage en fonctions...

                      -
                      Edité par michelbillaud 13 mars 2024 à 14:21:55

                      • Partager sur Facebook
                      • Partager sur Twitter

                      problème de logique de code

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      • Editeur
                      • Markdown