Categorieën: Alle - строки - параметры - символы - замена

door Карина Мкртчян 1 jaar geleden

121

Символьные строки

В языках программирования символы и строки являются основными типами данных для работы с текстовой информацией. В Python строки рассматриваются как цельные объекты и могут быть переданы в функции или процедуры в качестве параметров, а также возвращены в качестве результата.

Символьные строки

Символьные строки

Символьная строка – это последовательность символов, расположенных в памяти рядом (в соседних ячейках). Для работы с символами во многих языках программирования есть переменные специального типа: символы, символьные массивы и символьные строки (которые, в отличие от массивов, рассматриваются как цельные объекты). Основной тип данных для работы с символьными величинами в языке Python – это символьные строки (тип string).

Строки в процедурах и функциях

Строки можно передавать в процедуры и функции как параметры, а также возвращать как результат функций. Построим процедуру, которая заменяет в строке s все вхождения слова-образца wOld на слово-замену wNew (здесь wOld и wNew – это имена переменных, а выражение «слово wOld» означает «слово, записанное в переменную wOld»).

Функция на языке Python. Её параметры – это исходная строка s, строка-образец wOld и строка-замена wNew: def replaceAll( s, wOld, wNew ): lenOld = len(wOld) res="" while len(s) > 0: p=s.find( wOld ) if p<0: return res + s if p>0: res = res + s[:p] res=res+wNew if p+lenOld>=len(s): s="" else: s = s[p+lenOld:] return res

Переменная p – это номер первого символа первого найденного слова-образца wOld, а в пере- менной lenOld записана длина этого слова. Если после поиска слова значение p меньше нуля (образец не найден), происходит выход из цикла:

if  p<0: res=res+s; return

Если p > 0, то слева от образца есть какие-то символы, и их нужно «прицепить» к строке res:

if p>0: res=res+s[:p]

Условие p+lenOld >= len(s) означает «образец стоит в самом конце слова», при этом остаток строки s – пустая строка. В конце программы результат записывается на место исходной строки s.


Пример использования этой функции:

s = "12.12.12"

s=replaceAll( s, "12""A12B" )

print( s )

Так как операция замены одной подстроки на другую используется очень часто, в языке Python есть встроенная функция, которая выполняет эту операцию. Она оформлена как метод для переменных типа «строка» (str) и вызывается с помощью точечной записи:

s = "12.12.12"

s=s.replace"12""A12B" )

print( s )

Алгоритм выполнения, чтобы избежать проблем: 1) записываем результат в другой символьной строке res, удаляя из строки s уже обработанную часть. Предположим, что на некотором ша- ге в оставшейся части строки s обнаружено слово wOld. Для этого нужно выполнить следующие действия: 1) ту часть строки s, которая стоит слева от образца, «прицепить» в конец строки res; 2) «прицепить» в конец строки res слово-замену wNew; 3) удалить из строки s начальную часть, включая найденное слово-образец.

Поиск в строках

Метод rfind

Аналогичный метод rfind (от англ. reverse find – искать в обратную сторону) ищет послед- нее вхождение образца в строке.

Для той же строки s, что и в предыдущем примере, метод rfind вернёт 12 (индекс последней буквы «с»): s="Здесь был Вася." n=s.rfind( "с" ) # n = 12
Метод find
Функция find, она определена для символьных строк и вызывается как метод, с помощью точечной записи. В скобках нужно указать образец для поиска: s="Здесь был Вася." n=s.find( "с" ) # n = 3 if n>=0: print( "Номер символа", n ) else: print( "Символ не найден." )

Метод find возвращает целое число – номер символа, с которого начинается образец (буква "с") в строке s. Если в строке несколько образцов, функция находит первый из них. Если образец не найден, функция возвращает «–1». В рассмотренном примерев переменную n будет записано число 3.

Преобразования число<->строка

Для вещественных чисел можно использовать форматы f (с фиксированной точкой) и e (экспоненциальный формат, с плавающей точкой): X = 123.456 s="{:7.2f}".format(X) # s ="◦123.46" s = "{:10.2e}".format(X) # s= "◦◦ 1.23e+02"

В первом случае формат «7.2f» обозначает «вывести в 7 позициях с 2 знаками в дробной части», во втором – формат «10.2e» обозначает «вывести научном формате в 10 позициях с 2 знаками в дробной части».

str – переводит целое или вещественное число в строку
Функция str использует правила форматирования, установленные по умолчанию. При необходимости можно использовать собственное форматирование. Например, в строке: s = "{:5d}".format(N)

В строке значение переменной N будет записано по формату d (целое число) в 5 позициях, то есть в начале строки будут стоять два пробела:

◦◦123

Примеры обратного преобразования: N=123 s=str( N ) # s = "123" X = 123.456 s=str( X ) # s = "123.456"

Эти операции всегда выполняются успешно (ошибка произойти не может).

float – переводит строку в вещественное число
Пример преобразования строк в числовые значения: s = "123.456" X=float( s ) # X = 123.456
int – переводит строку в целое число
Пример преобразования строк в числовые значения: s = "123" N=int( s ) # N = 123

Сравнение и сортировка строк

С помощью языка Python удобно записать строки в массив (список) и затем отсортировать с помощью метода sort: aS=[] print ( "Введите строки для сортировки:" ) while True: s1 = input() if s1=="": break aS.append( s1 ) aS.sort(). print( aS )

Строки заносятся в список aS. Сначала этот список пустой, затем в цикле мы вводим очередную строку с клавиатуры и записываем её в переменную s1. Ввод заканчивается, когда введена пустая строка, то есть вместо ввода строки пользователь нажал клавишу Enter. В этом случае сработает условный оператор и выполнится оператор break, прерывающий цикл.

С другими символами (цифрами, латинскими буквами)?
Цифры стоят в кодовой таблице по порядку, причём раньше, чем латинские буквы; латинские буквы – раньше, чем русские; заглавные буквы (русские и латинские) – раньше, чем соответствующие строчные. Поэтому «5STEAM» < «STEAM» < «Steam» < «steam» < «ПАР» < «Пар» < «пар».
Строки, как и числа, можно сравнивать. Для строк, состоящих из одних букв (русских или ла- тинских), результат сравнения очевиден: меньше будет та строка, которая идет раньше в алфавит- ном порядке.

Рекурсивный перебор

Это типичная задача на перебор вариантов, которую удобно свести к задаче меньшего размера. Процедура для перебора слов может быть записана так: def TumbaWords( A, w, L ): if len(w)==L: print( w ) return for c in A: TumbaWords( A, w+c, L )

В параметре A передаётся алфавит языка, параметр w – это уже построенная часть слова, а L – нужная длина слова. Когда длина построенного слова станет равна L, то есть будет получено слово требуемой длины, слово выводится на экран и происходит выход из процедуры (окончание рекурсии). Если слово не достроено, в цикле перебираем все символы, входящие в алфавит, по очереди добавляем каждый из них в конец строки и вызываем процедуру рекурсивно.

Пример обработки строк

Метод split, который возвращает спи- сок слов, полученных при разбиении строки

Полная программа:

print"Введите имя, отчество и фамилию:" )

s = input()

fio = s.split()

s=fio[2]+" "+fio[0][0]+"."+fio[1][0]+"." 

print( s )

Срезы и метод find

Полная программа:

print"Введите имя, отчество и фамилию:" ) s = input()

n=s.find" " )

name=s[:n] #вырезать имя

s = s[n+1:]

n=s.find( " " )

name2=s[:n] #вырезать отчество

s=s[n+1:] #осталась фамилия

s=s+" "+ name[0]+"."+name2[0]+"."

print( s )

Встроенные методы для работы с символьными строками.

Метод isdigit проверяет, все ли символы строки – цифры, и возвращает логическое значение: s = "abc" print ( s.isdigit() ) # False s1 = "123" print ( s1.isdigit() ) # True
Методы upper и lower позволяют перевести строку соответственно в верхний и нижний регистр: s = "aAbBcC" s1 = s.upper() # "AABBCC" s2 = s.lower() # "aabbcc"

Операции со строками

Реверс строки
Срезы позволяют выполнить реверс строки (развернуть её наоборот): s1 = s[::-1]

Так как начальный и конечный индексы элементов строки не указаны, задействована вся строка. Число «–1» означает шаг изменения индекса и говорит о том, что все символы перебираются в обратном порядке.

Срезы
С помощью срезов можно вставить новый фрагмент внутрь строки: s = "0123456789" s1 = s[:3] + "ABC" + s[3:]

Переменная s получит значение "012ABC3456789".

Удаление части строк
Для удаления части строки нужно составить новую строку, объединив части исходной строки до и после удаляемого участка: s = "0123456789" s1 = s[:3] + s[9:]

Срез s[:3] означает «от начала строки до символа s[3], не включая его», а запись s[9:] – «все символы, начиная с s[9] до конца строки». Таким образом, в переменной s1 остаётся значе- ние "0129".

Выделение части строки (подстроки)
Применяется операция получения среза (англ. slicing), например s[3:8] означает символы строки s с 3-го по 7-й (то есть до 8-го, не включая его). Следующий фрагмент копирует в строку s1 символы строки s с 3-го по 7-й (всего 5 символов): s = "0123456789" s1 = s[3:8]

В строку s1 будет записано значение "34567".

Объединения (сцепления) строк
Оператор '+' . Эта операция иногда называется конкатенация. Например: s1 = "Привет" s2 = "Вася" s = s1 + ", " + s2 + "!"

В результате выполнения приведённой программы в строку s будет записано значение "Привет, Вася!".