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 :

Besoin d'aide avec un exercice de python sur les listes.


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2020
    Messages : 4
    Points : 7
    Points
    7
    Par défaut Besoin d'aide avec un exercice de python sur les listes.
    Bonjour,

    Je suis étudiant qui débute sur Python et je souhaiterais savoir si vous pouvez m'aider avec un exercice sur lequel je suis bloqué depuis deux jours

    Ici l'énoncé :

    Ecrire un programme qui attend une liste L et qui affiche les effectifs cumulés des différents éléments de la liste sous forme de bâtons constitués d'étoiles.

    Par exemple, si L = [13 , 15 , 12 , 17 , 15 , 18 , 15 , 17 , 13 , 12 , 15 ] , le programme affiche :

    **12
    **13
    ****15
    **17
    *18

    On affichera les éléments de la liste dans l'ordre croissant.

    On entrera successivement :
    le nombre de valeurs de la liste,
    les valeurs de la liste.


    J'ai bien compris la notion des effectifs cumulés mais je n'arrive pas à visualiser l'algo qui permettrait d'afficher les éléments de la liste comme dans l'exemple.

    Je vous partage mon code qui malheureusement n'est pas complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    li = [] #Création d'une liste vide 
     
    number = int(input("Indiquez nombre de valeurs : ")) #Définit la taille de la liste
     
    for i in range(0, number):
      val = int(input("Indiquez les valeurs de la liste : "))
      li.append(val) # J'ajoute les valeurs dans la liste "li"
     
    li.sort() # Je tri la liste 
    print(li)
    Pourriez-vous m'aider s'il vous plait ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Peut-être avec un dictionnaire qui ajouterait 1 à chaque clé lorsque cette clé est rencontrée ?
    Pas d'aide par mp.

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Pour afficher les étoiles pour chaque nombre il faudrait compter le nombre d’occurrence de chaque nombre...
    Il y a sans doute plusieurs manières de faire...

    Personnellement cela me fait penser au problème qui consiste à compter le nombre d’occurrence de chaque mot d'un texte, le principe est le même sauf qu'ici les mots sont des nombres et le texte est une liste...

    J'avais ouvert un fil sur cela...

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2020
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Peut-être avec un dictionnaire qui ajouterait 1 à chaque clé lorsque cette clé est rencontrée ?
    Bonsoir,

    Merci pour votre réponse.

    Je ne peux utiliser les dictionnaires car nous n'avons pas encore vu cette notion.

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    J'avais ouvert un fil sur cela...
    J'ai retrouvé le lien : Compter le nombre d’occurrences de chaque mot d'un texte.

    Cela utilise l'idée que Marco056 a mentionnée.

  6. #6
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Azixp92 Voir le message
    Je ne peux utiliser les dictionnaires car nous n'avons pas encore vu cette notion.
    Ah ok, dans ce cas on peut utiliser deux listes...

  7. #7
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Oui, une première avec les éléments, une deuxième avec le nombre des éléments de la première. C'est un peu plus chaud.
    Pas d'aide par mp.

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Voici un exemple de code pour compter le nombre d’occurrences de chaque nombre de la liste :

    Code python : 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
    lst = [13, 15, 12, 17, 15, 18, 15, 17, 13, 12, 15]
    lst.sort()
    lst_nombres = []
    lst_nbr_occurence = []
     
    for nbr in lst:    
        if nbr not in lst_nombres:
            lst_nombres.append(nbr)
            lst_nbr_occurence.append(1)
        else:
            indice = lst_nombres.index(nbr)
            lst_nbr_occurence[indice] += 1
     
    # Affichage :
     
    for indice in range(len(lst_nombres)):
        print("Le nombre d’occurrences du nombre:", lst_nombres[indice], "est", lst_nbr_occurence[indice])

    On peut probablement optimiser...

    A toi de l'adapter pour faire la suite...
    Ou bien utiliser une autre méthode...

    Citation Envoyé par marco056 Voir le message
    Oui, une première avec les éléments, une deuxième avec le nombre des éléments de la première. C'est un peu plus chaud.
    Oui c'est comme ça que j'ai fait...

  9. #9
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Encore plus long :
    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
    list_orig = [13, 15, 12, 17, 15, 18, 15, 17, 13, 12, 15]
    list_orig.sort()
    print(list_orig)
     
     
    list_elem=[]
    nb_elem=[]
    for indic,elem in enumerate(list_orig):
        if elem not in list_elem:
            list_elem.append(elem)
            nb_elem.append(1)
        else:
            nb_elem[-1]+=1
     
    print(list_elem,nb_elem)
    for el1,el2 in zip(list_elem,nb_elem):
        print(el2*'*', '\t->', el1)
    Pas d'aide par mp.

  10. #10
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Encore plus long :
    Il me semble plus court...
    J'avais vu enumerate mais je me suis dis que si les dico n'ont pas été vu alors il risque d'en être de même pour enumerate...

    Voici une amélioration (utilisant une des astuces du code de Marco056) du code que j'ai posté :

    Code python : 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
    lst = [13, 15, 12, 17, 15, 18, 15, 17, 13, 12, 15]
    lst.sort()
    lst_nombres = []
    lst_nbr_occurence = []
     
    for nbr in lst:
        if nbr not in lst_nombres:
            lst_nombres.append(nbr)
            lst_nbr_occurence.append(1)
        else:        
            lst_nbr_occurence[-1] += 1
     
    # Affichage :
     
    for indice in range(len(lst_nombres)):
        print("Le nombre d’occurrences du nombre:", lst_nombres[indice], "est", lst_nbr_occurence[indice])

    Plus besoin de la fonction index donc plus rapide,plus court et plus simple que le premier code que j'ai posté...

  11. #11
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    En fait mon enumerate ne sert à rien.
    Pas d'aide par mp.

  12. #12
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par marco056 Voir le message
    En fait mon enumerate ne sert à rien.
    Ouais je m'en suis rendu compte après avoir compris l'astuce comme quoi on a pas besoin de la fonction index, il suffit d'incrémenter le dernier élément comme tu l'as fait... Ici ça marche car la liste a été triée au début...

  13. #13
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    utiliser collections.Counter serait de la triche j'imagine ?

  14. #14
    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
    Salut,

    Citation Envoyé par Azixp92 Voir le message
    Pourriez-vous m'aider s'il vous plait ?
    Si le but est de faire l'exercice avec un Python "minimal", on part de la liste L et on cherche le maximum:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> L = [13 , 15 , 12 , 17 , 15 , 15 , 17 , 13 , 12 , 15, 18]
    >>> m = L[0]
    >>> for i in range(1, len(L)):
    ...     if L[i] > m:
    ...         m = L[i]
    ...
    >>> m
    18
    à partir de la on fabrique la liste C(umuls) qui contient une "case" pour chaque nombre dans L et on les compte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> C = [0] * (m+1)
    >>> for i in range(len(L)):
    ...     C[L[i]] += 1
    ...
    >>> C
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 4, 0, 2, 1]
    >>>
    Puis on affiche le tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> for i in range(len(C)):
    ...     c = C[i]
    ...     if c > 0:
    ...         print('*' * c, i)
    ...
    ** 12
    ** 13
    **** 15
    ** 17
    * 18
    >>>
    Si on trie la liste, on obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> L.sort()
    >>> L
    [12, 12, 13, 13, 15, 15, 15, 15, 17, 17, 18]
    >>>
    et la possibilité d'obtenir le résultat (affichage) plus simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    i = 0
    n = L[i]
    for e in L[1:]:
         print('*', end='')
         if e != n:
            print(' ', n)
            n = e
    print('*', n)
    Après, c'est un exercice "pour apprendre" à programmer, donc le problème reste assez simple pour vous permettre de réfléchir à quoi coder avec crayon et feuille de papier et de vous frotter aux joies de la mise au point d'un "programme".

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

Discussions similaires

  1. Besoin d'aide avec Regexp::Assemble
    Par mobscene dans le forum Modules
    Réponses: 5
    Dernier message: 11/04/2007, 12h39
  2. [ASA] J'ai besoin d'aide avec sybase et vb6 svp !!
    Par tibo830 dans le forum SQL Anywhere
    Réponses: 7
    Dernier message: 12/05/2006, 10h09
  3. Besoin d'aide avec TinyXML
    Par Clad3 dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 15/08/2005, 18h20
  4. Réponses: 2
    Dernier message: 29/08/2003, 17h52
  5. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29

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