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 :

Gestion de l'affichage en mode texte


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 105
    Par défaut Gestion de l'affichage en mode texte
    Bonjour,

    Auriez-vous un lien vers la liste des codes de contrôle de l'affichage en mode texte, IDLE par ex (sous windows et donc hors console) ?
    J'aimerais pouvoir faire un affichage comme celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1   5    9
    2   6   10
    3   7   11
    4   8   12
    Affichage 1ere colonne, puis on remonte, affichage 2e colonne, puis on remonte affichage 3e colonne...
    Je ne veux pas de 1 5 9, puis 2, 7 11 et 4 8 12...

    J'espère avoir été clair

    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    tu souhaiterais obtenir un "formatage" comme celui que tu présentes via un print dans un script ? pour une sortie écran ?

    si c'est le cas, il me semble que print ne gère que les affichages ligne à ligne et donc que la seule solution soit de faire de la façon même dont tu ne souhaites pas procéder

    si j'ai bien compris le sens de ta question, et que tu souhaites en fait faire une sortie console "évoluée", tu peux te pencher du côté de curses:

    http://docs.python.org/library/curses.html

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 105
    Par défaut
    Salut,

    Déjà une réponse ? Magnifique !
    Citation Envoyé par kango
    tu souhaiterais obtenir un "formatage" comme celui que tu présentes via un print dans un script ? pour une sortie écran ?
    Tout à fait !
    Oui, curses, c'est la première idée qui m'est venue, mais
    1. J'avais par le passé déjà essayé, sans succès
    2. J'ai cru comprendre (et lire, mais pas ici) que ça ne marchait pas avec Windows...
    Pour le saut de ligne, il y a bien \n,\t il doit bien y avoir des codes de contrôles autres, tels :
    remonter d'une ligne, retour arrière (sans effacement), avance (sans eff... etc...), non ?

    Merci quand même.

    @+

  4. #4
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Haha... c'est un défi pourtant intéressant... le but est de définir une (dans ce cas) fonction qui prendrait une chaine non-formatée, puis d'effectuer tout un travail dessus pour que cette fonction retourne une chaine "formatée"
    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
    chaine_brut='1 2 3 4 5 6 7 8 9 10 11 12'
    chaine_frmt=format_to_col(chaine_brut, 3)
    print chaine_frmt
    #afficherait
    01 05 09
    02 06 10
    03 07 11
    04 08 12
    #chaine_frmt ressemblerais à
    '01 05 09\n02 06 10\n03 07 11\n04 08 12'
     
    chaine_frmt=format_to_col(chaine_brut, 4)
    print chaine_frmt
    #afficherait
    01 04 07 10
    02 05 08 11
    03 06 09 12
    #chaine_frmt ressemblerais à
    '01 04 07 10\n02 05 08 11\n03 06 09 12'
    les seules choses que tu doives connaître sont split(), rjust(), et join(), ces trois fonctions sont des méthodes de chaines :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '01 02'.split(' ') -> ['01','02']
    NB: on ne travail pas du texte en programmation comme on travaille du texte dans un editeur (style word)

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    j'ai proposé de passer par curses (je n'ai pas testé sur windows je ne peux donc pas vraiment répondre à tes questions) parce que tu précisais dans ton message que tu ne voulais pas de "1 5 9, puis 2, 7 11 et 4 8 12", ce qui correspond à la réponse de N.tox.

    si tu ne veux pas de cette solution, c'est que j'imagine tu n'essaie pas d'afficher une série de nombre mais des informations de types divers qui vont être obtenues au fur et à mesure de ton programme.

    c'est à dire que tu ne connais pas la "chaine" complète à afficher avant de commencer à l'écrire ? j'ai bon ?

    par exemple, un script qui réaliserait 3 actions et dont tu voudrais indiquer l'avancement à l'utilisateur via un texte de statut. c'est à dire écrire ces trois lignes en tout premier lieu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    reading data        [   ]
    processing data     [   ]
    writing results     [   ]
    puis de remplir les [ ] au fur et à mesure du déroulement de ton code ?

    je m'étais amusé à faire ça en script shell en utilisant tput mais c'était sur Unix et pas sur Windows.

    après vérification, il semble en effet que curses ne fonctionne pas sur Windows (http://www.amk.ca/python/howto/curses/).

    ça ne répond pas directement à ta question, mais est il envisageable dans ton cas d'utiliser cygwin pour émuler un environnement Unix sur Windows (qui pourrait te permettre d'utiliser curses)

    sinon, il existe aussi ça:

    http://adamv.com/dev/python/curses/

    j'ai trouvé ça sur google je ne sais pas ce que ça vaut.

    et ici http://www.amk.ca/python/howto/curses/ ils parlent aussi d'un module Console mais le lien est mort :'(.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 105
    Par défaut
    Salut les gars,

    Vous êtes très forts et très accueillants...
    Oui, Kango, tu as tout bon...
    Dans le temps (il y a 25 ans), j'avais écrit un programme, avec le Basic de l'Amstrad CPC 6128, un prog de conjugaison que je voudrais porter sous Python.
    Je me lancerais bien en WxPython (j'ai testé Tkinter, mais chuis pas très à l'aise) pour traiter ça dans une interface graphique, mais je recule ce moment...

    En effet, je constate de plus en plus que sans utiliser de classes, je suis obligé parfois de "grimper aux murs", et j'ai la très nette impression que si je passe soit franchement à Tkinter, soit à WxPython, sans les Classes, je serais en plus obligé de marcher au plafond...
    Alors ?

    Alors, les Classes me posent, jusqu'à maintenant, des problèmes insurmontables : je ne sais pas ce que je dois mettre dedans ou pas, si les classes sont réservées pour diverses initialisations de données, si on peut effectuer des calculs à l'intérieur, si une variable initialisée dans une classe est accessible de n'importe quel point du prog y compris dans les def, etc...
    J'ai imprimé les pages de Swinnen qui traitent du sujet, je les ai imprimées, lues et relues sans être plus avancé.
    Et si je veux aller plus loin en Python, j'ai besoin de classes...
    J'ai même envisagé de changer de langage à cause de ça...

    Donc, disais-je, j'ai écrit (assez mal écrit avec mon oeil d'aujourd'hui !) un prog de conjugaison imbattable sans liste de verbes, comme le Bescherelle, et qui détermine notamment de lui-même (en 3/4 lignes) si un verbe en ir est du 2e ou 3e groupe (6 mois pour trouver l'algo) et l'affichage se faisait verticalement temps par temps, personne par personne...
    Je ne me voyais pas(et ne vois toujours pas) en cas d'affichage de 4 temps par écran :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
           Mode : Indicatif
    Présent           Imparfait
     Je
     tu
     Il
     
    Passé simple      Futur
    afficher ça ligne par ligne.... J'avais opté pour "tout le Présent", puis "out l'Imparfait", "tout le passé simple"...

    Vois-tu la problématique maintenant ?
    Hier soir, je les ai tous passés en revue de "\a" à "\z"... je me suis fait "jeter" avec "\x" (et j'ai pigé ensuite pourquoi) les deux seuls qui ont répondu à mes attentes sont "\n" et "\t", les autres soient ne donnent rien, soient des petits carrés avant l'affichage...

    J'ai quand même suivi ton lien mort, au cas où et j'ai fini par trouver ça :
    The Console module is a simple console driver for Windows 9X/NT/2K/XP. It also provides Python command line history and editing facilities for Windows platforms.
    http://effbot.org/media/downloads/co...in32-py2.6.exe
    Maintenant va falloir que je trouve une doc...
    [edit]Elle était sous mon nez )

    Merci encore,

    @+

    PS
    Cette histoire de prog de conjugaison n'est pas une simple "foucade", il était vraiment (et est toujours) très complet : Voix active, Voix passive, Forme pronominale, conjugaison à la demande ou sous contrôle du prog (avec 12 messages d'erreurs sur la localisation de la faute) et les règles de grammaire associées...
    Je l'avais retraduit proprement en Turbo Basic et maintenant, je voudrais le passer en Python...

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    formé initialement à la programmation procédurale, j'avoue avoir eu du mal à comprendre au début le pourquoi et le comment des classes. et puis on regarde des articles, on se ballade sur ce forum, on regarde des exemples de programmes et aujourd'hui ça me semble beaucoup plus naturel, assez en tout cas pour que je puisse préparer une formation à mes collègues

    en ce qui concerne le "pourquoi", je n'ai pas hésité à aller voir du côté d'autres langages, parce que finalement le concept est très similaire (je n'ose pas d'ire identique) et j'avais trouvé des tutos c++ sur lesquels j'ai appris pas mal de choses.

    si je devais te donner un conseil je dirais: ne te laisse pas perturber par le "comment" avant d'avoir bien compris le "pourquoi". et ce n'est pas forcément une bonne idée à mon sens de se mettre à une librairie GUI genre tkinter ou wxPython avant d'avoir assimiler le concept.

    maintenant, lorsqu'on résume le but d'un projet en quelques lignes on fait souvent sortir des informations qui vont dans un certain sens aiguiller la notion d'objet (ou de classe):

    un prog de conjugaison imbattable sans liste de verbes, comme le Bescherelle, et qui détermine notamment de lui-même (en 3/4 lignes) si un verbe en ir est du 2e ou 3e groupe (6 mois pour trouver l'algo) et l'affichage se faisait verticalement temps par temps, personne par personne...
    en lisant ça je me dis: "son programme manipule des verbes qui peuvent être de plusieurs groupes (groupe déterminé par un algorithme interne) et il conjugue les verbes à différents temps".

    ma première idée serait la suivante:

    - je crée un objet verbe parce que c'est la donnée qui est manipulée dans le programme.
    - on peut dire que le verbe est caractérisé par son infinitif, du coup je dis que l'infinitif est un attribut du verbe (et ça peut être la seule donnée fournie par l'utilisateur pour créer un verbe).
    - un verbe a un groupe, on peut donc dire que le groupe est un attribut du verbe (à la différence de l'attribut infinitif, celui-ci n'est pas donné par l'utilisateur, il est "interne" à l'objet).
    - l'objet verbe a une méthode qui permet de déterminer le groupe à partir du verbe à l'infinitif.
    - etc...

    il y a sûrement d'autres façons de voir les choses, je ne crois pas à l'unicité des solutions en terme de conception

    voilà c'est un exemple, ça m'a pas mal aidé de faire ce type de raisonnement à propos de tout et de rien, je trouve que c'est un bon exercice.

    bon courage

  8. #8
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 78
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    : je ne sais pas ce que je dois mettre dedans ou pas, si les classes sont réservées pour diverses initialisations de données, si on peut effectuer des calculs à l'intérieur, si une variable initialisée dans une classe est accessible de n'importe quel point du prog y compris dans les def, etc...
    J'ai imprimé les pages de Swinnen qui traitent du sujet, je les ai imprimées, lues et relues sans être plus avancé.
    Et si je veux aller plus loin en Python, j'ai besoin de classes...
    J'ai même envisagé de changer de langage à cause de ça...
    Mon conseil: saute le pas !
    Avec les wxwidgets tu peux programmer en python ou en C++. L'utilisation est assez intuitive, tu pourras afficher tes résultats dans des 'textbox' et disposer tes contrôles comme bon te semble dans une fenêtre. Si tu veux rester dans l'univers python je te conseille l'emploi de boa-constructor, il y a des tutos, et tu développes en mode visuel.
    Mais bon, ton programme de conjugaison, tu veux en faire profiter quelqu'un, non ? Dans ce cas il faudrait une interface web. Programmer en python pour le web (CGI), c'est possible mais il faut que le serveur soit spécial 'mode python'. Si tu veux rester dans le standard (serveurs usuels gratuits comme pages perso free), alors c'est java et javascript.
    A toi de voir.
    - je crée un objet verbe parce que c'est la donnée qui est manipulée dans le programme.
    - on peut dire que le verbe est caractérisé par son infinitif, du coup je dis que l'infinitif est un attribut du verbe (et ça peut être la seule donnée fournie par l'utilisateur pour créer un verbe).
    - un verbe a un groupe, on peut donc dire que le groupe est un attribut du verbe (à la différence de l'attribut infinitif, celui-ci n'est pas donné par l'utilisateur, il est "interne" à l'objet).
    - l'objet verbe a une méthode qui permet de déterminer le groupe à partir du verbe à l'infinitif.
    - etc...
    Ca c'est à coup sûr la bonne façon de voir les choses. Tu peux aussi créer un objet mode et un objet temps.
    Pour l'objet verbe tu peux rajouter la donnée membre 'radical' et la donnée 'terminaison', la terminaison est calculée en prenant en argument le mode et le temps. tu peux enfin introduire une méthode 'forme_conjuguée' prenant en argument un mode et un temps et calculant à partir du radical et de la terminaison.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  9. #9
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    J'ai imprimé les pages de Swinnen qui traitent du sujet, je les ai imprimées, lues et relues sans être plus avancé.
    Fais des tests en même temps que tu les re(re^n)lis dans la console interactive, c'est un précieux outil pour de l'apprentissage (sauf pour les GUI). J'aurais tendance à aller dans le sens de Kango : avant de te lancer dans les GUI, tests et comprends ce que sont les classes.

    Les classes, c'est pas quelque chose de nécessaire, ça sert simplement à simplifier () grandement la vie du programmeur. Un classe c'est comme un couteau suisse, où chaque fonction (méthode) représente un outil, et chaque variable (attributs) représente une de ses caractéristiques.

    ex d'un couteaut suisse:
    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
    class SwissKnife(object):
        def __init__(self, taille):
            self.taille=taille #indique la taille du couteau
        def lame_couper(self, viande):
            '''sert à couper de la viande'''
            return viande.morceau()
        def scie_scier(self, scier):
           '''sert à scier des branches four le feu'''
           [...]
     
    #allez, on va même créer une classe animal
    class Animal(object):
        def __init__(self,_type, vivant=True):
            self.type=_type
            self.vivant=vivant
       def morceau(self):
            if not self.vivant:
                return MorceauBarback()
     
    class MoceauBarback(object):
        pass
     
    #et une fonction pour chasser les animaux avec notre couteau ! XD
    def chasser(animal,arme):
        if isinstance(arme,SwissKnife):
            print "C'était pas facile, mais vous avez réussi à tuer un %s avec votre couteau suisse !"%(animal._type)
        else:
           print "vous avez tuer un %s"%(animal._type)
        animal.vivant=False
     
    def manger(self,morceau):
        if isinstance(morceau,MorceauBarback):
            print "Ah... Ca fait du bien ! :D"
        else:
            print "J'ai un couteau, autant que j'm'en serve !"
     
    #aller maintenant on utilise tout ça :D
    mon_couteau=SwissKnife(7)
    lapin=Animal('lapin')
    chasser(lapin, mon_couteau)
    #affiche
        "C'était pas facile, mais vous avez réussi à tuer un lapin avec votre couteau suisse !"
    manger(lapin)
    #affiche
        "J'ai un couteau, autant que j'm'en serve !"
    morceau=mon_couteau.lame_couper(lapin)
    manger(morceau)
    #affiche
         "Ah... Ca fait du bien ! :D"
    On aurait aussi pu créer une classe arbre qui contiendrai N branches, lesquelles seraient des instances d'un classe Branche, qui auraient comme attribut un taux d'humidité servant d'indicateur pour leur méthode bruler(), qui elle-même aurait retourner Vrai si la branche était en état de bruler, ou faux si elle ne l'était pas... On pourrait continuer longtemps comme ça... J'éspère que ça t'auras aider à comprendre ce qu'était une classe...

    Et la version ultra courte : une classe c'est un sac ou on y fourre des variables et des fonctions, qui deviennent respectivement des attributs et des méthodes

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 105
    Par défaut
    Salut à tous les deux,

    Vraiment, c'est sympa de vouloir me faire avancer...
    Serait-ce une expression de "la justice immanente" ?
    Après 38 ans passés au service des autres à me plier en 4, en 8, en 12... pour les aider, sans beaucoup de reconnaissance, voilà qu'on me renvoie l'ascenseur...
    Merci les gars !
    C'est d'ailleurs une caractéristique de ce Forum, il me semble, pas comme certain autre (oui, au singulier) que je ne nommerai pas où on de bonnes chances qu'on se paie votre tête quand vous ne comprenez pas.
    Adoncques, si j'ai la tête dure (et chenue !), je suis tenace, et je progresse depuis que je lis le Forum et j'ai bien l'intention de franchir l'étape Classes.
    Oh, j'ai bien écrit un prog en Tkinter : j'ai réinventé la roue !!!
    J'ai écrit sans inspiration extérieure, une calculatrice graphique à UNE fonction : la multiplication en base seize, rien que ça !
    Je l'ai récrite de A à Z sans calcul numérique en base dix (tout en chaînes de caractères) : j'ai réécrit pour l'occasion des tables d'addition et de multiplication en base seize direct...
    Ah, la gestion des retenues dans la multiplication et l'addition, un poème !
    Je me rends compte maintenant qu'il est écrit de façon épouvantable et sans... Classes... Il est tellement moche que je n'ai jamais voulu l'infliger au regard de quelqu'un.

    Oh pourtant, il fonctionne très bien : je l'ai testé avec la calculette win..
    En plus, au moment où je l'ai écrit, il y avait des tas de trucs que je ne connaissais pas : il faudrait que je le reprenne, mais sans utiliser de classes à quoi bon ? Et je ne sais pas construire une Classe : en fait, je vois à peu près, j'en comprends l'utilité, mais au passage à l'acte, crac ! boum ! Le trou noir ! Et je suis sûr que passer ce cap sur ce prog par ex, débloquerait tout...
    Car, je suis bien d'accord avec toi :
    ce n'est pas forcément une bonne idée à mon sens de se mettre à une librairie GUI genre tkinter ou wxPython avant d'avoir assimiler le concept.
    Je suis preneur de ton tuto...

    Et puis, tiens :
    Citation Envoyé par N.Tox
    une classe c'est un sac ou on y fourre des variables et des fonctions, qui deviennent respectivement des attributs et des méthodes
    Ca c'est de la formule choc qui a l'avantage d'être parlante. N.Tox, tu es certainement trop jeune pour avoir vu cette affiche tirée par les gars des Beaux-Arts en grève de l'époque : un toit avec une antenne de télé (en ombres chinoises) et ce slogan : << L'Intox vient à domicile ! >>, slogan que tu fais mentir...

    @+

    Salut Collègue Zavonen, intéressant aussi ton post : je ne le découvre qu'au moment de poster ma réponse : comment ai-je fait pour ne pas le voir et voir ceux qui l'encadrent ???
    Quand je vois WxMaxima, ça me laisse rêveur : c'est sûrement plein de classes, pas comme ma multiplication en base seize avec Tkinter. Qui la verrait, partirait en courant..
    J'aurais bien regardé les sources, mais c'est sûrement bien trop touffu pour que ça m'apporte quelque chose.
    Vouloir, c'est pouvoir ! m'assénait régulièrement mon père quand j'étais môme, alors avec le temps, j'arriverai bien à quelque chose !

Discussions similaires

  1. Jeu de la vie - Affichage en mode texte.
    Par Endori dans le forum Débuter
    Réponses: 6
    Dernier message: 08/12/2010, 11h22
  2. [Turbo Pascal] Unité complète de gestion d'écran en mode texte
    Par Alcatîz dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 11/11/2010, 15h55
  3. [texte] gestion de l'affichage d'une page
    Par guy2004 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 10/07/2005, 18h37
  4. affichage de tabulations en mode texte à partir de XSL
    Par closo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 24/02/2004, 16h36
  5. Réponses: 5
    Dernier message: 11/12/2002, 12h31

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