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

Exercices Python Discussion :

probleme de dictionnaire


Sujet :

Exercices Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 31
    Points : 27
    Points
    27
    Par défaut probleme de dictionnaire
    bonsoir,

    voila j'ai un problème de compréhension de dictionnaire pour l'exercice ci-joint.
    voici ce que j'ai fais pour la fonction compte_2_lettres():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ex='ACCTAGCCCTA'
    base= {}
    cle=0
    cmpt=1
    for i in range(0,len(ex)-1):
      cle=ex[i:2+i]
      if cle in base:
        cmpt+=1
      else:
        cmpt=1
      base[cle]=cmpt

    Nom : exercice.png
Affichages : 120
Taille : 163,1 Ko

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ex='ACCTAGCCCTA'
    base= {}
    cle=0
    cle1=0
    for i in range(0,len(ex)-1):
      cle=ex[i:2+i]
      cmpt=0
      for j in range(0,len(ex)-1):
        cle1=ex[j:2+j]
        if cle==cle1:
          cmpt+=1
      base[cle]=cmpt
    j'ai développé se code pour la fonction 2 lettres, je sais pas si elle est bonne ?

  3. #3
    Rédacteur
    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    février 2009
    Messages
    6 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2009
    Messages : 6 386
    Points : 23 020
    Points
    23 020
    Billets dans le blog
    116
    Par défaut


    Citation Envoyé par matlab31 Voir le message
    j'ai développé se code pour la fonction 2 lettres, je sais pas si elle est bonne ?
    Non ! Pour vérifier, faites-le à la main en utilisant un papier et un crayon.

    Conseil : revoir le fonctionnement de range()

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 546
    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 : 17 546
    Points : 30 273
    Points
    30 273
    Par défaut
    Salut,

    Découper 'ACCTAGCCCTA' en tranches de 2 caractères pour compter les occurrences de... chaque tranche avec un dictionnaire, c'est composer 2 opérations: découpage et comptage.... que vous avez tout intérêt à décomposer pour vérifier qu'elles fonctionnent avant d'essayer de les combiner.

    Pour vérifier que votre découpage fonctionne, il est facile de faire un print:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(0,len(ex)-1):
      cle=ex[i:2+i]
      print(cle)
    Pour les dictionnaires, c'est n peu plus compliqué mais vous pouvez lancer l'interpréteur Python et imaginez ce que devra faire le code.
    En démarrant avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> d = {}
    >>> cle= 'AA'
    'AA' n'est pas dans le dictionnaire, si c'est la première fois qu'on le voit, d[cle] = 1 et on obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> d[cle] = 1
    >>> d
    {'AA': 1}
    >>>
    Si la tranche de 2 caractères suivants est encore 'AA', il faudra ajouter 1 au nombre de fois qu'on l'a déjà vu pour obtenir d = {'AA': 2}
    Après vous pouvez imaginez que la tranche suivante soit 'BB' et voir dans ce cas quelles sont les instructions à exécuter pour obtenir d = {'AA': 2, 'BB' : 1}
    Une fois que vous aurez compris comment faire les itérations pas à pas pour obtenir le résultat attendu, vous pourrez essayer de le coder.

    Et tant que vous n'essayez pas de faire ce travail là, vous ne comprendrez pas comment utiliser un dictionnaire pour faire ce comptage.... Et pas la peine d'essayer toutes les combinaisons d'instructions qui vous passent par la tête avant d'avoir essayé de comprendre.

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

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 494
    Points : 3 226
    Points
    3 226
    Par défaut
    Citation Envoyé par matlab31 Voir le message
    j'ai développé se code pour la fonction 2 lettres, je sais pas si elle est bonne ?
    Bah en testant ton code on obtient ceci :
    {'AC': 1, 'CC': 3, 'CT': 4, 'TA': 5, 'AG': 1, 'GC': 1}...

    Ce qui n'est pas le résultat attendu...

    Mais tu n'es pas loin... Ce fil pourrait t'intéresser : Compter le nombre d’occurrences de chaque mot d'un texte.

    Voici une petite correction de ton code (essaye de comprendre avant, lis le EDIT ci-dessous...) :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ex = 'ACCTAGCCCTA'
    base = {}
    for i in range(0, len(ex)-1):
        cle = ex[i:2+i]
        print(cle)
        if cle in base:
            base[cle] += 1
        else:
            base[cle] = 1
     
    print(base)

    On obtient bien : {'AC': 1, 'CC': 3, 'CT': 2, 'TA': 2, 'AG': 1, 'GC': 1}...



    EDIT : Ah bah je n'avais pas vu la réponse de wiztricks (je n'avais pas rafraichi la page), du coup essaye d'abord (avant de regarder le code ci-dessus) de corriger ton code avec les explications de wiztricks plus le lien que je t'ai donné ci-dessus (qui contient un exemple d'application)...

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    novembre 2010
    Messages
    2 973
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 973
    Points : 8 228
    Points
    8 228
    Par défaut
    salut,

    pour l’anecdote, le découpage via une regex à chevauchements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> re.findall(r'(?=(..))', 'ACCTAGCCCTA')
    ['AC', 'CC', 'CT', 'TA', 'AG', 'GC', 'CC', 'CC', 'CT', 'TA']

  7. #7
    Rédacteur
    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    février 2009
    Messages
    6 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2009
    Messages : 6 386
    Points : 23 020
    Points
    23 020
    Billets dans le blog
    116
    Par défaut
    Si la question n'est pas un simple découpage d'un brin d'ADN en mots de n lettres mais la recherche de tous les mots de n lettres que l'on peut former à partir du contenu du brin, il s'agit de déterminer le nombre de combinaisons possibles.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    #! python3
    # coding: utf-8
     
    from itertools import combinations
     
    """ Combinaisons 2 lettres """
     
    list_comb = list(combinations('ACCTAGCCCTA', 2))
     
    list_mots = []
     
    for t in list_comb:
        list_mots.append(t[0] + t[1])
     
    dict_mots = {}
     
    for mot in list_mots:
        if mot not in dict_mots:
            dict_mots[mot] = list_mots.count(mot)
     
    print(dict_mots)
     
    """
    {
        'AC': 8, 
        'AT': 3, 
        'AA': 3, 
        'AG': 2, 
        'CC': 10, 
        'CT': 7, 
        'CA': 7, 
        'CG': 2, 
        'TA': 3, 
        'TG': 1, 
        'TC': 3, 
        'TT': 1, 
        'GC': 3, 
        'GT': 1, 
        'GA': 1
    }
    """
     
     
    """ Combinaisons 3 lettres """
     
    list_comb = list(combinations('ACCTAGCCCTA', 3))
     
    list_mots = []
     
    for t in list_comb:
        list_mots.append(t[0] + t[1] + t[2])
     
    dict_mots = {}
     
    for mot in list_mots:
        if mot not in dict_mots:
            dict_mots[mot] = list_mots.count(mot)
     
    print(dict_mots)
     
    """
    {
        'ACC': 13, 
        'ACT': 10, 
        'ACA': 10, 
        'ACG': 2, 
        'ATA': 4, 
        'ATG': 1, 
        'ATC': 3, 
        'ATT': 1, 
        'AAG': 1, 
        'AAC': 3, 
        'AAT': 1, 
        'AAA': 1, 
        'AGC': 6, 
        'AGT': 2, 
        'AGA': 2, 
        'CCT': 11, 
        'CCA': 11, 
        'CCG': 1, 
        'CCC': 10, 
        'CTA': 9, 
        'CTG': 2, 
        'CTC': 6, 
        'CTT': 2, 
        'CAG': 2, 
        'CAC': 6, 
        'CAT': 2, 
        'CAA': 2, 
        'CGC': 6, 
        'CGT': 2, 
        'CGA': 2, 
        'TAG': 1, 
        'TAC': 3, 
        'TAT': 1, 
        'TAA': 1, 
        'TGC': 3, 
        'TGT': 1, 
        'TGA': 1, 
        'TCC': 3, 
        'TCT': 3, 
        'TCA': 3, 
        'TTA': 1, 
        'GCC': 3, 
        'GCT': 3, 
        'GCA': 3, 
        'GTA': 1
    }
    """

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. [XL2010] Probleme création dictionnaire
    Par rsane dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 22/10/2015, 10h14
  2. probleme avec nombre d'elements dans un dictionnaire
    Par lps02 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/05/2012, 21h21
  3. probleme concordance dictionnaire et liste
    Par shadow19c dans le forum Général Python
    Réponses: 15
    Dernier message: 24/02/2011, 17h24
  4. Dictionnaires de resources déportés : probleme
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 11/05/2009, 22h56
  5. Probleme sujet Dictionnaire T9
    Par stansoad0108 dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2007, 16h43

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