2010-05-28 263 views
11

Python newb在這裏。我試圖計算給定字符串中字母「a」的數量。代碼如下。它保持字符串「香蕉」返回1而不是3。任何輸入讚賞。字母數字字符串

def count_letters(word, char): 
    count = 0 
    while count <= len(word): 
     for char in word: 
      if char == word[count]: 
       count += 1 
      return count 



print count_letters('banana','a') 
+0

我覺得你的代碼是縮進正確。你會得到一個縮進錯誤。 – Lucas 2010-05-28 21:12:16

回答

26

其他的答案顯示什麼是你的代碼錯誤。但也有一個內置的方式做到這一點,如果你不只是做這個練習:

>>> 'banana'.count('a') 
3 

Danben給這個修改後的版本:

def count_letters(word, char): 
    count = 0 
    for c in word: 
    if char == c: 
     count += 1 
    return count 

這裏有一些其他方式來做,希望他們會教你更多關於Python的知識!

相似,但較短的for循環。利用這樣的事實布爾可如果假的變成1,如果真和0:

def count_letters(word, char): 
    count = 0 
    for c in word: 
    count += (char == c) 
    return count 

短的循環大致可以變成列表/發電機內涵。這將創建對應於每個字母整數列表,用0,如果如果它不信不匹配char和1,並將其加:

def count_letters(word, char): 
    return sum(char == c for c in word) 

下一個過濾掉所有的字符,唐」牛逼比賽char和計數有多少是留給:

def count_letters(word, char): 
    return len([c for c in word if c == char]) 
+0

謝謝,但是我試圖讓我的頭在這個概念。 – shaytac 2010-05-28 21:11:58

+2

你不需要'int()'在Python中的布爾值周圍:'True == 1 and False == 0' http://ideone.com/k4QLc http://ideone.com/5dHkK – jfs 2010-05-29 18:00:24

+0

@ J.F。塞巴斯蒂安:非常有趣!從來不知道。編輯,以反映 – Claudiu 2010-05-30 07:56:15

6

return是在你的for循環!要小心縮進,你想要return count行在循環之外。由於for循環遍歷word中的所有字符,所以外部while循環完全不需要。

清潔的後續版本:

def count_letters(word, to_find): 
    count = 0 
    for char in word: 
     if char == to_find: 
      count += 1 
    return count 
+0

非常感謝這一款。 – shaytac 2010-05-28 21:16:15

11

的一個問題是,你正在使用count既指的是,你正在檢查的字的位置,你已經看到的char數量,以及你正在使用char來引用您正在檢查的輸入字符以及字符串中的當前字符。改爲使用單獨的變量。

另外,將return語句移到循環外部;否則在檢查第一個字符後你會一直返回。

最後,您只需要一個循環來遍歷字符串。擺脫外部while循環,你將不需要跟蹤字符串中的位置。

考慮這些建議,您的代碼應該是這樣的:

def count_letters(word, char): 
    count = 0 
    for c in word: 
    if char == c: 
     count += 1 
    return count 
3

我看到一些東西是錯誤的。

  1. 您重複使用標識符char,這樣會導致問題。
  2. 您的意思是if char == word[count]而不是word[some index]
  3. 您在for循環的第一次迭代之後返回!

你甚至不需要while。如果重命名字符參數去search

for char in word: 
    if char == search: 
     count += 1 
return count 
2

或者您可以使用:

mystring = 'banana' 
number = mystring.count('a') 
3

你有許多問題:

  • 其他人已經指出您的縮進存在問題。
  • 不需要嵌套循環。只需一個循環就足夠了。
  • 您正在使用char來表示兩個不同的事物,但for循環中的char變量將覆蓋參數中的數據。

此代碼修復所有這些錯誤:

def count_letters(word, char): 
    count = 0 
    for c in word: 
     if char == c: 
      count += 1 
    return count 

一個更簡潔的方式來寫這個是用生成器表達式:

def count_letters(word, char): 
    return sum(char == c for c in word) 

或者只是使用內置的方法count這是爲你做的:

print 'abcbac'.count('c') 
0
def count_letter(word, char): 
    count = 0 
    for char in word: 
     if char == word: 
      count += 1 
    return count  #Your return is inside your for loop 
r = count_word("banana", "a") 
print r 
0
x=str(input("insert string")) 
c=0 
for i in x: 
    if 'a' in i: 
     c=c+1 
print(c)   
+0

請解釋您的代碼如何回答問題。 – 2013-08-29 20:31:25

1
count_letters="" 

number=count_letters.count("") 

print number 
6

一個簡單的方法如下:

def count_letters(word, char): 
    return word.count(char) 

或者,有另一種方式直接計數的每個元素:

from collections import Counter 
Counter('banana') 

當然,你可以指定一個元素,例如

Counter('banana')['a'] 
-2

字=輸入( 「輸入一個單詞: 」)

打印(「 \ nHere在你的單詞中每個字母:」) 以字字母: 打印(信)

輸入(「\ n \ n按輸入鍵退出」)

0

"banana".count("ana")返回1而不是2!

我認爲該方法遍歷字符串(或列表)的步長等於子字符串的長度,所以它沒有看到這種東西。

所以,如果你想要一個「完全數」你有步驟的正確環1

糾正我,如果我錯了,以實現自己的反...