Receita: Polinômios com Itertools
Adaptado de um e-mail de Rodrigo Senra
Código
1 from itertools import izip
2 class Polinomio(object):
3 def __init__(self, coef_exp, varname='x'):
4 # lista de pares ordenados
5 # (coeficiente, expoente)
6 self.coef_exp = coef_exp
7 self.varname = varname
8 def __str__(self):
9 """Vinicius dizia que beleza é fundamental!"""
10 def fmt(c, v, e):
11 if e==0: return '%d'%c
12 elif e==1: return '%d%s'%(c,v)
13 else: return '%d%s**%d'%(c,v,e)
14 return " + ".join([ fmt(c, self.varname, e) for c, e in
15 self.coef_exp])
16 def __iter__(self):
17 def _gen():
18 for c,e in self.coef_exp:
19 yield c, e
20 return _gen()
21 def __add__(self, polinomio):
22 if polinomio.varname != self.varname:
23 raise ValeuError
24 return Polinomio([(p1[0]+p2[0],p1[1]) for p1, p2\
25 in zip(polinomio, self.coef_exp)
26 if p1[1]==p2[1]], self.varname)
27
28 if __name__ == "__main__":
29 p1=Polinomio(((3,2),(7,1),(5,0)))
30 p2=Polinomio(((2,2),(4,1),(1,0)))
31 print "p1", p1
32 print "p2", p2
33 print "p1+p2", p1+p2
Volta para CookBook.