2013-04-29 130 views
0

我試圖完成這個嘗試來計算字符串中有多少次"Z""E"。換句話說,我需要計算"ZE"多少次是給定的字符串:如何計算給定字符串中有多少個「ZE」

letters = "GOLDZEZEDUZZEOZBIX" 

爲什麼這個代碼只返回1?

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

這是http://stackoverflow.com/questions/1155617/count-occurrence-of-a-character-in-a-的副本python-string – nietonfir 2013-04-29 21:56:38

+1

這個問題是計算單個字符,而不是子字符串。所選擇的答案很明顯地表明它與子串一樣好,這意味着它正是OP所需要的,所以我投票結束。但我想指出,以防其他人不同意。 – abarnert 2013-04-29 21:58:55

+1

實際上,OP實際上並不是在問「我該如何做到這一點」,而是「爲什麼這段代碼只返回1」,所以......實際上它不是一個dup。 – abarnert 2013-04-29 22:06:21

回答

2

因爲你設置了數到一個if Z和E是數據。每ZE不一次for,但if

閱讀for循環。

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來表示這一點。或者,如果由於某種原因您不允許這樣做,請先找到"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') 

我猜你的教授不想要這最後一個,並且可能不希望前面的那個......但這只是一個猜測(因爲這是首要作業)。

+1

請注意,您可以使用'if .. in ..'語法執行子字符串搜索:'如果數據中包含「ZE」:'。 – nemec 2013-04-29 22:00:06

+1

@nemec:我懷疑這是一項家庭作業,他們被賦予了通常愚蠢的人爲約束。否則,首先使用'count'。但是,我應該提及這一點。 – abarnert 2013-04-29 22:01:25

3

你可以簡單地使用count方法:

letters.count('ZE') # returns 3 
+1

簡短,簡單,Pythonic! – nemec 2013-04-29 21:58:21

+0

幾乎可以肯定地禁止他的作業:P – 2013-04-29 22:04:08

+2

@JoranBeasley:是的,但OP沒有要求我們回答他的作業,或描述了約束條件。我試圖猜測他們,但我認爲這個答案更好(至少在問題的後半部分),因爲它不會猜測,它只是回答OP所要求的。如果他不喜歡這個答案,他應該解決他的問題。 – abarnert 2013-04-29 22:05:33

0

即使另一種解決辦法試試這個:

def keyCount(dataset, key): 
    return dataset.count(key) 
這種方法的

正確使用會再看看這樣的:

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

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

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

等。

相關問題