PolinomiosItertools

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+p2

Volta para CookBook.


RodrigoSenra

PolinomiosItertools (editada pela última vez em 2008-09-26 14:07:39 por localhost)