查找“bob”时使用字符串而不是整数

时间:2016-09-12 21:21:25

标签: python

我的问题代码:

count = 0

for char in s:

    if char.startswith("bob"):

        count += 1

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

我有一个很好的解决方案如下:

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))

我的问题:我没有使用整数“for i in range(len(s))”来解决问题,而是想要一个使用字符/字符串的替代解决方案。谁能告诉我为什么我的上述解决方案在找到“bob”时返回“0”?感谢。

2 个答案:

答案 0 :(得分:0)

您的第一个代码无效,因为

for char in s:

只需将char设置为字符串中的单个字符即可。因此,如果s = "bob is bob"char将是"b""o""b""i"等,则这些单字符字符串都不会以"bob",因此if测试永远不会成功。

没有用于循环子串的内置循环语法,因此您需要迭代索引。

答案 1 :(得分:0)

第一段代码的问题将在循环中使用print语句变得明显。声明for char in s循环遍历s中的每个字符,并且没有字符以单词bob开头。

如果你真的想要一个for something in something类型的循环,你可以这样做:

count = 0
for word in s.split():
    if word == "bob":
        count += 1
print ("Number of times bob occurs is: " + str(count))

这只有在您只想匹配仅作为单词出现的bob出现时才有效。如果你想在任何地方匹配bob,请使用string.count方法:

count = s.count("bob")

或者,正则表达式:

import re
count = len(re.findall("bob", s))

如果您想要重叠的答案。这实际上就是你在for循环中所做的,但更简洁。我不认为有更简单的方法来计算重叠事件的数量。

[s[i:i+3] for i in range(len(s))].count('bob')