Issue
Very new to Python here, and struggling. Any help is appreciated! Confession: this is obviously a request for help with homework, but my course ends tomorrow and the instructor takes too long to return a message, so I'm afraid if I wait I won't get this finished in time.
I'm using a learning module from Cornell University called introcs. It's documented here: http://cs1110.cs.cornell.edu/docs/index.html
I am trying to write a function that returns a tuple of all indexes of a substring within a string. I feel like I'm pretty close, but just not quite getting it. Here's my code:
import introcs
def findall(text,sub):
result = ()
x = 0
pos = introcs.find_str(text,sub,x)
for i in range(len(text)):
if introcs.find_str(text,sub,x) != -1:
result = result + (introcs.find_str(text,sub,x), )
x = x + 1 + introcs.find_str(text,sub,x)
return result
On the call findall('how now brown cow', 'ow') I want it to return (1, 5, 10, 15) but instead it lops off the last result and returns (1, 5, 10) instead.
Any pointers would be really appreciated!
Solution
You don't need to loop over all the characters in text. Just keep calling introcs.find_str()
until it can't find the substring and returns -1
.
Your calculation of the new value of x
is wrong. It should just be 1 more than the index of the previous match.
Make result
a list rather than a tuple so you can use append()
to add to it. If you really need to return a tuple you can use return tuple(result)
at the end to convert it.
def findall(text,sub):
result = []
x = 0
while True:
pos = introcs.find_str(text,sub,x)
if pos == -1:
break
result.append(pos)
x = pos + 1
return result
Answered By - Barmar
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.