字母计数字符串

时间:2010-05-28 21:04:08

标签: python

Python newb here。我试图计算给定字符串中字母“a”的数量。代码如下。它在字符串“banana”中保持返回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')

12 个答案:

答案 0 :(得分:36)

其他答案显示您的代码有什么问题。但是,如果您不仅仅是为了练习,还有一种内置的方法可以做到这一点:

>>> '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,如果为假,则为0:

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

循环的简称通常可以转换为列表/生成器的理解。这将创建一个与每个字母对应的整数列表,如果字母与char不匹配则为0,如果为,则为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])

答案 1 :(得分:11)

一个问题是,您使用count来引用您正在检查的字词中的位置,以及您看到的char的数量,并且您正在使用char引用要检查的输入字符和字符串中的当前字符。请改用单独的变量。

此外,将return语句移出循环;否则你将在检查第一个字符后总是返回。

最后,您只需要一个循环来迭代字符串。摆脱外部while循环,您不需要跟踪字符串中的位置。

考虑到这些建议,您的代码将如下所示:

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

答案 2 :(得分:7)

一种简单的方法如下:

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

或者,还有另一种方法直接计算每个元素:

from collections import Counter
Counter('banana')

当然,您可以指定一个元素,例如

Counter('banana')['a']

答案 3 :(得分: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

答案 4 :(得分:3)

我看到一些错误。

  1. 您重复使用标识符char,因此会导致问题。
  2. 您说if char == word[count]而不是word[some index]
  3. 在for循环的第一次迭代后返回!
  4. 您甚至不需要while。如果将char参数重命名为search

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

答案 5 :(得分: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')

答案 6 :(得分:2)

或者您可以使用:

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

答案 7 :(得分:1)

count_letters=""

number=count_letters.count("")

print number

答案 8 :(得分: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
  
    
      

3

    
  

答案 9 :(得分:0)

x=str(input("insert string"))
c=0
for i in x:
   if 'a' in i:
      c=c+1
print(c)        

答案 10 :(得分:0)

UITableViewCell返回1而不是2!

我认为该方法使用等于子字符串长度的步长迭代字符串(或列表),因此它不会看到这种东西。

所以,如果你想要一个&#34;完全计数&#34;你必须使用正确的第1步循环实现自己的计数器

如果我错了,请纠正我......

答案 11 :(得分:0)

下面的程序以一个字符串作为输入,输出一个pandas DataFrame,表示字母数。


样本输入
你好
样本输出
字符 频率
0 h 1
1 e 1
2 l 2
3 o 1

import pandas as pd

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

text = input()
text_split = text.split()
list1 = []
list2 = []
for i in text_split:
    for j in i:
        counter = count_letters (text, j)
        list1.append(j)
        list2.append(counter)
dictn = dict(zip(list1, list2))
df = pd.DataFrame (dictn.items(), columns = ['char', 'freq.'])
print (df)