Python: Maximum recursion depth while getting the str of an object
15,427
Solution 1
Because when you do
convert(int(round(number, -1)))
you are calling convert(50)
. Since 50 isn't covered by your if
statements, it gets to the else
again, and calls convert(50)
again, and so forth.
Solution 2
The problem here is that round(46, -1)
will produce the value 50
. When convert
is called with the value 50
it will go to the exact same line
lettercount += convert(int(round(number, -1)))
The round(50, -1)
call will produce 50
and at this point the convert
function will execute infinitely
Author by
Tetramputechture
Updated on June 25, 2022Comments
-
Tetramputechture almost 2 years
I'm making a program to get the amount of letters in a number:
def convert(number): lettercount = 0 numstr = str(number) # One's places if len(numstr) is 1: if number == 1 or number == 2 or number == 6: lettercount += 3 elif number == 4 or number == 5 or number == 9: lettercount += 4 else: lettercount += 5 # Ten's places elif len(numstr) is 2: if number == 10: lettercount += 3 elif number == 11 or number == 12: lettercount += 6 elif number == 15 or number == 16: lettercount += 7 elif number == 13 or number == 14 or number == 19: lettercount += 8 elif number == 17 or number == 18: lettercount += 9 elif number == 20 or number == 30 or number == 40 or\ number == 80 or number == 90: lettercount += 6 else: lettercount += convert(int((numstr)[-1])) lettercount += convert(int(round(number, -1))) return lettercount print "88 has %i letters in its name." % convert(88) print "23 has %i letters in its name." % convert(23) print "46 has %i letters in its name." % convert(46)
It works just fine and returns a correct response for the 88 and 23, but it gives a recursion depth error on 46. I'm confused; why does it happen on just 46?
Fixed code:
def convert(number): lettercount = 0 numstr = str(number) # One's places if len(numstr) == 1: if number == 1 or number == 2 or number == 6: lettercount += 3 elif number == 4 or number == 5 or number == 9: lettercount += 4 else: lettercount += 5 # Ten's places elif len(numstr) == 2: if number == 10: lettercount += 3 elif number == 40 or number == 50: lettercount += 5 elif number == 11 or number == 12 or number == 20 or number == 30 or\ number == 80 or number == 90: lettercount += 6 elif number == 15 or number == 16: lettercount += 7 elif number == 13 or number == 14 or number == 19: lettercount += 8 elif number == 17 or number == 18: lettercount += 9 else: lettercount += convert(int((numstr)[-1])) lettercount += convert((int(numstr) // 10) * 10) return lettercount print "88 has %i letters in its name." % convert(88) print "23 has %i letters in its name." % convert(23) print "46 has %i letters in its name." % convert(46)