@@ -146,6 +146,20 @@ def contains(s: str, o: str) -> bool:
146
146
def getitem(s: str, index: int) -> str:
147
147
return s[index]
148
148
149
+ def find(s: str, substr: str, start: Optional[int] = None, end: Optional[int] = None) -> int:
150
+ if start is not None:
151
+ if end is not None:
152
+ return s.find(substr, start, end)
153
+ return s.find(substr, start)
154
+ return s.find(substr)
155
+
156
+ def rfind(s: str, substr: str, start: Optional[int] = None, end: Optional[int] = None) -> int:
157
+ if start is not None:
158
+ if end is not None:
159
+ return s.rfind(substr, start, end)
160
+ return s.rfind(substr, start)
161
+ return s.rfind(substr)
162
+
149
163
s = "abc"
150
164
151
165
def test_contains() -> None:
@@ -170,6 +184,26 @@ def test_getitem() -> None:
170
184
with assertRaises(IndexError, "string index out of range"):
171
185
getitem(s, -4)
172
186
187
+ def test_find() -> None:
188
+ s = "abcab"
189
+ assert find(s, "Hello") == -1
190
+ assert find(s, "abc") == 0
191
+ assert find(s, "b") == 1
192
+ assert find(s, "b", 1) == 1
193
+ assert find(s, "b", 1, 2) == 1
194
+ assert find(s, "b", 3) == 4
195
+ assert find(s, "b", 3, 5) == 4
196
+ assert find(s, "b", 3, 4) == -1
197
+
198
+ assert rfind(s, "Hello") == -1
199
+ assert rfind(s, "abc") == 0
200
+ assert rfind(s, "b") == 4
201
+ assert rfind(s, "b", 1) == 4
202
+ assert rfind(s, "b", 1, 2) == 1
203
+ assert rfind(s, "b", 3) == 4
204
+ assert rfind(s, "b", 3, 5) == 4
205
+ assert rfind(s, "b", 3, 4) == -1
206
+
173
207
def str_to_int(s: str, base: Optional[int] = None) -> int:
174
208
if base:
175
209
return int(s, base)
0 commit comments