I need to create a program that counts the string "bob" inside another string, given by the user. The bobs can overlap. What is wrong with my code?
Well, you are looking at characters, but trying to test for a string.
Changing to i wont make it work
string.find(s, sub[, start[, end]]) Return the lowest index in s where the substring sub is found such that sub is wholly contained in s[start:end]. Return -1 on failure. Defaults for start and end and interpretation of negative values is the same as for slices. Loop or recurse until you find all copies. As you find one, advance how far you start in the string, or pass from just beyond if recursing.
I know I need to use slicing and ranges, but I dont know how to apply them in this
All stringgs are arrays. Slicing is s[start:stop] basically. But you can use - numbers to go backwards.
s=raw_input("Enter a word: ") Bobs= 0 for i in range(len(s)): if s[i]=="b": if s[i+1]=="o": if s[i+2]=="b": Bobs +=1 print("Number of bobs: " + str(Bobs)) Why doesnt that work?
The end is not inclided in the slice. ``` >>> s="This is a test" >>> s[1:] 'his is a test' >>> s[:-5] 'This is a' >>> s[2:3] 'i' >>> ``` OK, let me look.
You can end up testing more than exists. Your s[i+2]=="b": can go past the end of the string.
So how can i control it?
String index is out of range :/
Yes. And how far are you going last the end in the middle of the loop?
``` for i in range(len(s)): if s[i]=="b": if s[i+1]=="o": if s[i+2]=="b": # <== How much too far? Bobs +=1 ```
can this work? (and remember me with what can I paste code, please) s=raw_input("Enter a word: ") Bobs= 0 for i in range(len(s)): if i+2<=len(s): if s[i]=="b": if s[i+1]=="o": if s[i+2]=="b": Bobs +=1 print("Number of bobs: " + str(Bobs))
Forget it, same mistake :/
Use ``` above and below the code block. I don't know if that can work, but there is a simpler way to solve it.
Yep...this worked...But how could I do this simpler?
Look at what I asked about how much too far you are going. How far is it past the end of the string?
2
Right. So, how could you change the range so that it goes 2 less?
so i could make the end of the range the leng - 2
Exactly. ``` #s=raw_input("Enter a word: ") s="This is a bob test for bob find bob" Bobs= 0 for i in range(len(s)-2): if s[i]=="b": if s[i+1]=="o": if s[i+2]=="b": Bobs +=1 print("Number of bobs: " + str(Bobs)) ``` Number of bobs: 3
Oh... now I see :D
Thanks a lot :D Next problem set looks much harder
You can also see one other good thing there for testing. Rather than enter a string each time, I just make a test string. That makes the trying out code faster.
Thanks :)
Can you help me with the start of another one?
Sure.
I will open a new question, thanks :)
Join our real-time social learning platform and learn together with your friends!