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 :

Aide pour projet étudiant


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Aide pour projet étudiant
    Bonsoir Monsieur, Madame.

    Étant étudiant je dois créer un projet en python qui affiche les écoles en fonction des choix de l'utilisateur et des écoles qui sont disponible dans la base de données et je vois vous voir afin d'avoir de l'aide pour optimiser mon programme surtout le fichier view.py.

    Disponible ici*: https://github.com/SamirPS/choixecol.../ListBoxAndPDF

    Merci d'avoir et pour votre aide.

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Bonsoir,

    Ça va être difficile !

    Qu'appelez-vous optimisation ? Vitesse d'exécution, simplification du code, respect de la PEP8, ... ?

    Avez-vous fait des tests indiquant ce besoin ? Si oui, lesquels et qu'attendez-vous comme résultat ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Bonsoir,
    Je parlais de simplification du code,j'ai testé une simplification que j'ai mis en ligne et j'attends juste de savoir s'il existe d'autres méthodes plus condensé pour réaliser certaines fonctions de mon programme

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    e parlais de simplification du code,j'ai testé une simplification que j'ai mis en ligne et j'attends juste de savoir s'il existe d'autres méthodes plus condensé pour réaliser certaines fonctions de mon programme
    Plus condensé, mais attention, tout aussi lisible, voir zen de python.

    Quelle est la partie qui vous gêne ? Travailler par morceau de code sera plus simple pour des membres qui interviendraient sur votre projet.

    Quelle est la raison d'écrire une classe ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Plus condensé, mais attention, tout aussi lisible, voir zen de python.

    Quelle est la partie qui vous gêne ? Travailler par morceau de code sera plus simple pour des membres qui interviendraient sur votre projet.

    Quelle est la raison d'écrire une classe ?
    Mon prof avait imposé cette structure et c'est surtout la méthode pour accéder aux données afin de les affichier

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Mon prof avait imposé cette structure et c'est surtout la méthode pour accéder aux données afin de les affichier
    Ok, mais à part cela ? Il doit avoir une raison pour le faire je suppose.

    Mais quelle sont les parties du code qui vous gênent ? Votre code fonctionne-t-il ? Si oui, vous connaissez votre code, quelle partie vous semble optimisable ?

    En général pour 99% des cas se sont des petites parties qui peuvent être améliorées, pas l'ensemble d'un code.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Remarques en vrac.

    - La connexion sqlite n'est pas fermée par tes soins.
    - Améliore la lisibilité de ton code, et évite les lignes à rallonge, par ex. écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    self.choix_utilisateur = {
        "Specialite":
            self.information_desirer[0].index(self.var_affichage[0].get()),
        "Region":
            self.var_affichage[1].get(),
        "Concours":
            self.var_affichage[2].get(),
        "Alternance":
            self.var_affichage[3].get(),s
    }
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.choix_utilisateur={"Specialite":self.information_desirer[0].index(self.var_affichage[0].get()),"Region":self.var_affichage[1].get(),"Concours":self.var_affichage[2].get(),"Alternance":self.var_affichage[3].get()}
    Libre à toi de formater le bloc à ta guise.

    - Utilise des tuples au lieu de liste lorqu'il n'y a aucune modifications à faire dessus, par ex. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.var_affichage = tuple(StringVar(self.root) for _ in self.affichage)
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.var_affichage=[StringVar(self.root) for aff in range(len(self.affichage))]
    Mais pour plus de clarté, l'utilisation d'un dict serait sans doute plus approprié, cf code précédent (self.choix_utilisateur).

    - Tu utilises souvent des range couplés à des len dans tes générateurs alors que ce n'est en aucun cas nécessaire, ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variables=tuple(conditions[i][2] for i in  range (len(conditions)))
    Alors que cela devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variables = tuple(cond[2] for cond in conditions)
    - Slices
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete[0:len(requete)-6]
    Devrait simplement être :

    7- Plutôt qu'une multitudes de if dans ta méthode filtre, tu pourrais utiliser un itérable, par ex., ta fonction pourrait ressembler à :

    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
    def filtre(choix_utilisateur, groupe, note):
        """
        Construit la requete Sql et filtre les ecoles en fonction du choix de l'utilisateur
        """
        cu = choix_utilisateur
        predicats = (
            (note, "Points <=?"),
            (groupe, "Groupe =?"),
            (cu["Specialite"], "Idspe =?"),
            (cu["Alternance"], "Alternance =?"),
            (cu["Concours"], "Admission =?"),
            (cu["Region"], "Region =?"),
        )
        conditions = tuple(pred for pred in predicats if pred[0] is not None)
        req = (
            "SELECT Nom,Admission,Commune FROM EcoleSpe JOIN "
            "EcoleS ON EcoleSpe.IdEcole=EcoleS.id"
        )
        if conditions :
            req += " WHERE "
            req += " AND ".join(cond[1] for cond in conditions)
        rvars = tuple(cond[0] for cond in conditions)
        return curseur.execute(req, rvars)
    - Fonction NoteCoefficient
    L'utilisation d'une liste n'a pas d'utilité.
    Ta fonction peut être même raccourcie en une seule ligne avec zip.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return sum(c * m for c, m in zip(coefficient, matiere))
    J'ai pas trop regardé la logique du code, car à vrai dire, je ne comprend pas l'objectif de ton script et donc la logique en découlant
    Le temps ronge l'amour comme l'acide.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Bonjour,
    En étudiant vos avis j'ai modifié mon programme disponible dans le dossier choixecole sur github mais comment créer une seule requête car je calcule des notes pour chaque groupe d'école mais comment lui dire telle note va avec tel groupe via SQL .

    Link : https://github.com/SamirPS/choixecole

    Merci d'avoir lu .

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Bonjour,

    comment lui dire telle note va avec tel groupe via SQL
    Un groupe est une table de la base, non ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Oui enfin une colonne de la table,j'ai mis les fichiers a jour et j'ai régler le problème .Par contre j'aimerais bien factoriser la boucle dans la fonction filtre qui gère les IN en fonction de la taille du tupple.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    J'ai réussi a factoriser la fonction mais si j'ai un élément j'aurais IN (5,) je voudrais savoir comme avoir juste IN (5) sans les slices

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Update : désoler des triplés message j'ai réussi a trouvé une solution mais je suis pas sur ,peut t-on faire mieux ? C'est la boucle où on créer la requête dans le fichier model.py

  13. #13
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    C'est clair que ton code n'est pas très compréhensible, il est conseillé comme le précise la doc d'utiliser le « ? » pour passer les valeurs arbitraires aux requêtes.

    Pour commencer, et avant de t'embourber dans des complications inutiles, tu pourrais faire un simple test, comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def selectConcours(*groupes) :
        in_ = ', '.join('?' for _ in groupes)
        sql = "SELECT DISTINCT Concours from Coefficient WHERE Groupe IN (%s)" % in_
        return cur.execute(sql, groupes)
     
     
    groupes = ("Centrale", "MinesPonts", "ArtsetMetier", "SIGMA",)
    for concours in selectConcours(*groupes) :
        print(concours)
    Voyant que ça fonctionne correctement pour un simple prédicats, il reste à faire la même chose pour ta requête plus complexe.
    Grosso-modo, ça pourrait donner quelque chose comme :

    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
    def filtre(choix_utilisateur, notes):
        conds = []
        sqlParams = []
     
        if choix_utilisateur["specialites"] is not None:
            in_ = ','.join('?' for _ in choix_utilisateur["specialites"])
            conds.append('Idspe IN (%s)' % in_)
            sqlParams.extend(choix_utilisateur["specialites"])
        # Même logique pour chaque item du dict notes
        # ...
     
        if choix_utilisateur["annee"]==("3/2",): # Hum
            bonif_str = "Bonification"
        else:
            bonif_str = "0" # Pas compris à quoi ça sert
        conds.append('? >= Points')
        sqlParams.append(bonif_str)
     
        sql = '''SELECT Nom,Admission,Commune
                FROM EcoleSpe
                JOIN EcoleS on EcoleSpe.IdEcole=EcoleS.id
                JOIN Coefficient on Coefficient.Groupe=EcoleS.Groupe'''
        if conds :
            sql += ' WHERE '
            sql += ' AND '.join(conds)
     
        return list(curseur.execute(sql, sqlParams))
    Je n'ai aucunement testé, il faut simplement faire bien attention à construire les 2 listes simulanément.
    Le temps ronge l'amour comme l'acide.

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

Discussions similaires

  1. Aide pour projet de programmation Lycée
    Par Supervince dans le forum C
    Réponses: 26
    Dernier message: 21/05/2006, 16h55
  2. Réponses: 1
    Dernier message: 17/05/2006, 16h27
  3. besoin d'aide pour projet
    Par donromanino dans le forum C++
    Réponses: 5
    Dernier message: 02/04/2006, 19h35
  4. Aide pour projet avec carte asi candibus
    Par sinicha dans le forum C
    Réponses: 13
    Dernier message: 16/01/2006, 16h32
  5. Aide pour projet : schéma & SGBD
    Par Grubshka dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 11/04/2005, 17h50

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