В стороке заменить подстроку, находящуюся между первой открывающей квадратной
скобкой и соответствующей ей закрывающей.
Сложность данной задачи заключается в том, что между первой открывающей и
соответствующей ей закрывающей скобками, могут быть другие скобки. Например, в
строке 'a[bc[de]f]gh[jkl]' первая открывающая находится после символа 'a', а
соответствующая ей закрывающая - после символа 'f'. Т. е. по условию задачи в
данном примере замене подлежит подстрока '[bc[de]f]'.
Чтобы найти соответствующую закрывающую, в программе ниже вводится счетчик
последующих открывающих скобок, и пока он не будет равен нулю, все закрывающие
скобки соответствующими первой открывающей не считаются.
s = input("Введите исходную строку: ") p1 = -1 # индекс первой открывающей скобки i = 0 while i < len(s): if s[i] == '[': p1 = i # мы нашли скобку (ее индекс), break # дальше просматривать строку бессмысленно i += 1 if p1 == -1: exit() # открывающей скобки нет, выходим из программы p2 = -1 # индекс закрывающей скобки, соответствующей первой открывающей count = 0 # счетчик остальных открывающих скобок i += 1 # будем просматривать строку со следующего символа за тем, на котором остановились ранее while i < len(s): if s[i] == '[': count += 1 elif s[i] == ']': # встретилась закрывающая скобка if count == 0: # и счетчик равен нулю p2 = i # значит это закрывающая скобка от первой открывающей break # нет смысла просматривать дальше else: # встретилась закрывающая скобка, но счетчик открыващих не равен нулю, count -= 1 # значит была закрыта какая-то другая, но не первая скобка. i += 1 if p2 == -1: exit() # закрывающей скобки нет, выходим из программы s_in = input("Введите подстроку для вставки: ") s_out = s[p1+1:p2] # скобки не берем print("Вырезанная подстрока:", s_out) s = s[:p1] + s_in + s[p2+1:] print("Новая строка:", s)Примеры выполнения программы:
Введите исходную строку: [who[is]it] is big master-[kunfu?]. Введите подстроку для вставки: Bob Green Вырезанная подстрока: who[is]it Новая строка: Bob Green is big master-[kunfu?]. ======== Введите исходную строку: hello [world] Введите подстроку для вставки: space Вырезанная подстрока: world Новая строка: hello space