associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Revisão 1e 2008-06-13 15:19:20

Excluir mensagem

PolinomiosItertools

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.


RodrigoSenra