[pyar] Devolver 2 valores generados por función yield

Matias Graña matias.alejo en gmail.com
Lun Oct 6 23:19:32 ART 2014


-- M
El oct 5, 2014 6:26 p.m., "Mati Barriento" <elmatibarriento en gmail.com>
escribió:
>
> Querida lista, tengo esta funcion que genera "longer" cantidad de cifras
de Pi
> def make_pi(longer):
>       i = -1
>       q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
>       while i < longer:
>          if 4 * q + r - t < m * t:
>             i += 1
>             yield m
>             q, r, t, k, m, x = 10*q, 10*(r-m*t), t, k, (10*(3*q+r))//t -
10*m, x
>          else:
>             q, r, t, k, m, x = q*k, (2*q+r)*x, t*x, k+1,
(q*(7*k+2)+r*x)//(t*x), x+2
>

No lo probé, pero por lo que veo, si quitás las variables longer e i tenés
un generador infinito:

def make_pi():
      q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
      while True:
         if 4 * q + r - t < m * t:
            yield m
            q, r, t, k, m, x = 10*q, 10*(r-m*t), t, k, (10*(3*q+r))//t -
10*m, x
         else:
            q, r, t, k, m, x = q*k, (2*q+r)*x, t*x, k+1,
(q*(7*k+2)+r*x)//(t*x), x+2

Perdón si quedo mal la indentación, estoy con el celular y es difícil ver
bien los espacios.
Después de eso, cualquiera de las soluciones que te dieron funcionan.

Pregunta al margen: de dónde salió el algoritmo?

> Lo que necesito es consumir 2 veces la funcion para devolver un par de 2
cifras, es decir: '14', '15' etc, y asi la cantidad que "longer" haya
definido (o longer x2)
>
> trate de:
> x = next(make_pi(longer))
> y = next(make_pi(longer))
>  return tuple([x,y])
>
> pero devolvia 2 veces el mismo numero....
>
> Uso python 3.3
>
> GRACIAS!!
>
>

Saludos,
Matías
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20141006/0b94766b/attachment.html>


More information about the pyar mailing list