如何计算给定字符串中有多少“ZE”

时间:2013-04-29 21:53:10

标签: python string counter

我正在尝试完成此次尝试,以计算字符串中"Z""E"次的次数。换句话说,我需要计算给定字符串中"ZE"的次数:

letters = "GOLDZEZEDUZZEOZBIX"

为什么此代码只返回1?

def is_eaten(data):
    count = 0
    if "Z" and "E" in data:
        count += 1
        return count

4 个答案:

答案 0 :(得分:3)

您只需使用count方法:

letters.count('ZE') # returns 3

答案 1 :(得分:2)

因为您将计数设置为一个if Z和E在数据中。每个ZE不是for,而是if

阅读for循环。

答案 2 :(得分:2)

  

为什么此代码只返回1?

有多重原因。

首先,代码中没有循环,因此无法返回超过1的循环。

其次,if "Z" and "E" in data并不代表你的想法。如果"Z"为真,并且"E" in data为真,则为真。换句话说,它相当于if ("Z") and ("E" in data)。但是,即使括号走向另一个方向,它是if ("Z" and "E") in data)它也行不通。由于"Z" and "E"仅为"E"(尝试查看),因此只会检查"E"是否出现在数据中。

您需要if "Z" in data and "E" in data来执行您要执行的操作。

第三,即使你解决了这个问题,逻辑也没有任何意义。如果任何地方都有“Z”,任何地方都有“E”,那就是这样。因此,对于“EZ”来说,情况确实如此,这显然是错误的。如果子字符串"ZE"出现在数据中,您只希望它为真,对吧?您可以使用if "ZE" in data来表示这一点。或者,如果您因某些原因不允许这样做,请先找"Z"并检查下一个字符是否为"E"


这是一种你可以做到这一点的方式(不是一种非常好的好的方式,但最接近我能想到你尝试过的方式):

def count_eaten(data):
    count = 0
    while True:
        index = data.find('Z')
        if index == -1:
            return count
        data = data[index+1:]
        if data[0] == 'E':
            count += 1

或者更简单:

def count_eaten(data):
    count = 0
    while True:
        index = data.find('ZE')
        if index == -1:
            return count
        data = data[index+1:]
        count += 1

或者,更简单:

def count_eaten(data):
    return data.count('ZE')

我猜你的教授不想要这个最后一个,并且可能不想要它之前的那个......但那真的只是一个猜测(因为这是事实上这是第一个作业)。

答案 3 :(得分:0)

对于其他解决方案,请尝试以下方法:

def keyCount(dataset, key):
    return dataset.count(key)

这种方法的正确用法如下:

>>> letters = "GOLDZEZEDUZZEOZBIX"
>>> key = "ZE"
>>> keyCount(letters, key)
3

>>> keyCount(letters, "ZE")
3

>>> keyCount("GOLDZEZEDUZZEOZBIX", "ZE")
3

等。