В прошлый четверг мы получили задание «решить задачи».
Нужно было найти string = "29535123p48723487597645723645" и все символы между двумя одинаковыми числами, которые нужно было выделить цветом.
Если между ними не было буквы.

Итак, первое выделение было 2953512, но второе не могло быть 9535123p4872348759 из-за буквы «p» в середине. Третьим был 35123 .

Они также хотели, чтобы была напечатана вся строка, содержащая выделенную часть.

Итак, я решил это с помощью двух циклов: один для каждого символа в строке, а другой для сравнения каждого другого символа с тем, который был зациклен в первом.

Каждый зацикленный символ добавлялся в список, называемый основными моментами.
Внутри второго цикла я задал два условия. 1) если символом была буква, то счетчик увеличивался. 2) если символ в первом и втором цикле был одинаковым, а также если счетчик увеличился, то f-строка Back.BLUEиз библиотеки Colorama была вставлена ​​в начало списка подсветки, а для завершения выделения была добавлена ​​​​aStyle.RESET_ALL.

После завершения второго цикла список выделенных фрагментов был объединен со строкой и добавлен к фрагменту всей строки до тех пор, пока в первом цикле не будет проверен последний символ. Создание новой строки выделения.

Другое условие проверяло, содержит ли новая строка выделения Back.BLUE, и добавляло ее в другой список «full_str», если да.

Наконец, список full_str был перебран и каждый элемент распечатан.

from colorama import Fore, Back, Style

string = "29535123p48723487597645723645"
l = len(string)
full_str = []

for i, c in enumerate(string):

    highlight = []
    highlight.append(c)

    str_ = 0

    for ii, cc in enumerate(string[i+1:]):
  
        highlight.append(cc)
        
        if cc.isalpha():
            str_ += 1

        else:
            if c == cc and str_ == 0:
                highlight.insert(0, f"{Back.BLUE}" )
                highlight.append(f"{Style.RESET_ALL}")

    
    highlight = string[:i] + "".join(highlight)
    
    if Back.BLUE in highlight:
        full_str.append(full_str)

for i in d:
    print(i)