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 réaliser une classe pour consulter des données en tableau ASCII


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 98
    Par défaut Aide pour réaliser une classe pour consulter des données en tableau ASCII
    Bonjour à tous,

    Je suis en train d'essayer de faire un menu en mode console qui fonctionne plutôt bien. Cependant je rencontre un souci quand je souhaite faire une consultation de donnée sous forme de tableau avec pagination.
    Voici ma classe pour naviguer en faisant une pagination :
    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
     
    class NavTable():
        def __init__(self,data):
            self.data = data
            self.nb = 0 #numero d'indexation pour parcourir les donnée
            self.page = 1 #numero des pages a afficher en bas du tableau
            self.choices = ""
            self.launch = True
            self.navigate = True
            self.menu = """
                ######################### Menu #######################
                1) Revoir le tableau
                2) Retour menu principal
            """
     
     
        def display_files_table(self):
            if self.data[self.nb]:
                sizes = [max(map(len, column)) for column in zip(*self.data[self.nb]])]
                divider = '+' + ''.join('-'*size+'--+' for size in sizes)
                lines = ['|' + ''.join(
                            ' ' + value.ljust(size) + ' |' for size, value in zip(sizes, row)
                            )
                            for row in self.data[self.nb]]]
                return '\n'.join([divider, lines[0], divider] + lines[1:] + [divider])
            else:
                return "no data"
     
        def display_table(self):
            while self.navigate:
                print self.display_files_table(nb)
                if self.page <= len(self.data):
                    print "Page",page,"sur",len(self.data),"\n--------------------------"
                self.choices = raw_input("Next (n) / Prec (p) / supprimer ligne (del) / stop (s):",)
     
            if self.choices == "n":
                    self.choices=""
                    print "nb=",nb
                    self.nb += 1
                    self.page += 1
                    self.console_clear()
                    print self.display_files_table(self.nb)
                    if page <= len(self.data):
                        print "Page",page,"sur",len(self.data),"\n--------------------------"
                    self.choices = raw_input("Next (n) / Prec (p) / supprimer ligne (supp) / stop (s):",)
                elif self.choices == "p":
                    self.choices=""
                    self.nb -= 1
                    self.page -= 1
                    self.console_clear()
                    print self.display_files_table(self.nb)
                    if page <= len(self.data):
                        print "Page",page,"sur",len(self.data),"\n--------------------------"
                    self.choices = raw_input("Next (n) / Prec (p) / supprimer ligne (supp) / stop (s):",)
     
                elif self.choices == "del":
                    self.choices=""
                    print self.choices
                    print "########### Suppression de ligne ###########\nRemarque : si plusieurs lignes a supprimer , renseigner les id séparés par des virgules"
     
     
                elif self.choices == "s":
                    self.choices=""
                    self.navigate=False
     
            def start(self):
                while self.launch:
                    print "################### Tableau des fichiers erroné ################"
                    print self.menu
                    choix = raw_input("Choix : ",)
                    if choix == 1:
                        self.display_table()
                    elif choix == 2
                        self.launch = False
    Mon souci c'est le choix pour passer aux données suivante :
    • Quand je fais "n" la 1ère fois pas de problème : ca passe a la seconde page
    • apres faut rentrer 2x n ou 2x p pour aller à la page suivante ou précédente, ainsi que pour stopper il faut faire 2x "s"
    • quand je mets "del" ca ne marche pas

    Du coup je pense qu'il y a un souci avec mon input, si vous pouvez m'éclairer sur la bonne façon de faire

    petit jeux de données anonymisé pour tester :
    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
     
    data = [
        [
            ("id", "fullname", "part", "repertoire", "date_creation"),
            (
                "1",
                fichiertest
                fichiertest
                "Work",
                "2025-03-18 06:18:08",
            ),
            (
                "2",
                fichiertest
                fichiertest
                "Work",
                "2025-03-25 06:18:07",
            ),
            (
                "3",
                fichiertest
                fichiertest
                "Work",
                "2025-03-11 06:54:06",
            ),
            (
                "4",
                fichiertest
                fichiertest
                "Work",
                "2025-03-11 06:06:07",
            ),
            (
                "5",
                fichiertest
                fichiertest
                "Work",
                "2025-03-13 17:18:09",
            ),
            (
                "6",
                fichiertest
                fichiertest
                "Work",
                "2025-03-13 14:42:09",
            ),
            (
                "7",
                fichiertest
                fichiertest
                "Work",
                "2025-03-21 16:06:07",
            ),
            (
                "8",
                fichiertest
                fichiertest
                "Work",
                "2025-03-17 15:18:10",
            ),
            (
                "9",
                fichiertest
                fichiertest
                "Work",
                "2025-03-17 10:06:07",
            ),
            (
                "10",
                fichiertest
                fichiertest
                "Work",
                "2025-03-13 16:54:07",
            ),
        ],
        [
            ("id", "fullname", "part", "repertoire", "date_creation"),
            (
                "11",
                fichiertest
                fichiertest
                "Work",
                "2025-03-25 14:30:09",
            ),
            (
                "12",
                fichiertest
                fichiertest
                "Work",
                "2025-03-17 06:18:08",
            ),
            (
                "13",
                fichiertest
                fichiertest
                "Work",
                "2025-03-18 11:54:07",
            ),
            (
                "14",
                fichiertest
                fichiertest
                "Work",
                "2025-03-10 06:18:06",
            ),
            (
                "15",
                fichiertest
                fichiertest
                "Work",
                "2025-03-19 06:18:06",
            ),
            (
                "16",
                fichiertest
                fichiertest
                "Work",
                "2025-03-13 14:54:07",
            ),
            (
                "17",
                fichiertest
                fichiertest
                "Work",
                "2025-03-17 16:54:07",
            ),
            (
                "18",
                fichiertest
                fichiertest
                "Work",
                "2025-03-18 07:18:08",
            ),
            (
                "19",
                fichiertest
                fichiertest
                "Work",
                "2025-03-14 12:06:09",
            ),
            (
                "20",
                fichiertest
                fichiertest
                "Work",
                "2025-03-13 14:30:07",
            ),
        ],
    ]
    Remarque : Je suis sur du python2.7 (que je ne peux pas upgrader malheureusement )

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 302
    Par défaut
    bonjour

    Citation Envoyé par Bensljul Voir le message
    petit jeux de données anonymisé pour tester :
    Non merci, je ne suis pas pour réveiller les morts et donc pas question d'en introduire un sur ma machine

    Note: il y a un gros problème de tabulatons dans ton code, mais je suppose que c'est juste un problème lié au forum ?

    Citation Envoyé par Bensljul Voir le message
    [*]quand je mets "del" ca ne marche pas
    Merci pour cette info bien pertinante
    Puisque qu'il n'y a pas de code c'est normal que la supression ne fonctionne pas.
    Tu ne nous dis même pas si tu entres ou non dans le if
    Je suppose que "le numéro de ligne" est demandé ensuite et que l'utilisateur ne rentre pas directement "del 5" ? sinon il est normal de ne pas entrer dans ton bloc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self.choices=""
    print self.choices
    Bravo ! si tu as inséré ce print pour savoir ce qui se passe

    NOTE
    dans le prompt, une fois c'est "supp" et une fois c'est "del"

    NOTE
    Je ne connais pas raw_input mais je suis très surpris que dans la méthode start(), cette fonction retourne un entier. Ou alors, python 2 ne distinguait pas les entiers des chaines ??? si oui, pas mécontent de ne pas l'avoir connu.
    $moi= (:nono: !== :oops:) ? :king: : :triste: ;

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    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 695
    Par défaut
    Salut,

    Citation Envoyé par Bensljul Voir le message
    Je suis sur du python2.7 (que je ne peux pas upgrader malheureusement )
    Pour apprendre à coder avec Python, vous n'avez aucune bonne raison d'être scotché à une 2.7.
    Et si vous devez écrire une petite application sur Python 2.7 sans trop savoir coder (comme le montre votre code), ben, vous avez besoin de quelqu'un qui fasse le boulot et pas juste d'aide.


    Citation Envoyé par papajoker Voir le message
    Je ne connais pas raw_input mais je suis très surpris que dans la méthode start(), cette fonction retourne un entier. Ou alors, python 2 ne distinguait pas les entiers des chaines ??? si oui, pas mécontent de ne pas l'avoir connu.
    raw_input retourne une chaine de caractères mode python2 (i.e. des bytes) alors qu'input de python3 retourne un objet de type str (de l'unicode).... et dans les 2 cas, la comparaison avec un entier retourne False.

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

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par papajoker Voir le message
    Je ne connais pas raw_input mais je suis très surpris que dans la méthode start(), cette fonction retourne un entier.
    Non non, le PO a commis une erreur, elle retourne toujours une str.

    Citation Envoyé par papajoker Voir le message
    Ou alors, python 2 ne distinguait pas les entiers des chaines ???
    Sisi, il sait parfaitement faire la différence. En revanche il existe aussi une fonction input dans P2 qui, à la différence de son homonyme P3, prend en compte la saisie => tu rentres 12 ça renvoie un int, 12.5 ça renvoie un float. Ce comportement a été abandonné dans P3 et donc cette fonction input (sous P3) a récupéré à la place le comportement de raw_input de P2.

    Citation Envoyé par papajoker Voir le message
    si oui, pas mécontent de ne pas l'avoir connu.
    Oh ben à l'époque on faisait avec et pour tout dire ça fonctionnait pas mal. Tu voulais une fonction intelligente qui s'adapte à la saisie tu utilisais input (et tant pis si l'utilisateur tapait "hello" quand on lui demande son age). Tu préférais gérer toi-même la saisie et ses erreurs tu utilisais raw_input. Après on peut comprendre aussi qu'elle ait été abandonnée puisqu'on peut faire à minima la même chose avec une saisie brute => age = int(raw_input(...)).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    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 : 4 049
    Par défaut
    Hello,

    Citation Envoyé par Bensljul
    Aide pour réaliser une classe pour consulter des données en tableau ASCII
    Concernant les classes, je vous conseille de lire ou vous renseigner sur la POO (Programmation Orienté Objets), afin de comprendre leur intérêt. Une classe est un créateur d'objets qui aura sa responsabilité et plusieurs actions qui lui sont associées.
    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)

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bensljul Voir le message
    si vous pouvez m'éclairer sur la bonne façon de faire
    Déjà à minima la bonne façon de faire est de poster un code sans erreur de syntaxe. Au-moins on peut le lancer et voir ce qui se passe.
    Ici sizes = [max(map(len, column)) for column in zip(*self.data[self.nb]])] erreur de parenthèses (ligne 19). De même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	lines = ['|' + ''.join(
    						' ' + value.ljust(size) + ' |' for size, value in zip(sizes, row)
    						)
    						for row in self.data[self.nb]]]
    en ligne 21. Et (pire que tout) le "else" de la ligne 46 est mal indenté et je frémis en voyant la fonction "start" décalée de 2 positions (est-ce une méthode ? une sous-fonction ?) bref... Poster un code même pas testé c'est que visiblement il ne t'intéresse pas. Alors pourquoi devrions-nous nous y intéresser ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre confirmé
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 98
    Par défaut
    ce forum a vraiment changé ...
    rempli d'aigri, si je le mets je l'ai testé ca se lance.

    Tant pis je me démerderai tout seul
    Salut

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Nom : 5964041-valery-giscard-d-estaing-et-son-celebre-580x326-2.jpg
Affichages : 40
Taille : 31,7 Ko

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 512
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 512
    Par défaut
    Citation Envoyé par Bensljul Voir le message
    ce forum a vraiment changé ...
    rempli d'aigri, si je le mets je l'ai testé ca se lance.

    Tant pis je me démerderai tout seul
    Salut
    Fais l'opération inverse pour vérifier.
    Chez nous, quand on copie/colle ton code, il y a des soucis d'indentations et de parenthèses et crochets.
    Avant de nous qualifié d'aigri, revérifies le code que tu as posté (faire des erreurs (même involontaires) ça arrive à tout le monde, ça ne coûte rien de reconnaitre ses erreurs)

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/07/2008, 16h36
  2. Réponses: 11
    Dernier message: 05/06/2008, 10h39
  3. [MySQL] je cherche une aide pour récupérer des champs d'une base de donnée
    Par maya24 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/09/2007, 12h14
  4. Besoin d' Aide pour Redimensionnement des element dans une fenetre
    Par kry55 dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 11/12/2006, 12h05

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