Python中的Bob Counter

时间:2013-10-28 01:23:56

标签: python-2.7

使用Python 2.7,我试图计算短语'bobbbobobboobobookobobbobbboj'中'bob'的出现次数。为此,我编写了以下代码:

  b=0
  string='bobbbobobboobobookobobbobbboj'
  string = string.lower()

  for i in string:
     if(([i:i+3]=="bob") or ([i:i+3]=="BOB")'):
        b=b+1

  print ("Number of times bob occurs is:%s" %b)

然而,当我运行它时,它输出0。

8 个答案:

答案 0 :(得分:1)

让我们看看我们是否可以帮助你。

您的代码是

s='bobbbobobboobobookobobbobbboj'

 for i in s:

     if(i=='BOB' or i=='bob'):
        b=b+1

重要的是要考虑这个 - 像" s"是一个字符列表。当你在s中为我做的时候,你正在遍历每个角色。

在第一次迭代中,i ==' b',在第二次迭代时它等于' o'等等。

您想要的是检查代码部分的内容。这样做的方法是

for i in range(len(s)):
    if s[i:i+4] == "bob":

这个工作的原因是范围按顺序返回一个数字列表,所以它会变为0,1,2,3 ... [i:i + 4]部分根据字符串切出一部分字符串它到字符串有多远。对于你的字符串s [0:2]将是" bob" (从0开始)。

我留下了几个问题...例如,如果你让它运行到最后你会遇到问题(如果s是10个字符,你试图做[9:12]你会得到错误)...但这应该可以帮助你开始

答案 1 :(得分:1)

>>> s = 'bobbbobobboobobookobobbobbboj'
>>> term = 'bob'
sum(1 for i, j in enumerate(s) if s[i:i+len(term)] == term)
6

答案 2 :(得分:0)

如果您想以Pythonic的方式进行,那么您需要阅读string find function

如果您想了解如何让字符串查找功能,那么您需要阅读string searching algorithms

答案 3 :(得分:0)

以下是基于Brandon's answer的链接问题的实现。

def MIT(full_string, substring):
    results = []
    sub_len = len(substring)
    for i in range(len(full_string)):
    # range returns a list of values from 0 to (len(full_string) - 1)
        if full_string[i:i+sub_len] == substring:
        # this is slice notation;
        # it means take characters i up to (but not including) i
        # + the length of th substring
            results.append(i)
    return results

full_string = "bobBOBBobBoj"
lower_substring = "bob"
upper_substring = "BOB"
lower_occurrence_array = MIT(full_string, lower_substring)
upper_occurrence_array = MIT(full_string, upper_substring)
number_of_lower_occurrences = len(lower_occurrence_array)
number_of_upper_occurrences = len(upper_occurrence_array)
number_of_occurrences = number_of_lower_occurrences + number_of_upper_occurrences

print ("Number of times bob occurs is: %s" %number_of_occurrences)

结果是

  

bob发生的次数是:2

主要要点已经在Paul's answer,但我希望这会有所帮助。

答案 4 :(得分:0)

start=0
count=0 
while start<=len(s):
    n=s.find('b',start,len(s))
    prnt=(s[start:start+3])
    if prnt =='bob':
       start=n+2 
       count+=1
    else:
        start+=1        
print count   

答案 5 :(得分:0)

   A
 B   C
D E F G 

这是保罗答案的延伸。代码的结果是:

def bobcount(x):
    bobcounter = 0
    for i in range(len(x)):
        if (x[i:i+3]=="bob") or (x[i:i+3]=="BOB"):
            bobcounter = bobcounter + 1
    return bobcounter

答案 6 :(得分:0)

猜猜我有点晚了,但你可以试试这个:

from re import findall

    def bobcount(word):
        return len(findall(r'(bob)', word.lower()))

答案 7 :(得分:0)

s = ('bobobobobobob')
count = 0

for i in range(len(s)):
    if s[i:i+3] == "bob":
        count += 1

print ('Number of times bob occurs is: ' + str(count))