如果字符在字符串中出现三次或更多次,请计算

时间:2016-03-06 14:20:18

标签: python string

我需要确定一个字符串中是否有3个或更多z,如果是,则返回1,否则返回0。

例如:

print punk('abc')
# should return 0
print punk('laz zzzz')
# should return 1

我的尝试:

def punk(s):
    lett=('z')
    for s in lett:
        if len(s)>=3:
            return 1
        else:
            if len(s)<=3:
                return 0

这只返回0,无论我有多少z作为输入。我哪里做错了?

4 个答案:

答案 0 :(得分:4)

如果您不想使用内置功能,可以尝试以下方法:

def punk(s):
    count = 0
    for letter in s:
        if letter == "z" or letter == "Z":
            count += 1
    if count >= 3:
        return 1
    else:
        return 0

答案 1 :(得分:3)

def punk(s):
    counter = 0
    for char in s:  # iterate over each character in s
        if char == 'z':            
            counter += 1
    return int(counter >= 3)   # int(False) => 0, int(True) => 1

您可以像这样使用内置string.count

def punk(s): 
    return int(s.count('z') >= 3)

也可以使用reduce这样实现:

int(reduce(lambda x,y: x+int(y=='z'), a, 0) >= 3)

答案 2 :(得分:3)

您需要遍历传入的字符串中的每个字符,而不是遍历lett中的每个项目。

def punk(string):
    letters = ('Z', 'z')
    zCount = 0
    for char in string:
        if char in letters:
            zCount += 1

    return 1 if zCount >= 3 else 0

答案 3 :(得分:1)

您的问题是您正在测试len(s),但s已定义,因为您说的是for s in lett:。因此,s的长度始终为1。另外,当您说for s in lett:时,您正在重新定义s,因此您的原始参数会被完全覆盖。相反,您可以创建一个计数器并使用for循环for c in lett:。然后,每当c'z'时,您就可以向计数器添加一个。我不会为你写出来因为这会迫使你作弊,但这是一种方法。