@@ -146,6 +146,20 @@ def contains(s: str, o: str) -> bool:
146146def getitem(s: str, index: int) -> str:
147147 return s[index]
148148
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+
149163s = "abc"
150164
151165def test_contains() -> None:
@@ -170,6 +184,26 @@ def test_getitem() -> None:
170184 with assertRaises(IndexError, "string index out of range"):
171185 getitem(s, -4)
172186
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+
173207def str_to_int(s: str, base: Optional[int] = None) -> int:
174208 if base:
175209 return int(s, base)
0 commit comments