繁体   English   中英

在使用Python编辑代码时需要帮助

[英]Need help with editing code in Python

我只是最近才开始用python编程。 这是我第一次编程经验。

这是代码学院的问题。 我基本上需要:

“编写一个名为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

但这是行不通的。 我哪里错了?

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

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

递归版本为:

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')

并完成它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM