练习7.9在“如何像计算机科学家(python)一样思考”中测量字符串中字符的出现次数

时间:2011-01-16 21:45:34

标签: python string

问题是如何编写一个程序来测量字符在python中以一般化的方式出现在字符串中的次数。

我写的代码:

def countLetters(str, ch):
   count=0
   index=0
   for ch in str:
     if ch==str[index]:
       count=count+1
     index=index+1
   print count

当我使用此函数时,它会测量字符串的长度,而不是字符串中字符出现的次数。我做错了什么?编写此代码的正确方法是什么?

4 个答案:

答案 0 :(得分:5)

你正在覆盖'ch'变量:

def countLetters(str, ch):
#                      ^ the character you are looking for
    count=0
    index=0
    for ch in str:
#        ^ the string character you are trying to check
        if ch==str[index]:  # ???
            count=count+1
        index=index+1
    print count

(另外,返回值通常比打印它更有用。)

内置方法是str.count:

"aaabb".count("a")  -> 3

如何重写代码:

def countLetters(search_in, search_for):
    count = 0
    for s in search_in:    # iterate by string char, not by index
        if s==search_for:
            count += 1
    return count

和快速的pythonic替代品:

def countLetters(search_in, search_for):
    return sum(1 for s in search_in if s==search_for)

答案 1 :(得分:2)

从逻辑上思考运行代码时会发生什么:由于循环中的测试在第一次迭代中成功,因此每次都能保证成功!您只是检查Python中的迭代是否有效。

正确的配方是

def count(s, input):
    count = 0
    for c in s:
        if c == input:
            count += 1

或者,相当于

def count(input):
    return sum(c == input for c in s)

但你也可以这样做:

s.count(c)

答案 2 :(得分:0)

你的循环错了。

这应该有效:

  for s in str:
     if ch == s:
       ...

这种方式index变量将不会被使用,您可以删除它。如果您想使用index,请将for更改为:

for index in range(len(str)):
   ... (rest is OK but ...)
   ... (do not increase index in loop body)

您还可以通过+=运算符增加变量,如:

cnt += 1

所以完成的代码将如下所示:

def countLetters(str, ch):
   count = 0
   for s in str:
     if ch == s:
       count += 1
   print count

答案 3 :(得分:0)

完全未经测试:

def count_letters(s, c):
    return sum(1 for x in s if x == c)