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 :

Besoin d'aide pour l'affichage d'un polynome


Sujet :

Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Besoin d'aide pour l'affichage d'un polynome
    Bonjour à tous,
    après avoir reussi à recuperer sous forme de liste les coefficients d'un polynome rentré a la main, j'ai besoin de pouvoir l'afficher proprement.
    Il doit en fait etre affiché sur deux lignes avec sur la premiere les exposants et sur la deuxieme les coefficients et les X, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          2    3     4    7
    1 + 3X + 4X + 23X - 5X
    ( sachant que la donnée de base ici est [1, 0, 3, 4, 23, 0, 0, -5] )

    Le probleme est que je ne sais pas du tout par ou commencer.
    Je pensais faire une chaine que je modifie a chaque iteration mais les chaines ne sont pas vraiment modifiables.
    Auriez vous une idee ?

    Merci d'avance,
    bonne soirée

  2. #2
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Déjà, je suis un peu surpris de cette façon d’afficher les exposants, classiquement, en informatique, on les notes avec ^ (3X^2)…

    Mais bon, sinon, je te conseillerais de construire deux chaînes, une par ligne, de façon parallèle (en assumant que tu utilises à affichage à police à chasse constante, sinon…). En effet, tu sais que quand tu ajoutes n signes sur une ligne, il te faut ajouter autant d’espaces sur l’autre ligne. À partir de là, générer ces deux lignes en y allant morceau par morceau ne devrait pas poser de problème…

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Ca m'aurait bien arrangée d'ecrire mon polynome de la facon classique, mais la facon dont je dois le faire m'est imposée malheureusement !

    Je vais essayer de me debrouiller avec deux chaines qui evoluent ensemble mais je ne vois pas quel outil me permet de modifier les chaines a chaque iteration, si vous pouviez m'aider un peu ..

    Merci de votre aide

  4. #4
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Tu as beaucoup de possibilités, par exemple la concaténation*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s = ""
    for i in range(10):
        s = s + "nxn = " + i * i + "; "
    (Le fait qu’une str soit immutable ne signifie pas qu’on ne puisse pas assigner une nouvelle str à une variable).

    Ceci dit, il sera plus pythonique d’utiliser une liste de morceaux de chaînes, et de tout assembler d’un coup*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sl = []
    for i in range(10):
        sl.append("nxn = " + i * i)
    s = "; ".join(sl)
    Cette dernière solution sera aussi un peu plus performante si tu as beaucoup de morceaux à assembler…

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Bonjour,
    Voici une piste :
    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
    def affiche_polynome(coeff):
        expo, mono = ' ', ''
        for idx, c in enumerate(coeff):
            if c == 0:
                continue
            # Exposant
            if idx < 2:
                e = ''
            else:
                e = str(idx)
            expo += "{0: >6s}".format(e)
            # Monome
            if idx == 0:
                m = "{0:d}".format(c)
            else:
                m = " {0:+d}X".format(c)
            mono += "{0: >6s}".format(m)
        print("\n".join([expo,mono]))
     
    if __name__ == '__main__':
        don = [1, 0, 3, 4, 23, 0, 0, -5]
        affiche_polynome(don)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                2     3     4     7
         1   +3X   +4X  +23X   -5X

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    bonjour, merci pour vois reponses,

    Dardanos, ton programme marche bien mais si les coefficients sont "longs" ex 1245875) alors les indices sont decales, donc je pense qu'il faut faire apparaitre la longueur de la chaine associé au coefficient du monome.
    De plus, je ne comprends à quoi correspondent les lettres s et d ?

    Merci de me repondre comme ca j'essayerais de le modifier pour qu'il integre la longueur des nombres.

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    D'accord avec ta remarque. "s" et "d" correspondent au type dans la description du format.

  8. #8
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Ben puisqu’on en est à donner des solutions, voilà comment j’aurais fait (code py3)*:

    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
    def poly_to_str(poly):
        exp = []
        mnm = []
        first = True
        for n, a in enumerate(poly):
            if not a:
                continue
            t_exp = str(n) if n > 1 else ""
            if first:
                t_mnm = ("{}X" if n else "{}").format(a)
                first = False
            else:
                t_mnm = ("+ {}X" if a > 0 else "- {}X").format(abs(a))
            exp.append(" " * len(t_mnm) + t_exp)
            mnm.append(t_mnm + " " * len(t_exp))
        return " ".join(exp) + "\n" + " ".join(mnm)
     
    print([2, 33, 0, -666, 0, 0, 0, 0, 0, 0, 32.714, 0, 0, 0, 0, 0, 0, -0.3333333], " =>")
    print(poly_to_str([2, 33, 0, -666, 0, 0, 0, 0, 0, 0, 32.714, 0, 0, 0, 0, 0, 0, -0.3333333]))
    Je pense que ce code reste assez simple à comprendre, même s’il comprend quelques “pythonneries”, mais n’hésite pas à demander des explications si nécessaire*!

Discussions similaires

  1. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38
  2. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  3. [Kylix] besoin d'aide pour installer kylix3
    Par Sph@x dans le forum EDI
    Réponses: 3
    Dernier message: 11/02/2004, 13h53
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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