我试着编写一个递归函数,它将字符串和char作为输入。该函数返回字符串中char的第一个索引外观。如果char没有出现,则返回None。 我只有返回无问题。在我的情况下,当char不在字符串中时,函数会抛出错误,有任何建议吗?
def char_first_index(s,c):
if len_rec(s)==0:
return None
if s[0]==c:
return 0
return 1+ char_first_index(s[1:],c)
答案 0 :(得分:3)
您正在每次迭代时创建一个新切片,并且必须为每次递归添加1。相反,递归索引:
def char_first_index(s, c, index = 0):
if len(s) == index:
return None
if s[index] == c:
return index
return char_first_index(s, c, index + 1)
答案 1 :(得分:1)
如果字符不在输入中,则您的函数会尝试执行1+None
,因此会出错。试试这个:
def char_first_index(s,c):
if len_rec(s)==0:
return None
if s[0]==c:
return 0
answer = char_first_index(s[1:],c)
if answer is not None:
return 1+answer
else:
return answer
答案 2 :(得分:1)
首先我假设len_rec
是一个获取字符串长度的递归函数;你还没写过,所以我把它改成len()
进行测试。
其次,我不确定这个函数应该如何处理不在字符串中的字符,因为这意味着尝试将None
添加到数字中。
这是一个修改过的函数,它仍然使用了你的计数概念,但处理了None
被返回的情况:
def char_first_index(s,c):
if len(s)==0:
return None
elif s[0]==c:
return 0
else:
count = char_first_index(s[1:], c)
if count != None:
return count + 1
else:
return None