如何减少输入字符串的长度?

时间:2018-11-10 15:49:43

标签: python recursion counter

我定义了一个返回数字的递归函数:

def counter(z, c = 0):

    z = len(z)
    if z == 0:
        return c
    else:
        return counter(z - 1,c + 1)

我知道在第二次调用时,该函数将为z分配整数3的长度。如何分配前一个字符串减去一个字符,以便我的函数计算每个字符?

4 个答案:

答案 0 :(得分:0)

您只需在第一次调用函数时传递z的长度即可。

def counter(z, c = 0):
if z == 0:
    return c
else:
    return counter(z - 1,c + 1)

# Main call
z = len(z)
result = counter(z)

答案 1 :(得分:0)

请勿执行z=len(z),因为您需要将原始z传递给递归调用。相反,请执行zl=len(z),将您的if更改为zl==0,然后将最后一行设为return counter(z[1:], c+1)。带冒号的方括号是切片运算符; "abc"[1:]=="bc"

... btw,技术上,您甚至不需要获取len()的{​​{1}},因为python在if表达式中将空列表视为虚假列表。因此,您的代码可能就是:

z

答案 2 :(得分:0)

您只需要对字符串进行切片。例如,使用async fetchComments(comment, margin) { return new Promise((resolve, reject) => { comment.map(async commentId => { let response = await fetch(`${STORY_URL}${commentId}.json`); let result = await response.json(); comments.push({ by: result.by, margin: margin }); if (comments.length === totalComments + 1) resolve(); if (result.kids !== undefined) this.fetchComments(result.kids, margin * 2); }); }); } 。这将返回所有字符减去最后一个字符。或者,您可以只用z[:-1]来计数。另外设置len(z)无效,因为您松开了字符串。

答案 3 :(得分:0)

一种可能的解决方案:传递一个没有计数器值的字符串,而不是递归调用中的切片,不带任何字符的字符串在字符串为空时终止:

def counter(s, c=0):
    if not s:
        return c
    else:
        return counter(s[:-1], c+1)

c = counter("abc")