Aquí lo único que haría para cualquier caso es sacar la comparación en una funciòn para que no este tan hardcoded
from typing import List, Tuple begin = 0 end = 1000 multiples= (3,5) """ Esta función revisa si es divisible entre todos los multiplos propuestos dentro del mundo de los naturales y retorna un booleano en caso de que así sea """ def is_divisible(tb_divided:int, multiples: List[int]) -> bool: return any((tb_divided%mul == 0 for mul in multiples)) def euler001(n: int, multiples:Tuple[int]) -> int: return sum(i for i in range(1, n) if is_divisible(i,multiples)) print(euler001(end, multiples)) On Tue, Sep 4, 2018 at 5:33 AM Chema Cortes <pych...@gmail.com> wrote: > > > El lun., 3 sept. 2018 a las 21:12, AGTUGO (<agt...@gmail.com>) escribió: > >> """ >> Problema tomado de >> https://projecteuler.net/problem=1 >> >> >> If we list all the natural numbers below 10 that are multiples >> of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. >> Find the sum of all the multiples of 3 or 5 below 1000. >> >> Si listamos todos los numeros naturales menores a 10 que son >> múltiplos de 3 o 5 obtenemos 2, 5, 6 y 9. La suma de los múltiplos es 23. >> Encuentra la suma de los múltiplos de 3 o 5 menores de 1000. >> >> >> """ >> >> """ >> Este es mi aporte de código no esta diseñado para ser eficiente, >> el objetivo es jugar con el lenguaje. Ojalá puedan compartir >> una visión interesante de como resolver este problema. >> Si tienen una forma más eficiente de hacer el set o más elegante también >> es bienvenido. >> Saludos. >> """ >> >> import itertools >> begin = 0 >> end = 1000 >> multiples= (3,5) >> >> x = [range(begin,end,i) for i in multiples] >> x = sum(set(itertools.chain(*x))) >> >> print(x) >> >> > Con este tipo de retos, es interesante que sea lo más simple posible. En > el enunciado sólo pide la suma, no es preciso guardar ninguno de los > resultados intermedios. > > Lo más simple sería: > > def euler001(n: int) -> int: > return sum(i for i in range(1, n) if i%3 == 0 or i%5 ==0) > > ... que es una forma concisa de poner lo que propone agus en otro mensaje. > > Una forma más efectiva, aunque muy poco "escalable" en caso de que fueran > más múltiplos a considerar: > > def euler001(n: int) -> int: > return sum(range(3, n, 3)) + sum(range(5, n, 5)) - sum(range(15, n, > 15)) > > > -- > Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": > https://blog.ch3m4.org > Buscador Python Hispano: http://busca.ch3m4.org > <https://blog.ch3m4.org/pages/busqueda-python-es/> > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > -- Arturo Muñoz Tolosa
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es