我的问题代码:
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”?感谢。
答案 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')