2016-03-06 94 views
2

我需要确定一个字符串中有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我有作为输入。我哪里做错了?

+6

鉴于'对于s在lett'使得'在同一时间(或者如果'lett'是一个空字符串空字符串)s'一个人物,怎么可能'LEN(S)'** **过任何东西除了'0'或'1'? – jonrsharpe

+0

@ Newbie_01,不要忘了[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)答案之一。 – jezrael

回答

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) 
+0

然后你必须把它转换成int。 – AMACB

+0

是的,但我不应该使用内置函数:/ –

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 
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 
+0

*“是的,但我不应该使用内置函数:/”* – vaultah

+1

对不起,我甚至没有考虑'sum'或'lower '。他们是如此常见的功能,我有些东西不认为它们是功能。 :) – MarkyPython

+0

不要为他写代码。这显然是功课。 – zondo

1

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

相关问题