[Tutor] self keyword in recursive function

Ritwik Raghav ritwikraghav14 at gmail.com
Sat May 31 06:41:18 CEST 2014


Alan Gauld wrote:

>On 30/05/14 14:14, Ritwik Raghav wrote:
>> I joined the topcoder community tomorrow and tried solving the
>> PersistentNumber problem:
>
>Time travel! I love it already... :-)
>
>> 8*1 = 8. Thus, the persistence of 99 is 2. You will be given n, and you
> >must return its persistence."
>>
>> It asks to define a function def getPersistence(self, n). I solved the
>> problem in IDLE. My code is:
>
>You seem to have solved the problem.
>Your code could be cleaned up a little but it seems
>to work. The fact that the exercise asks for a self
>argument suggests that it is supposed to be part of
>a class definition.

That much I figured out. But I have never worked with classes in Python.
Neither have I read about them. Please suggest one book I should read to
understand class and objects in Python.

>
>Is there a class definition anywhere that you are
>supposed to extend?
>

I have read that Topcoder implements the code inside a class. So, yes this
code is supposed to be the part of that class and public.

>|Some comments on the code below:
>
>> def getPersistence(n,count = 0)
>
>Since you never get passed count as an argument you
>could just make it a variable. You only need it as
>an argument if you use recursion but the problem
>didn't ask for that...
>
>>      product = 1
>>      if len(str(n)) == 1:
>>          return count
>>      else:
>>          a = str(n)
>>          for i in range(len(a)):
>>              product *= int(a[i])
>
>This is not good Python style.
>Its better to use
>
>for c in a:
>    product += int(c)
>

Thanks, I will implement so.

>>          count += 1
>>          return getPersistence(product,count)
>
>Rather than using recursion you could have used
>a while loop (untested code!):
>
>if n < 10:
>    return 0
>product = 1
>while True:
>    count += 1
>    a = str(n)
>    for c in a:
>       product *= int(c)
>    if product < 10:
>       break
>return count
>

I thought recursion would be better.

>> Now plz help me to convert the above code in specified format. Or help
>> me understand how to recreate the function as specified.
>
>You have created a function that does what is needed, it just doesn't
>have a self parameter. self is only used when the function is part of a
>class definition.
>
>Without sight of the class that it should be part of we can't offer much
>more help.

Thanks for your help Alan.

-- 
Ritwik Raghav
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20140531/3c46abc6/attachment-0001.html>


More information about the Tutor mailing list