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 :

Petit problème de logique à résoudre


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Par défaut Petit problème de logique à résoudre
    Bonjour à tous et meilleurs voeux,

    J'ai un petit problème de logique à résoudre en Python. Ce n'est sûrement pas compliqué mais je n'arrive pas à trouver la solution... Imaginons :

    J'ai une liste de personnes ayant été présents sur la journée de mardi. Par exemple :

    - Marcel : 10h00>12h00
    - Philippe : 09h00>11h00
    - David : 09h00>15h00


    Je souhaite savoir combien de personnes étaient présentes à chaque moment de la journée :

    Donc avec mon exemple :
    - De 09:00 à 10:00 : 2 personnes
    - De 10:00 à 11:00 : 3 personnes
    - De 11:00 à 12:00 : 2 personnes
    - De 12:00 à 15h00 : 1 personne


    MAIS QUELLE MÉTHODE UTILISER POUR Y ARRIVER ?

    Je vous serai reconnaissant de me donner un coup de pouce. Cela ne doit pas être bien sorcier....

    Merci !

    PS : J'ai utilisé, pour la lisibilité, des heures en mode texte, mais j'utiliserai bien-sûr des datetime pour les stocker et les traiter.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    ça dépend de la structure de la 'liste' ...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Par défaut
    Et bien, c'est au choix. Ce peut-être une liste ou un dictionnaire... du genre {"Marcel" : ("10:00", "12:00") } par exemple...

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà comment je ferais au plus simple:

    On résume l'occupation par une simple liste de plage horaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P = [[10,12],[9,11],[9,15]]
    Et à la question "combien de personnes y avaient-il à l'heure h?", par exemple ici h=10:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    h = 10
     
    c = 0  # =compteur
    for h1,h2 in P:
        if h>=h1 and h<h2:
            c += 1
     
    print "A", h, "heures, il y avait",c, "personne(s)"
    Ce qui donne bien tous les résultats que tu cites. (et il faut bien sûr remplacer les entiers par des datetime python).

    A noter que ça marche toujours si une personne est présente pendant plusieurs plages d'une même journée.

    A noter aussi qu'il est facile de fournir le nom des personnes présentes à l'heure h, si on les ajoute dans les listes des plages horaires. Ce qui donne, par exemple, le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    P = [["Marcel",10,12],["Philippe",9,11],["David",9,15]]
     
    h = 10
     
    c = 0
    n = []
    for nom,h1,h2 in P:
        if h>=h1 and h<h2:
            c += 1
            n.append(nom)
     
    print "A", h, "heures, il y avait",c, "personne(s), qui sont:",n
    Ce qui donne bien, pour h=10:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    A 10 heures, il y avait 3 personne(s), qui sont: ['Marcel', 'Philippe', 'David']
    Tyrtamos

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    ce serait y pas mieux ? :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c = sum( h1<=h<h2 for h1,h2 in P )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    n = [ nom for nom,h1,h2 in P if h1<=h<h2 ]
    c = len(n)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    Ahh les listes de compréhension...
    Mieux je sais pas, plus court surement...
    Ceci dit c'est généralement plus dificile a comprendre.
    D'ailleurs je voulais savoir, dans le cas général le programme tourne plus vite avec des boucles ou des listes de compréhension ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/04/2011, 11h55
  2. Un petit problème avec XML/HTML vous pouvez le résoudre
    Par rmouads dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 30/03/2010, 11h04
  3. Petit problème de logique
    Par deborah95 dans le forum Langage
    Réponses: 7
    Dernier message: 25/09/2009, 09h37
  4. petit problème à résoudre
    Par TibDoz dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 28/08/2009, 11h05
  5. Petit problème de logique...
    Par insomniak dans le forum C++
    Réponses: 15
    Dernier message: 31/10/2005, 20h13

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