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 :

Emplois du temps


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut Emplois du temps
    Bonjour à tous,
    je suis en train de développez un programme de gestion d'emploi du temps et je me trouve confronter à un problème apparemment simple, mais qui en réalité m'agace.
    En effet, après avoir récuperer les données de la bases, je doid les présenter sous une certaine forme dans un tableau du genre:
    Nom : Emplois du temps.png
Affichages : 1550
Taille : 66,5 Ko

    Après réflexion et codage, je récupère les données sous la forme [('Algorithmique 202', '08:00', '10:00', 'Mardi'), ('Algorithmique 202', '09:00', '10:00', 'Mardi'),... à partir des quelles j'extrai:
    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
     
                        for rw in data_rows:
                            tranch = f'{str(rw[1])} - {str(rw[2])}'
                            liste_matieres.append(rw[0])
                            liste_matieres_par_tranche.append(f"'{rw[0]}','{str(rw[1])} - {str(rw[2])}'")
                            liste_matieres_par_tranche_par_jour.append(f'("{rw[0]}","{tranch}","{str(rw[3])}")')
                            if tranch not in liste_tranche_horaire:
                                liste_tranche_horaire.append(f'{str(rw[1])} - {str(rw[2])}')
     
                       # Un test sur chaque élément:
                        print("liste_matieres", liste_matieres)
                        print("liste_tranche_horaire", liste_tranche_horaire)
                        print("liste_matieres_par_tranche", liste_matieres_par_tranche)
                        print("liste_matieres_par_tranche_par_jour", liste_matieres_par_tranche_par_jour)
                        # Me donne:
                        # liste_matieres ['Algo-101', 'Algo-101', 'Algo-101', ....']
                        # liste_tranche_horaire ['08:00 - 09:00', '09:00 - 10:00', ..., '17:00 - 18:00']
                        # liste_matieres_par_tranche ["'Algo-101','08:00 - 09:00'", "'Algo-101','09:00 - 10:00'", "'Algo-101','10:00 - 11:00'", "'Math-101','11:00 - 12:00'", ..., "'PYP-101','11:00 - 12:00'"]
                        # liste_matieres_par_tranche_par_jour ['("Algo-101","08:00 - 09:00","Mardi")', '("Algo-101","09:00 - 10:00","Mardi")', '("Algo-101","10:00 - 11:00","Mardi")', '("Algorithmique 202","11:00 - 12:00","Mardi")', '("PYP-101","08:00 - 09:00","Mercredi")', ..., '("PYP-101","11:00 - 12:00","Lundi")']
    Depuis lors je me mélange les pédales et je souhaite avoir un coup de main sur la meilleure approche.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Vous vous mélangez les pédales dans quoi ? Dans la structure de données elle meme ? Ou en essayant d'en faire qqch ?
    D'ailleurs votre poste initial, ne dit pas quel est votre besoin. Interroger une base de données d'emplois du temps ? Construire des emplois du temps ? Avoir aussi les profs ? Les salles ?

    Toutes ces questions là guident le choix de la structure de votre base de données.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Vous vous mélangez les pédales dans quoi ? Dans la structure de données elle meme ? Ou en essayant d'en faire qqch ?
    Je veux en faire quelque chose comme indiqué sur l'image (c'est un emploi du temps)
    D'ailleurs votre poste initial, ne dit pas quel est votre besoin.
    Je veux générer l'emploi du temps tel qu'indiquer sur l'image.

    Interroger une base de données d'emplois du temps ? Construire des emplois du temps ? Avoir aussi les profs ? Les salles ?
    la base de données existe déjà et là n'est pas le problème. Je veux juste avoir le tableau en image à partir des données que j'ai donné dans le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # liste_matieres ['Algo-101', 'Algo-101', 'Algo-101', ....']
                        # liste_tranche_horaire ['08:00 - 09:00', '09:00 - 10:00', ..., '17:00 - 18:00']
                        # liste_matieres_par_tranche ["'Algo-101','08:00 - 09:00'", "'Algo-101','09:00 - 10:00'", "'Algo-101','10:00 - 11:00'", "'Math-101','11:00 - 12:00'", ..., "'PYP-101','11:00 - 12:00'"]
                        # liste_matieres_par_tranche_par_jour ['("Algo-101","08:00 - 09:00","Mardi")', '("Algo-101","09:00 - 10:00","Mardi")', '("Algo-101","10:00 - 11:00","Mardi")', '("Algorithmique 202","11:00 - 12:00","Mardi")', '("PYP-101","08:00 - 09:00","Mercredi")', ..., '("PYP-101","11:00 - 12:00","Lundi")']
    Je ne gère ni les profs, ni les salles dans mon cas.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Vous pouvez étudier ce code ci, qui vous permet d'afficher correctement vos données

    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
    data = [("Algo-101","08:00 - 09:00","Mardi"), ("Algo-101","09:00 - 10:00","Mardi"), ("Algo-101","10:00 - 11:00","Mardi"), ("Algorithmique 202","11:00 - 12:00","Mardi"), ("PYP-101","08:00 - 09:00","Mercredi"), ("PYP-101","11:00 - 12:00","Lundi")]
     
    jours = ["Lundi","Mardi","Mercredi"]
    liste_tranche_horaire = ['08:00 - 09:00', '09:00 - 10:00', '10:00 - 11:00', '11:00 - 12:00', '17:00 - 18:00']
     
    motif = '{:^14}'*len(jours)
    emploi_du_temps= [ ['' for _ in range(len(jours))]
                        for j in range(len(liste_tranche_horaire)) ]
     
    for matiere,creneau,jour in data :
        i=liste_tranche_horaire.index(creneau)
        j=jours.index(jour)
        emploi_du_temps[i][j]=matiere
     
    print('{:^14}'.format("Jours"), motif.format(*jours))
    for creneau,line in zip(liste_tranche_horaire, emploi_du_temps) :
        print('{:^14}'.format(creneau), motif.format(*line))
    Notez que je pars d'une donnée qui est quasiment la même que votre liste_matieres_par_tranche_par_jour. La seule différence c'est que chez vous c'est une liste de string, alors que chez moi je conserve plus de structure : c'est une liste de tuple de string.

    Votre structure (de laquelle vous pourriez tirer qqch, mais plus difficilement):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['("a1","b1")', '("a2","b2")']
    Ma structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [("a1","b1"), ("a2","b2")]
    (observez bien la différence)


    De là après je construit le tableau à 2 dimensions emploi_du_temps, que j'affiche ensuite en le formattant comme il faut pour qu'il soit joli et bien aligné.

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    En fait je m'était rendu compte de ma structure de données que j'ai modifier pour avoir la même structure que vous lg_53. Pour le reste je m'y met et je vous fait un retour sous peu. Merci beaucoup.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Vous pouvez étudier ce code ci, qui vous permet d'afficher correctement vos données

    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
    data = [("Algo-101","08:00 - 09:00","Mardi"), ("Algo-101","09:00 - 10:00","Mardi"), ("Algo-101","10:00 - 11:00","Mardi"), ("Algorithmique 202","11:00 - 12:00","Mardi"), ("PYP-101","08:00 - 09:00","Mercredi"), ("PYP-101","11:00 - 12:00","Lundi")]
     
    jours = ["Lundi","Mardi","Mercredi"]
    liste_tranche_horaire = ['08:00 - 09:00', '09:00 - 10:00', '10:00 - 11:00', '11:00 - 12:00', '17:00 - 18:00']
     
    motif = '{:^14}'*len(jours)
    emploi_du_temps= [ ['' for _ in range(len(jours))]
                        for j in range(len(liste_tranche_horaire)) ]
     
    for matiere,creneau,jour in data :
        i=liste_tranche_horaire.index(creneau)
        j=jours.index(jour)
        emploi_du_temps[i][j]=matiere
     
    print('{:^14}'.format("Jours"), motif.format(*jours))
    for creneau,line in zip(liste_tranche_horaire, emploi_du_temps) :
        print('{:^14}'.format(creneau), motif.format(*line))
    Notez que je pars d'une donnée qui est quasiment la même que votre liste_matieres_par_tranche_par_jour. La seule différence c'est que chez vous c'est une liste de string, alors que chez moi je conserve plus de structure : c'est une liste de tuple de string.

    Votre structure (de laquelle vous pourriez tirer qqch, mais plus difficilement):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['("a1","b1")', '("a2","b2")']
    Ma structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [("a1","b1"), ("a2","b2")]
    (observez bien la différence)


    De là après je construit le tableau à 2 dimensions emploi_du_temps, que j'affiche ensuite en le formattant comme il faut pour qu'il soit joli et bien aligné.



    Ton code est juste parfait. Merci infiniment. Je nettoye le miens et partage.

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    En appliquant les modifications comme l'a indiquer lg_53, mon code se présente:
    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
                        for rw in data_rows:
                            tranch = f'{str(rw[1])} - {str(rw[2])}'
                            jour = rw[3]
                            liste_matieres.append(rw[0])
                            liste_matieres_par_tranche.append(f'{rw[0]},{str(rw[1])} - {str(rw[2])}'.split(','))
                            liste_matieres_par_tranche_par_jour.append(f'{rw[0]},{tranch},{str(rw[3])}'.split(','))
                            if tranch not in liste_tranche_horaire:
                                liste_tranche_horaire.append(f'{str(rw[1])} - {str(rw[2])}')
                            if jour not in liste_jours:
                                liste_jours.append(jour)
     
                        motif = '{:^20}' * len(liste_jours)
                        emploi_du_temps = [['' for _ in range(len(liste_jours))]
                                           for j in range(len(liste_tranche_horaire))]
     
                        for matiere, creneau, jour in liste_matieres_par_tranche_par_jour:
                            i = liste_tranche_horaire.index(creneau)
                            j = liste_jours.index(jour)
                            emploi_du_temps[i][j] = matiere
     
                        print('{:^20}'.format("Jours"), motif.format(*liste_jours))
                        for creneau, line in zip(liste_tranche_horaire, emploi_du_temps):
                            print('{:^20}'.format(creneau), motif.format(*line))
                            # print("emplois du temps exporté")
    Et voilà le résultat dans le terminal:

    Nom : EmpTemp_généré.png
Affichages : 1474
Taille : 61,4 Ko

    Il ne me reste plus qu'à l'exporter en csv ou le présenter dans un tableau (treeview).

    Merci encore LG_53.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conception d'emploi du temps dans un etablissement scolaire
    Par sessime dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/02/2010, 13h18
  2. emploi du temps
    Par franfr57 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/04/2006, 18h25
  3. Génération d'un emploi du temps
    Par cocorinneco dans le forum Access
    Réponses: 1
    Dernier message: 08/03/2006, 17h58
  4. creer un emploi du temps hebdomadaire
    Par tibiurs dans le forum Access
    Réponses: 6
    Dernier message: 21/12/2005, 18h53
  5. Quelle base de données pour un emploi du temps
    Par edouard21 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 26/10/2005, 22h48

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