2010-05-28 154 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

纠正我,如果我错了,以实现自己的反...

相关问题