需要帮助在Python中编辑代码

时间:2013-07-05 12:01:03

标签: python

我最近才开始在python中编程。这是我在编程方面的第一次经历。

这是来自code academy的问题。我基本上需要:

  

“编写一个名为fizz_count的函数,它将列表x作为输入,并返回该列表中字符串"fizz"的计数。

     

例如,fizz_count(["fizz","buzz","fizz"])应返回2.“

这是我的代码:

def fizz_count(x): 
    count = 0
    for a in x:
        if a == "fizz":
           return fizz_count(x) == 1 + count
        else:
           return fizz_count(x) == count

但这不起作用。我哪里错了?

1 个答案:

答案 0 :(得分:8)

您似乎正在使用递归编程,但您不了解它应该如何工作。

您正在递归调用函数,但递归计数需要您将问题划分为子问题;求解一个并将其余部分委托给递归调用,或者将该集合拆分成子问题,直到你知道如何解决这个问题为止。但是,您尝试解决列表中所有元素的子问题,然后将整个列表传递给递归调用。这只会导致无限递归异常,因为您只看同一个问题集。

递归版本将是:

def fizz_count(x):
    if not x:
        return 0
    return (1 if x[0] == 'fizz' else 0) + fizz_count(x[1:])

这只是查看第一个元素,并将列表其余部分的计数委托给递归调用。如果列表为空,则返回0。

将列表细分为两半是另一种选择,只有当列表为空或只有一个元素时才返回:

def fizz_count(x):
    lenx = len(x)
    if not lenx:
        return 0
    if lenx == 1:
        return (1 if x[0] == 'fizz' else 0)
    return fizz_count(x[:lenx//2]) + fizz_count(x[lenx//2:])

如果你想循环遍历列表并按此计算(没有递归),请递增count并仅在完成循环时返回:

def fizz_count(x):
    count = 0
    for a in x:
        if a == 'fizz':
            count += 1
    return count

但是,最简单的解决方案是使用标准list.count()函数:

def fizz_count(x):
    return x.count('fizz')

并完成它。