Reputation: 187
I'm a beginner in Python. Here is a simple code that I wrote in python that recursively counts the number of occurrences of a character in a string. The inputs are hardcoded. Please see the comments if required
# . : Logic : .
# Recursively counts the number of occurrences of a character
# in a given string and returns the count when the length of the string becomes zero
def recSearch(g_str, g_ch, val):
# Length of string is zero, hence function will terminate
if len(g_str) is 0:
x = val
print "Number of times [%s] occurs is %d" % (g_ch, x)
return val
# ERROR : Returning none instead of a number
# 1st character of string is a match
# Hence val is incremented
elif g_str[0] is g_ch:
recSearch(g_str[1:], g_ch, val + 1)
# 1st character of string is NOT a match
else:
recSearch(g_str[1:], g_ch, val)
strSer = "this is most probably a valid string"
charSer = "t"
# Answer should be 3 for this input
# Feel free to experiment
print "The input string = [%s]" % (strSer)
print "Character to be found = [%s]" % (charSer)
i = recSearch(strSer, charSer,0)
print "I should be getting a valid return value %d" % i
# But instead, I'm getting an error here
But i'm getting the following error
Traceback (most recent call last):
File "sample2.py", line 31, in <module>
print "I should be getting a valid return value %d" % i
TypeError: %d format: a number is required, not NoneType
What could be the cause?
Upvotes: 1
Views: 94
Reputation: 368944
The code is missing return
in recursive calls in elif
, else
blocks; returning function without return statement cause the None
to be returned.
elif g_str[0] is g_ch:
return recSearch(g_str[1:], g_ch, val + 1) # <---
else:
return recSearch(g_str[1:], g_ch, val) # <---
Upvotes: 3