Even though you've worked it out -- a couple of tips: On Dec 9, 5:39 pm, SiWi <wimmersi...@googlemail.com> wrote: > On Dec 9, 6:36 pm, SiWi <wimmersi...@googlemail.com> wrote: > > > > > Dear python community, > > I've got a wierd problem and I hope you can help me out at it. > > I wrote the following code to find the Sum of the factorial of the > > digits of a number (this is for Project Euler 74): > > > def fac(n): > > x=1 > > for i in range(2,n+1): > > x*=i > > return x >
numpy/scipy etc... are quite useful for Euler :) They contain a function to do factorials (and loads more). This to one of the readable uses of 'reduce': def fac(n): reduce(operator.mul, xrange(2, n+1), n) > > t=tuple(fac(n) for n in range(1,10)) > > > def decimals(x): > > i=1 > > d=[] > > while x>0: > > d.append(x%10) > > x=x/10 > > return d The builtin str object can take integers and return it as a string. def decimals(x): return map(int, str(x)) decimals(145) == [1, 4, 5] > > > def sumfac(x): > > return sum(t[n-1] for n in decimals(x)) > And join the two: print sum(fac(n) for n in decimals(145)) > > The problem is that i get the following results, for which I can't see > > any reason: > > sumfac(145)->145 (1!+4!+5!=1 + 24 +120 = 145) - ok > > sumfac(1454)-> 169 - ok > > sumfac(45362) -> 872 - ok > > sumfac(363600) -> 727212 - wrong, should be1454 > > > Greetings, > > SiWi. > > Oops, found it myself. You can ignote the message above. You might also find it useful to write generators (esp. for primes and factorials). Cheers, Jon. -- http://mail.python.org/mailman/listinfo/python-list