2016-03-06 169 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'。我不會爲你寫出來,因爲這會迫使你作弊,但這是做到這一點的一種方式。

相關問題