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

Python 如何计算给定字符串中有多少个“ZE”,python,string,counter,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 因为如果Z和E在数据中,则将count设置为1。不是每次一次,但如果 仔细阅读循环 为什么这个代码只返回1 d

我试图完成这个尝试,计算Z在字符串中吃E的次数。换句话说,我需要计算ZE在给定字符串中的次数:

letters = "GOLDZEZEDUZZEOZBIX"
为什么这个代码只返回1

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

因为如果Z和E在数据中,则将count设置为1。不是每次一次,但如果

仔细阅读循环

为什么这个代码只返回1

def is_eaten(data):
    count = 0
    if "Z" and "E" in data:
        count += 1
        return count
原因是多方面的

首先,代码中没有循环,因此它不可能返回超过1的值

第二,如果数据中的Z和E不是你所想的。如果Z为真,则为真,数据中的E也为真。换句话说,它相当于数据中的if Z和E。但是,即使括号的方向相反,如果数据中有Z和E,它也不会起作用。因为Z和E只是E,所以试试看,这只是检查E是否出现在数据中

您需要在数据中输入if Z,在数据中输入E来执行您试图执行的操作

第三,即使你解决了这个问题,逻辑也没有任何意义。这是真的,如果任何地方有Z,任何地方有E。所以,对于EZ来说是真的,这显然是错误的。如果子字符串ZE出现在数据中,您只希望它为真,对吗?您可以在数据中使用if-ZE来表示这一点。或者,如果出于某种原因不允许这样做,首先找到一个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')
或者,更简单地说:

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')
我猜你的教授不想要最后一个,也可能不想要之前的一个……但这实际上只是一个猜测,因为这首先是家庭作业。

你可以简单地使用以下方法:


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

def keyCount(dataset, key):
    return dataset.count(key)
此方法的正确用法如下所示:

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


等等

这是问题的重复,问题是计算单个字符,而不是子字符串。选择的答案清楚地表明,它与子字符串同样有效,这意味着它正是OP需要的,所以我投票决定关闭。但我想指出的是,万一其他人不同意。实际上,OP并不是在问我该怎么做,但为什么这段代码只返回1,所以…它实际上不是一个dup。简短、简单、Pythonic!几乎可以肯定的是,他的家庭作业限制了他:P@JoranBeasley:是的,但是OP没有问我们他的家庭作业的答案,也没有描述限制条件。我试着猜他们,但我认为这个答案至少对问题的后半部分更好,因为它不尝试猜测,它只是回答了OP提出的问题。如果他不喜欢这个答案,他应该修正他的问题。请注意,您可以使用If.进行子字符串搜索。。在里面语法:如果ZE在数据中:。@nemec:我怀疑这是一个家庭作业,他们被赋予了通常愚蠢的人工约束;否则,首先使用count。但是,是的,我应该提到这一点。