IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Débogage de code Python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Etudiant
    Inscrit en
    Octobre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 2
    Par défaut Débogage de code Python
    Bonjour,

    Voila ça va faire maintenant plus d'une semaine que je suis sur ce code qui ne m'affiche pas ce que je souhaite

    J'ai un dictionnaire qui se présente sous cette forme et que j'ai remplie à partir d'un fichier f :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { 'banana': 'sp_345', 'apple': 'ap_456', 'pear': 'pe_367', ...}
    Dans un fichier en parallèle j'ai différentes lignes avec seulement les valeurs du dictionnaire présentes (qui représente les numéros de lots) séparés par des tabulations. Ces valeurs ont un underscore qui suit + des caractères alphanumériques. J'ai du au préalable récupérer les lignes qui correspondait à mon dictionnaire pour éviter un traitement plus long...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ap_456_6254  sp_345_6547 s5678990 u7788990 a1234 sp_345_4132 ...
    pe_367_4543  ap_456_54356 s567888 t6678890 u89088098 r6576868 ...
    s78987 t345678 ap_456_54356 g56789 o3456789 f345678 ...
    ...
    Les valeurs qui se présente comme "g56789" ne m'interesse pas

    Ce que je souhaite c'est compter le nombre de fois, pour 2 clés différentes, qu'ils apparaissent tout les deux sur la même ligne

    Par exemple, les valeurs des clés banana et apple apparaissent sur la ligne 1 donc peut importe le nombre de fois qu'elles apparaissent elle sont quand même présente, et donc on compte 1 ligne en commun, et je souhaite le faire sur toutes les lignes du fichier

    Pour cela j'ai ajouté le pattern '_.' derrière chaque valeur pour ensuite faire une regex avec la fonction re.search

    Voilà mon script (qui a aussi bénéficié d'une aide extérieur) :

    f2 = open("merchandise","r")
    for li in f2.readlines():
    li = li.rstrip("\n")
    pattern_num_id = re.search(num_lot+'_\w+', li)
    if pattern_num_id :
    list_fruit = li
    for key1, key2 in product(mydico,mydico):
    if key1 >= key2:
    continue
    counter[key1, key2] = 0
    k1 = k2 = False
    for el in li:
    match_key1 = re.search(mydico[key1]+'_\w+', li)
    match_key2 = re.search(mydico[key2]+'_\w+', li)
    if match_key1 :
    k1 = True
    elif match_key2 :
    k2 = True
    if k1 and k2:
    counter[key1, key2] += 1
    break
    for key, val in counter.items():
    print(*key, val)

    f.close()
    f2.close()[/CODE]

    Le soucis c'est que c'est terriblement lent d'une part.... et d'autre part il m'affiche bien les clé 2 à 2 mais que avec un compteur de 0....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Banana apple 0
    Banana pear 0
    Banana .... 0
    Apple Banana 0
    Apple Pear 0
    Apple ... 0
    Si quelqu'un peut m'aider ^^'

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par Lollipop75 Voir le message
    Si quelqu'un peut m'aider ^^'
    Dans ce genre de problème, il faut d'abord traiter une ligne qui ressemble à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ap_456_6254  sp_345_6547 s5678990 u7788990 a1234 sp_345_4132 ..
    et tester que çà retourne les bons résultats dans différents cas.

    Après pour compter le nombre d’occurrences de sp_345 ou de ap_456, la méthode .count appliquée à la chaine de caractères devrait suffire.
    note: si vous utilisez des regexp, utiliser re.sub paraît faire du sens mais c'est compliqué.

    Ce qui vous permet de partir d'un code plus petit (plus facile à lire) et pas besoin de fichiers dans un premier temps pour vérifier que le comptage de... dans une chaine de caractères fonctionne.

    Mais avant de coder, il faut décrire un algorithme: le code ne faisant que le traduire.
    Ce qui est problématique dans votre code car on ne voit pas trop comment les instructions que vous avez codé nous amènent au résultat (il faut peut être décrire cet algorithme...).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Femme Profil pro
    Etudiant
    Inscrit en
    Octobre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 2
    Par défaut
    Merci wiztricks pour ta réponse,

    A vrai dire je n'ai pas non plus vraiment compris l’algorithme codé ici, comme je l'ai mentionné on m'a aidé à produire ce code
    Je l'ai tester sur une seule ligne et je retrouve toujours 0 en résultat....
    Après s'il y a une manière plus simple de le coder ça serait plus pratique pour comprendre

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par Lollipop75 Voir le message
    Après s'il y a une manière plus simple de le coder ça serait plus pratique pour comprendre
    Ban avant de coder, il faut décrire l'algorithme i.e les opérations à effectuer pour sortir le résultat attendu de chaque ligne. Et çà, c'est prendre une feuille de papier, et à partir d'une ligne d'exemple, déjà écrire le résultat à obtenir (ce que vous voulez) puis décrire les étapes qui vous permettent de l'obtenir.

    Et tant que vous n'avez pas une idée claire de çà, pas la peine de partir à coder: vous ne savez pas encore ce que vous voulez réaliser!

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [Bouml]modifier le générateur de code python
    Par cedrix57 dans le forum BOUML
    Réponses: 4
    Dernier message: 16/03/2009, 22h12
  2. Réponses: 3
    Dernier message: 08/03/2009, 10h50
  3. conversion d'indentation dans un code python
    Par KINENVEU dans le forum Général Python
    Réponses: 2
    Dernier message: 26/02/2009, 04h04
  4. Réponses: 1
    Dernier message: 24/05/2008, 17h04
  5. [SWIG] dialogue entre code C et code python
    Par dmichel dans le forum Interfaçage autre langage
    Réponses: 12
    Dernier message: 19/12/2007, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo