Simple recursive sum function | what's the cause of the weird behaviour?
Rotwang
sg552 at hotmail.co.uk
Sat Jul 6 16:10:48 EDT 2013
On 06/07/2013 19:43, Joshua Landau wrote:
> On 6 July 2013 13:59, Russel Walker <russ.pobox at gmail.com> wrote:
>> Since I've already wasted a thread I might as well...
>>
>> Does this serve as an acceptable solution?
>>
>> def supersum(sequence, start=0):
>> result = type(start)()
>> for item in sequence:
>> try:
>> result += supersum(item, start)
>> except:
>> result += item
>> return result
>
> It's probably more robust to do:
>
> def supersum(sequence, start=0):
> for item in sequence:
> try:
> result = result + supersum(item, start)
> except:
> result = result + item
> return result
I assume you meant to put "result = start" in there at the beginning.
> as that way you aren't assuming the signature of type(start).
It's not quite clear to me what the OP's intentions are in the general
case, but calling supersum(item, start) seems odd - for example, is the
following desirable?
>>> supersum([[1], [2], [3]], 4)
22
I would have thought that the "correct" answer would be 10. How about
the following?
def supersum(sequence, start = 0):
result = start
for item in reversed(sequence):
try:
result = supersum(item, result)
except:
result = item + result
return result
More information about the Python-list
mailing list