我试图完成这个尝试来计算字符串中有多少次"Z"
吃"E"
。换句话说,我需要计算"ZE"
多少次是给定的字符串:如何计算给定字符串中有多少个“ZE”
letters = "GOLDZEZEDUZZEOZBIX"
为什么这个代码只返回1?
def is_eaten(data):
count = 0
if "Z" and "E" in data:
count += 1
return count
我试图完成这个尝试来计算字符串中有多少次"Z"
吃"E"
。换句话说,我需要计算"ZE"
多少次是给定的字符串:如何计算给定字符串中有多少个“ZE”
letters = "GOLDZEZEDUZZEOZBIX"
为什么这个代码只返回1?
def is_eaten(data):
count = 0
if "Z" and "E" in data:
count += 1
return count
因为你设置了数到一个if
Z和E是数据。每ZE不一次for
,但if
。
阅读for
循环。
为什么这段代码只返回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')
我猜你的教授不想要这最后一个,并且可能不希望前面的那个......但这只是一个猜测(因为这是首要作业)。
即使另一种解决办法试试这个:
def keyCount(dataset, key):
return dataset.count(key)
这种方法的
正确使用会再看看这样的:
>>> letters = "GOLDZEZEDUZZEOZBIX"
>>> key = "ZE"
>>> keyCount(letters, key)
3
或
>>> keyCount(letters, "ZE")
3
或
>>> keyCount("GOLDZEZEDUZZEOZBIX", "ZE")
3
等。
这是http://stackoverflow.com/questions/1155617/count-occurrence-of-a-character-in-a-的副本python-string – nietonfir 2013-04-29 21:56:38
这个问题是计算单个字符,而不是子字符串。所选择的答案很明显地表明它与子串一样好,这意味着它正是OP所需要的,所以我投票结束。但我想指出,以防其他人不同意。 – abarnert 2013-04-29 21:58:55
实际上,OP实际上并不是在问“我该如何做到这一点”,而是“为什么这段代码只返回1”,所以......实际上它不是一个dup。 – abarnert 2013-04-29 22:06:21