Ignacio Mondino wrote:
On Tue, Jun 15, 2010 at 8:49 AM, superpollo<ute...@esempio.net>  wrote:
goal (from e.c.m.): evaluate
1^2+2^2+3^2-4^2-5^2+6^2+7^2+8^2-9^2-10^2+...-2010^2, where each three
consecutive + must be followed by two - (^ meaning ** in this context)

my solution:

s = 0
for i in range(1, 2011):
...     s += i**2
...     if not (i+1)%5:
...         s -= 2*i**2
...     if not i%5:
...         s -= 2*i**2
...
print s
536926141


bye

I think This one is pretty, clean, using the standard library.
pretty pythonic.

def sign_and_sqr(n):
""" return a numbers square a change the sign accordingly
     if n % 5 == 0 or (n + 1) % 5 == 0:

imho this fails DRY too much to be wholly pythonic,
write rather

      if n%5 in (0,4) :

         return  (n ** 2) * -1
     else:
         return n ** 2

result = sum([sign_and_sqr(x) for x in range(0,2011)])
print result

ok, the function has two exits, but im lazy at the moment :)




--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to