0

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

letters = "GOLDZEZEDUZZEOZBIX"

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

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

4 回答 4

3

您可以简单地使用以下count方法:

letters.count('ZE') # returns 3
于 2013-04-29T21:55:45.880 回答
2

因为您将计数设置为ifZ 并且 E 在数据中。不是for每个 ZE 一次,而是if.

阅读for循环。

于 2013-04-29T21:55:28.217 回答
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这个意思来表达。或者,如果由于某种原因不允许您这样做,请先找到 a"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')

我猜你的教授不想要最后一个,也可能不想要它之前的那个……但这实际上只是一个猜测(事实上,这首先是家庭作业)。

于 2013-04-29T21:55:34.183 回答
0

for even another solution try this:

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

correct usage of this method would then look like:

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

or

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

or

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

etc..

于 2014-02-14T19:53:14.987 回答