Receita: Polinômios com Itertools
Adaptado de um e-mail de Rodrigo Senra
Código
from itertools import izip
class Polinomio(object):
def __init__(self, coef_exp, varname='x'):
# lista de pares ordenados
# (coeficiente, expoente)
self.coef_exp = coef_exp
self.varname = varname
def __str__(self):
"""Vinicius dizia que beleza é fundamental!"""
def fmt(c, v, e):
if e==0: return '%d'%c
elif e==1: return '%d%s'%(c,v)
else: return '%d%s**%d'%(c,v,e)
return " + ".join([ fmt(c, self.varname, e) for c, e in self.coef_exp])
def __iter__(self):
def _gen():
for c,e in self.coef_exp:
yield c, e
return _gen()
def __add__(self, polinomio):
if polinomio.varname != self.varname:
raise ValeuError
return Polinomio([(p1[0]+p2[0],p1[1]) for p1, p2\
in zip(polinomio, self.coef_exp)
if p1[1]==p2[1]], self.varname)
if __name__ == "__main__":
p1=Polinomio(((3,2),(7,1),(5,0)))
p2=Polinomio(((2,2),(4,1),(1,0)))
print "p1", p1
print "p2", p2
print "p1+p2", p1+p2Volta para CookBook.


