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 creer une liste à partir d'une chaine de caracteres


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    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
    Par défaut Besoin d'aide pour creer une liste à partir d'une chaine de caracteres
    Bonjour à tous,
    J'essaye de créer un programme qui me permettra à partir d'une chaine de caractères représentant un polynome (ex : '1-4X**3+3X**2' ) d'obtenir une liste des coefficients du polynome (ici [1,0,3,-4]).

    Pour commencer, j'essaye d'ecrire un petit programme qui me permettrait de récupérer les monomes (séparés par des + ou des - ) sous forme d'une liste.
    Et après j'analyserais cette liste et en fonction du degré et du coefficient associé je créerai ma liste finale.

    Le probleme réside pour l'instant dans mon premier programme, j'ai essayé celui ci mais il ne semble pas fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def monome(l):
    	M=[]
    	for i in l :
    		if i in "+-":
    			M.append(l[0:i])
    			l.replace(l[0:i],"")
    	return M

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> l='1+4*X-X**2'
    >>> monome(l)
    Traceback (most recent call last):
      File "<pyshell#21>", line 1, in <module>
        monome(l)
      File "<pyshell#15>", line 5, in monome
        M.append(l[0:i])
    TypeError: slice indices must be integers or None or have an __index__ method

    Merci d'avance!
    Bonne journée

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 308
    Par défaut
    Salut,

    Dans ton code le nom i représente la lettre courante et non son index.

    Tu peux directement avoir l'index et la lettre avec enumerate()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    a = '1-4X**3+3X**2'
    d = 0
    m = []
    for i, l in enumerate(a):
        if l in ['+', '-']:
            m.append(a[d:i])
            d = i + 1
    m.append(a[d:])
    print m
    Ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ['1', '4X**3', '3X**2']

  3. #3
    Membre émérite
    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
    Par défaut
    Salut,
    Je pense que tu voulais faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def monome(l):
        M=[]
        i_ref = 0
        for idx, i in enumerate(l) :
            if i in "+-":
                M.append(l[i_ref:idx])
                i_ref = idx
        else:
            M.append(l[i_ref:])
        return M
    Sinon les regex marchent bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import re
    print( re.split('(\+|-)',l) )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['1', '-', '4X**3', '+', '3X**2']

  4. #4
    Membre habitué
    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
    Par défaut
    Merci beaucoup pour vos réponses,
    la premiere solution de dardanos correspond exactement avec ce que je voulais car j'ai besoin du signe du monome dans ma liste et de plus cela tient compte du fait qu'il peut y avoir des polynomes constants.
    J'ai juste une petite question sur la fonction enumerate pour etre sure d'avoir bien compris.

    Lorsqu'on ecrit : for idx, i in enumerate(l),
    est ce que le idx correspond bien à l'indice de l'element i de la chaine l en sous entendant que l'indexation commence à zéro ?


    Merci beaucoup pour vos reponses aussi rapides, je vais essayer de finir mon programme d'ici ce soir, je vous tiens au courant.

    ps : je ne connaissais pas les regex mais je pense que mon prof ne prefere pas qu'on les utilise.

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 308
    Par défaut
    Citation Envoyé par cvicto Voir le message
    Lorsqu'on ecrit : for idx, i in enumerate(l),
    est ce que le idx correspond bien à l'indice de l'element i de la chaine l en sous entendant que l'indexation commence à zéro ?
    C'est exactement cela.

  6. #6
    Membre habitué
    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
    Par défaut
    Rebonjour,
    je pensais avoir reussi un programme qui me permettait d'obtenir une liste de couples correspondant aux monomes de la forme (coeff, degré) mais ca ne marche pas.
    En dessous le programme et un test montrant ce que j'obtiens :

    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
    def couples_cd(M):
    	C=[]
    	for i in M :
    		c=0
    		d=0
    		for j,k in enumerate(i):
    			if k in 'X':
    				c=(i[0:j])
    				for p,q in enumerate (i):
    					if q in '*':
    						d=(i[(p+1):])
    					else :
    						d==1
    		else:
    			c=i
    			d==0
    		C.append((c,d))
    	return C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    couples_cd(['3', '+4X', '-5X**2'])
    [('3', 0), ('+4X', 0), ('-5X**2', '2')]
    ici j'aimerais obtenir [('3',0), ('+4',1), ('-5',2)] voire meme [(3,0), (4,1), (-5,2)] mais enlever les guillemets et le signe + ne sera pas trop dur à faire après je pense.

    Si quelqu'un pouvait m'eclairer ce serait tres gentil.

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

Discussions similaires

  1. Creer des Liste à partir d'une liste
    Par pi_hellz dans le forum Général Python
    Réponses: 5
    Dernier message: 26/09/2013, 10h03
  2. Réponses: 7
    Dernier message: 22/06/2012, 13h12
  3. Réponses: 8
    Dernier message: 10/12/2009, 17h53
  4. Réponses: 2
    Dernier message: 01/05/2008, 14h36
  5. remplir une liste à partir d'une liste
    Par LeXo dans le forum Access
    Réponses: 7
    Dernier message: 14/04/2006, 13h29

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