Я пытался помочь моему другу с его заданием, и я даже не могу понять, с чего начать. Я могу получить его, чтобы определить подстроку внутри строки, но предоставление туда, где она начинается, беспокоит меня. Я был у него часами. Любая помощь приветствуется. Вот все, что у меня есть о задании ниже.
PS. весь его класс не знает, как это сделать. Учитель дал им что-то из своей и моей лиги.
Программа должна сначала найти все начальные позиции в строке A, где появляется строка B.
Например, если stringA является "the car is in that carport
", а stringB
"car
", программа должна сообщить, что строка B встречается в строке A, начиная с позиций 4 и 19
(помните, что строка
начинается в позиции 0).
Далее программа должна найти все начальные позиции в строке A, где stringB почти появляется.
the
", программа
должен сообщить, что
stringB почти появляется, начиная с позиции 14, что является началом
строка "tha
".Наконец, программа должна найти все начальные позиции в stringA где обратное Появится строка B.
rop
", затем
программа должна сообщать, что обратная строка stringB появляется в
stringA, начиная с позиции 22.Программа equalsubstrings.py полезна для понимания того, как напишите эту программу.
stringA = "the car is in that carport"
stringB = "the"
exact = []
reverse = []
almost = []
lenA = len(stringA)
lenB = len(stringB)
limit = lenA - lenB
reversedB = stringB[::-1]
pos = stringA.find(stringB)
while pos >= 0:
exact.append(pos)
pos = stringA.find(stringB, pos + 1)
pos = stringA.find(reversedB)
while pos >= 0:
exact.append(pos)
pos = stringA.find(reversedB, pos + 1)
for i in range(limit):
substrA = stringA[i:i+lenB]
misses = 0
for j in range(lenB):
if substrA[j] != stringB[j]:
misses += 1
if misses == 1:
almost.append(i)
print exact, almost, reverse
Я бы использовал модуль re.
re.finditer
позволяет пройти через все совпадения подстроки в строке.mo.start()
в любом объекте соответствия, чтобы найти индекс этого совпадения в строке.[^<current_character>]
и повторите процедуру соответствия для каждого результирующего регулярного выражения, записав все совпадения.Преимущество такого подхода: вы хорошо понимаете re
:-).
Кстати: Какова таинственная программа equalsubstrings.py
?; -.)
Я дам вам две подсказки:
Чтобы проверить, является ли строка подстрокой другого, вы можете сделать:
a = "это тест"
б = "тест"
a.find(б, 0,14)
10
in
, как в следующем примере:a = "это тест" б = "тест" c = "не связанный текст" b в Правда b в c False
Чтобы изменить строку, сделайте следующее:
>>> a="this is a test"
>>> a[::-1]
'tset a si siht'
Удачи вам в домашнем задании
in
менее полезен, чем string#find
.