Kategorier: Alla - строки - параметры - замена - функции

av Андрей Дергачев för 1 år sedan

158

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

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

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

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

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

s = "Здесь был Вася." n = s.rfind ( "с" )

Аналогичный метод rfind (от англ. reverse find – искать в обратную сторону) ищет последнее вхождение образца в строке. Для той же строки s, что и в предыдущем примере, метод rfind вернёт 12 (индекс последней буквы «с»)

s = "Здесь был Вася." n = s.find ( "с" ) # n = 3 if n >= 0: print ( "Номер символа", n ) else: print ( "Символ не найден." )

В Python существует функция для поиска подстроки (и отдельного символа) в символьной

строке. Эта функция называется find, она определена для символьных строк и вызывается как

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

не найден, функция возвращает «–1». В рассмотренном примерев переменную n будет записано

число 3.

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

s = "abc" print ( s.isdigit() ) # False s1 = "123" print ( s1.isdigit() ) # True

А метод isdigit проверяет, все ли символы строки – цифры, и возвращает логическое значение.

s = "aAbBcC" s1 = s.upper() # "AABBCC" s2 = s.lower() # "aabbcc"

В Python существует множество встроенных методов для работы с символьными строками.

Например, методы upper и lower позволяют перевести строку соответственно в верхний и нижний регистр.

s = "0123456789" s1 = s[3:8]

С помощью срезов можно вставить новый фрагмент внутрь строки. Переменная s получит значение "012ABC3456789".

s = "0123456789" s1 = s[:3] + "ABC" + s[3:]

Для удаления части строки нужно составить новую строку, объединив части исходной строки

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

s = "0123456789" s1 = s[:3] + s[9:]

Для того, чтобы выделить часть строки (подстроку), в языке Python применяется операция

получения среза (англ. slicing), например s[3:8] означает символы строки s с 3-го по 7-й (то есть

до 8-го, не включая его). Следующий фрагмент копирует в строку s1 символы строки s с 3-го по 7-

й (всего 5 символов). В строку s1 будет записано значение "34567".

s1 = "Привет" s2 = "Вася" s = s1 + ", " + s2 + "!"

Как мы уже видели, оператор '+' используется для объединения (сцепления) строк, эта

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

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

Строки, как и числа, можно сравнивать. Для строк, состоящих из одних букв (русских или ла-тинских), результат сравнения очевиден: меньше будет та строка, которая идет раньше в алфавит-ном порядке. Например, слово «паровоз» будет «меньше», чем слово «пароход»: они отличаются в пятой букве и «в» < «х». Более короткое слово, которое совпадает с началом более длинного, тоже будет стоять раньше в алфавитном списке, поэтому «пар» < «парк».

aS = [] print ( "Введите строки для сортировки:" ) while True: s1 = input() if s1 == "": break aS.append ( s1 ) aS.sort() print ( aS )

Для решения этой задачи с помощью языка Python удобно записать строки в массив (список) и затем отсортировать с помощью метода sort:



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

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

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

s = "12.12.12" s = s.replace( "12", "A12B" ) print ( s )

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

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

Функция на языке Python. Её параметры – это исходная строка s, строка-образец wOld и строка-замена wNew

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

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, то есть будет получено слово требуемой длины, слово выводится на экран и происходит выход из процедуры (окончание рекурсии). Если слово не достроено, в цикле перебираем все символы, входящие в алфавит, по очереди добавляем каждый из них в конец строки и вызываем процедуру рекурсивно.

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

В практических задачах часто нужно преобразовать число, записанное в виде цепочки сим-волов, в числовое значение, и наоборот. Для этого в языке Python есть стандартные функции:

int – переводит строку в целое число;

float – переводит строку в вещественное число;

str – переводит целое или вещественное число в строку.

X = 123.456 s = "{:7.2f}".format(X) # s = "◦123.46" s = "{:10.2e}".format(X) # s = "◦◦1.23e+02"
N = 123 s = str ( N ) # s = "123" X = 123.456 s = str ( X ) # s = "123.456"
s = "123" N = int ( s ) s = "123.456" X = float ( s )

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

print ( "Введите имя, отчество и фамилию:" ) s = input() fio = s.split() s = fio[2] + " " + fio[0][0] + "." + fio[1][0] + "." print ( s )

Используя встроенные функции языка Python, эту задачу можно решить намного проще. Прежде всего, нужно разбить введённую строку на отдельные слова, которые разделены проблемами. Для этого используется метод split (от англ. split – расщепить) который возвращает спи-сок слов, полученных при разбиении строки. Вот полная программа

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 )

Мы последовательно выделяем из строки три элемента: имя, отчество и фамилию, используя тот факт, что они разделены одиночными пробелами. После того, как имя сохранено в отдельной пе-ременной, в строке s остались только отчество и фамилия. После «изъятия» отчества остается только фамилия. Теперь нужно собрать строку-результат из частей: «сцепить» фамилию и первые буквы имени и отчества, поставив пробелы и точки между ними.

Для выполнения всех операций будем срезы и метод find

Что такое символьная строка?

Символьная строка – это последовательность символов, расположенных в памяти рядом (в

соседних ячейках). Для работы с символами во многих языках программирования есть переменные специального типа: символы, символьные массивы и символьные строки (которые, в отличие

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

s = input( "Введите строку:" ) s1 = "" for c in s: if c == "а": c = "б" s1 = s1 + c print ( s1 )

Тем не менее, можно составить из символов существующей строки новую строку, и при этом

внести нужные изменения. Приведём полную программу, которая вводит строку с клавиатуры,

заменяет в ней все буквы "a" на буквы "б" и выводит полученную строку на экран.

Здесь в цикле for c in s перебираются все символы, входящие в строку s. Каждый их них на

очередном шаге записывается в переменную c. Затем мы проверяем значение этой переменной:

если оно совпадает с буквой «а», то заменяем его на букву «б», и прицепляем в конец новой строки s1 с помощью оператора сложения.

Нужно отметить, что показанный здесь способ (многократное «сложение» строк) работает

очень медленно. В практических задачах, где требуется замена символов, лучше использовать

стандартную функцию replace, о которой пойдет речь дальше.


print ( s[5] )

Для того, чтобы выделить отдельный символ строки, к нему нужно обращаться так же, как к

элементам массива (списка): в квадратных скобках записывают номер символа. Например, так

можно вывести на экран символ строки s с индексом 5 (длина строки в этом случае должна быть

не менее 6 символов)

n = len(s)

Длина строки определяется с помощью функции len (от англ. length – длина). В этом примере в переменную n записывается длина строки s

s = input( "Введите имя: " )

Для ввода строки с клавиатуры применяют функцию input: