[Baypiggies] return value from a recursive function is None while it should not be ...
Benjamin Sergeant
bsergean at gmail.com
Wed Sep 3 20:57:50 CEST 2008
== 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
More information about the Baypiggies
mailing list