2013-04-29 127 views
0

我试图完成这个尝试来计算字符串中有多少次"Z""E"。换句话说,我需要计算"ZE"多少次是给定的字符串:如何计算给定字符串中有多少个“ZE”

letters = "GOLDZEZEDUZZEOZBIX" 

为什么这个代码只返回1?

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

这是http://stackoverflow.com/questions/1155617/count-occurrence-of-a-character-in-a-的副本python-string – nietonfir 2013-04-29 21:56:38

+1

这个问题是计算单个字符,而不是子字符串。所选择的答案很明显地表明它与子串一样好,这意味着它正是OP所需要的,所以我投票结束。但我想指出,以防其他人不同意。 – abarnert 2013-04-29 21:58:55

+1

实际上,OP实际上并不是在问“我该如何做到这一点”,而是“为什么这段代码只返回1”,所以......实际上它不是一个dup。 – abarnert 2013-04-29 22:06:21

回答

2

因为你设置了数到一个if Z和E是数据。每ZE不一次for,但if

阅读for循环。

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

我猜你的教授不想要这最后一个,并且可能不希望前面的那个......但这只是一个猜测(因为这是首要作业)。

+1

请注意,您可以使用'if .. in ..'语法执行子字符串搜索:'如果数据中包含“ZE”:'。 – nemec 2013-04-29 22:00:06

+1

@nemec:我怀疑这是一项家庭作业,他们被赋予了通常愚蠢的人为约束。否则,首先使用'count'。但是,我应该提及这一点。 – abarnert 2013-04-29 22:01:25

3

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

letters.count('ZE') # returns 3 
+1

简短,简单,Pythonic! – nemec 2013-04-29 21:58:21

+0

几乎可以肯定地禁止他的作业:P – 2013-04-29 22:04:08

+2

@JoranBeasley:是的,但OP没有要求我们回答他的作业,或描述了约束条件。我试图猜测他们,但我认为这个答案更好(至少在问题的后半部分),因为它不会猜测,它只是回答OP所要求的。如果他不喜欢这个答案,他应该解决他的问题。 – abarnert 2013-04-29 22:05:33

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 

等。

相关问题