[Baypiggies] return value from a recursive function is None while it should not be ...

Benjamin Sergeant bsergean at gmail.com
Wed Sep 3 22:00:31 CEST 2008


That helped ... it looks like a missing ; level problem ... :)

Thanks !
Benjamin.

On Wed, Sep 3, 2008 at 12:18 PM, Jason Lai <jason.lai at gmail.com> wrote:
> You need to put "return" in front of "find_recurring_part(result[0], True)"
>
> Hope that helps,
>
>  - Jason
>
> On Wed, Sep 3, 2008 at 11:57 AM, Benjamin Sergeant <bsergean at gmail.com>
> wrote:
>>
>> == The background ==
>>
>> I'm trying to solve problem 26 from project euler:
>> http://projecteuler.net/index.php?section=problems&id=26
>> The goal is to find digits recurring cycle in rational number fractional
>> parts.
>> 1 / 3 = 0.3333333 -> 3 is a recuring integer
>> 1 / 7 = 0.142857
>>
>> == The python problem ==
>>
>> I have the following piece of code that try to solve that, probably
>> not elegant but it kind of work. You can copy paste it and you should
>> have the same output as I have, an assertion error: assert (
>> recurring_cycle(3) == '3'). find_recurring_part() returns a, that is
>> printed and equals 3, but when recurring_cycle get it, it has become
>> None !!
>>
>> Does anyone know what's going on ?
>>
>> Thanks !
>> - Benjamin.
>>
>> $ cat level26_strangeness.py
>> #!/usr/bin/env python
>>
>> from decimal import Decimal, getcontext
>> from re import findall
>>
>> def find_recurring_part(a, found):
>>    '''
>>    >>> re.findall(r'(\d+)\1', '32323232')
>>    ['3232']
>>    '''
>>    result = findall(r'(\d+)\1', a)
>>    print a, result, found
>>    if len(result) == 0:
>>        return a if found else None # doing an old school if else does not
>> help
>>    else:
>>        find_recurring_part(result[0], True)
>>
>> def recurring_cycle(i):
>>    q = Decimal(1) / Decimal(i)
>>    q = str(q)[2:]
>>    return find_recurring_part(q, False)
>>
>> getcontext().prec = 10 # increase for bigger numbers
>> assert ( recurring_cycle(2) == None)
>> assert ( recurring_cycle(3) == '3')
>>
>> $ ./level26_strangeness.py
>> 5 [] False
>> 3333333333 ['33333'] False
>> 33333 ['33'] True
>> 33 ['3'] True
>> 3 [] True
>> Traceback (most recent call last):
>>  File "./level26_strangeness.py", line 25, in <module>
>>    assert ( recurring_cycle(3) == '3')
>> AssertionError
>> _______________________________________________
>> Baypiggies mailing list
>> Baypiggies at python.org
>> To change your subscription options or unsubscribe:
>> http://mail.python.org/mailman/listinfo/baypiggies
>
>


More information about the Baypiggies mailing list