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 :

Comparer un dictionnaire à deux dimensions à un dictionnaire simple


Sujet :

Python

  1. #41
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Amniote Voir le message
    les chemins restent bien les mêmes ? je ne vois pas en quoi cela bloque l'algorithme...
    Cela ne le bloque en rien, c'est le résultat qui est différent.

    Après si vous voulez comprendre pourquoi votre code fait çà, il faut avoir la patience de tracer les différentes étapes réalisées par le code sur une feuille de papier. C'est laborieux, j'en conviens mais c'est le seul moyen pour apprendre à maîtriser ce genre de code.

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

  2. #42
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 61
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Cela ne le bloque en rien, c'est le résultat qui est différent.

    Après si vous voulez comprendre pourquoi votre code fait çà, il faut avoir la patience de tracer les différentes étapes réalisées par le code sur une feuille de papier. C'est laborieux, j'en conviens mais c'est le seul moyen pour apprendre à maîtriser ce genre de code.

    - W
    J'ai continué mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    import sys
    sys.setrecursionlimit(1000000)
    from collections import defaultdict
    dd = defaultdict(set)
    L=[]
     
    proteine1 = (input("Enter the first protein in the chain : "))
    proteine2 = (input("Enter the last protein in the chain : "))
     
    with open("chaines fictives.txt","r") as f1:
    	for lignes in f1:
    		#if lignes.startswith('9606'):
    		lignes=lignes.rstrip('\n').split(" ")
    		prot1=lignes[0]
    		prot2=lignes[1]
    		dd[prot1].add(prot2)
    	print(dd)
     
    def chain(proteine1, proteine2, maillon, pathway, limite=10): 
    	next_= maillon.get(pathway[-1])
     
    	if len(pathway) < limite  :
    		for m in next_:
    			if m not in pathway:
     
    				if m != proteine2:
    					yield from chain(proteine1, proteine2, maillon, pathway + [m])
     
    				if m==proteine2 and pathway[0]==proteine1:
    						pathway.append(m)
    						yield pathway
     
    for k in proteine1:
    	for z in chain(proteine1,proteine2, dd, pathway = [k]):
    		if z not in L:
    			L.append(z)
     
    for z in L:
    	min_len=min(len(z) for z in L)
    	mins=[z for z in L if len(z) == min_len]
    print("")
    print(L)
    print("")
    for chaine in mins:
    	print(' '.join(chaine))
    Il fonctionne très bien sur mon fichier test :

    1 4
    4 1
    1 6
    6 1
    1 66
    66 1
    4 9
    9 4
    6 9
    6 66
    66 6
    9 6
    9 33
    33 9
    9 66
    66 9
    Cependant lorsque je change les nombres par des vrais noms de protéines:

    INS TRA
    TRA INS
    INS CLO
    CLO INS
    INS GLUS
    GLUS INS
    TRA GHG
    GHG TRA
    CLO GHG
    CLO GLUS
    GLUS CLO
    GHG CLO
    GHG BBB
    BBB GHG
    GHG GLUS
    GLUS GHG
    le message d'erreur suivant s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Enter the first protein in the chain : INS
    Enter the last protein in the chain : TRA
     
    defaultdict(<class 'set'>, {'INS': {'TRA', 'CLO', 'GLUS'}, 'TRA': {'GHG', 'INS'}, 'CLO': {'GHG', 'GLUS', 'INS'}, 'GLUS': {'GHG', 'CLO', 'INS'}, 'GHG': {'TRA', 'CLO', 'GLUS', 'BBB'}, 'BBB': {'GHG'}})
    Traceback (most recent call last):
     
      File "taillemin.py", line 34, in <module>
        for z in chain(proteine1,proteine2, dd, pathway = [k]):
      File "taillemin.py", line 23, in chain
        for m in next_:
    TypeError: 'NoneType' object is not iterable
    A quoi cela est-il dû ? Comment puis-je corriger ça ?

    Merci

  3. #43
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Amniote Voir le message
    A quoi cela est-il du ? Comment puis-je corriger ça ?
    Le message d'erreur dit que next_ est None.

    Et comme cette variable a été construite avec next_= maillon.get(pathway[-1])
    , la commande magique "print" devrait afficher ce qu'est pathway[-1] et vous suggérer que vous avez peut être fait une bourde dans les paramètres d'appel à cette fonction.

    Et réaliser qu'une erreur ne se manifeste pas toujours immédiatement, d'où la nécessité d'une certaine rigueur et d'un apprentissage à la programmation pour savoir remonter à la cause de la cause de la cause...

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

  4. #44
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 61
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Le message d'erreur dit que next_ est None.

    Et comme cette variable a été construite avec next_= maillon.get(pathway[-1])
    , la commande magique "print" devrait afficher ce qu'est pathway[-1] et vous suggérer que vous avez peut être fait une bourde dans les paramètres d'appel à cette fonction.

    Et réaliser qu'une erreur ne se manifeste pas toujours immédiatement, d'où la nécessité d'une certaine rigueur et d'un apprentissage à la programmation pour remonter à la cause de la cause de la cause...

    - W
    J'ai l'impression que le "get" va prendre uniquement la première lettre de la protéine.
    Cela viens du "get" je suppose. Il faut donc que je trouve une autre fonction pour remplacer le get ?

  5. #45
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Amniote Voir le message
    Cela viens du "get" je suppose. Il faut donc que je trouve une autre fonction pour remplacer le get ?
    Comment çà vous supposez? Vous avez la possibilité de le vérifier en affichant avec "print" le contenu de pathway, pathway[-1]... Et juger de la pertinence de votre hypothèse.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/02/2013, 11h02
  2. Etude comparative de dictionnaires
    Par michel42 dans le forum Général Python
    Réponses: 5
    Dernier message: 15/03/2012, 14h16
  3. Réponses: 5
    Dernier message: 17/06/2010, 14h21
  4. Tableau à deux dimensions : comparer des valeurs
    Par johnny3 dans le forum Langage
    Réponses: 0
    Dernier message: 29/04/2010, 11h49
  5. comparer deux objets pas si simple ?
    Par StIcK dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2006, 20h55

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