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
| #!/usr/bin/env python
# -*- coding:Utf-8 -*-
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
def decoupe(chaine,motif):
idx = chaine.index(motif)
nbc = len(motif)
c, e = chaine[:idx], chaine[idx+nbc:]
if not c or c=='+':
c = '1'
elif c=='-':
c = '-1'
if not e:
e = '1'
return c, e
def couples_cd(l):
decompo = []
for m in monome(l):
if not 'X' in m: # degré 0
coeff, expo = m, 0
elif 'X**' in m: # degré > 1
coeff, expo = decoupe(m,'X**')
elif 'X' in m: # degré 1
coeff, expo = decoupe(m,'X')
else: # erreur donnée
print('Problème monome : {0}'.format(m))
continue
decompo.append( ( float(coeff), int(expo) ) )
# Tri par exposant croissant
return sorted(decompo, key=lambda e: e[-1])
if __name__ == '__main__':
print(couples_cd('1-4X**3+3X**2'))
print(couples_cd('3+74X-5X**2'))
print(couples_cd('1-X**2+354X-456X**3+X**5')) |
Partager