В прошлый четверг мы получили задание «решить задачи».
Нужно было найти 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)