Найти тему

Программирование на Python. Работа со строками

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

Как вы помните, получаемая информация от пользователя посредством функции input(), представляет собой строку. Именно поэтому, если вводятся числа, их необходимо преобразовать, собственно, в числа с помощью функции int(). Но если мы работаем с символами, нам обязательно нужно проверять, не введено ли чего лишнего.

Например, программа спрашивает фамилию и имя пользователя для того, чтобы сохранить эту информацию в какой-то переменной в виде «ИмяпробелФамилия». Вроде бы все просто. Но это только на первый взгляд. Часто пользователи могут после набора на клавиатуре нужной информации случайно или по привычке нажать еще и на пробел. Или несколько пробелов. Или сделать пробелы перед вводом информации. Тогда программа запишет в свою переменную имя и фамилию с несколькими пробелами. А так как пробелы для компьютера – это тоже символы, то в определенный момент все может пойти не по плану, и вместо ожидаемого результата мы получим какую-нибудь абракадабру.

В данном случае поможет метод .strip(). В самом простом изложении метод – это функция, которая записывается через точку после переменной, к которой он должен примениться. Так и говорят: «применить к переменной метод».

В результате применения метода .strip() введенная информация очищается от пробелов слева и справа. Вот как это реализуется:

f = input(‘Введите фамилию’)
f = f.strip()

Можно применить метод сразу же после ввода:

f = input(‘Введите фамилию’).strip()

Давайте допишем программу:

i = input(‘Введите имя’).strip()
fio = i + ‘ ‘ + f

Как видите, в переменной fio мы сохраняем очищенные от пробелов переменные и разделяем их одним знаком пробела.

Одна из немногих функций (а не методов) для работы со строками – это функция вычисления длины строки len(). Очень нужная функция. Применяется повсеместно. Например, если необходимо в нашем примере определить и вывести на экран длину фамилии, то это можно записать так:

print(len(f))

Строки рассматриваются программой как набор символов, причем для каждого символа в строке определен индекс. Первый символ строки имеет индекс ноль, второй символ – индекс 1, третий символ – индекс 2 и т.д. Например, код

s = ‘Папирус’
print(s[1])

выведет на экран букву «а».

Как вы могли заметить, обращение по индексу осуществляется посредством квадратных скобок.

Список других полезных методов для работы со строками:

  • str.find(s) Ищет подстроку (вхождение) s в строке str. В результате получаем индекс первого вхождения подстроки в строку.
  • str.replace(‘s’, ‘s1’) Замена в строке str всех построк s на подстроки s1.
  • str.split(s) Разбиение строки str на несколько частей в местах подстроки s.
  • s.join(набор строк) Соединение набора строк в одну строку с разделителем s.
  • str.upper() Преобразование всей строки str к верхнему регистру.
  • str.lower() Преобразование всей строки str к нижнему регистру.
  • str.capitalize() Преобразование первого символа строки str в верхний регистр, а остальные символы – в нижний.
  • str.isdigit() Проверка, состоит ли строка str только из цифр.
  • str.isalpha() Проверка, состоит ли строка str только из букв.
  • str.isalnum() Проверка, состоит ли строка str только из букв и цифр.
  • str.islower() Проверка, состоит ли строка str только из символов в нижнем регистре.
  • str.isupper() Проверка, состоит ли строка str только из символов в верхнем регистре.
  • str.istitle() Проверка, начинаются ли слова в строке str с заглавных букв.

Для лучшего понимания, как работают перечисленные методы, мы приведем небольшие примеры. STR и S могут быть как переменными, содержащими строку, так и строками (сразу). Иными словами, чтобы не писать

stroka = ‘Hello world’
s = ‘o’
stroka.find(s)

мы будем сразу писать в таком ключе:

‘Hello world’.find(‘o’) результат: 4

‘papa papa’.replace(‘p’, ‘m’) результат: mama mama

‘папа, мама, брат, сестра’.split(‘,’) результат: набор из слов «мама, папа, брат и сестра».

У каждого слова свой индекс, по которому можно его вытащить из набора.

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

a, b, c = input(‘Введите три числа через пробел’).split()

Если в методе .split() не указан разделитель, то по умолчанию он разделяет строку на части по пробелу (пробелам).

В нашем примере введенные через пробел три числа изначально представляют собой строку. Потом, с помощью .split() она делится на три части и представляет собой набор значений. Этот набор «на лету» можно «распаковать», присвоив значения каждого из элементов набора соответствующим переменным. Надо уточнить, что после этого всего в переменных a, b и c сохранятся не числа, а их строковые представления, которые нужно потом не забыть преобразовать в числа с помощью функции int().

  • ‘hello’.upper() результат: HELLO
  • ‘HELLO’.lower() результат: hello
  • ‘hello WORLD’.capitalize() результат: Hello world
  • ‘12345’.isdigit() результат: True
  • ’12 345’.isdigit() результат: False
  • ‘abc’.isalpha() результат: True
  • ‘ab5c’.isalpha() результат: False
  • ‘abc5’.isalnum() результат: True
  • ‘ab c5’.isalnum() результат: False
  • ‘abc5+’.islower() результат: True
  • ‘aBc5+’.islower() результат: False
  • ‘AB9’.isupper() результат: True
  • ‘Af9’.isupper() результат: False
  • ‘Hello World’.istitle() результат: True
  • ‘Hello world’.istitle() результат: False

Комменты приветствуются, за палец вверх - отдельное спасибо. Удачи!

------------------------------

Список уроков Программирование на Python для начинающих. Базовый уровень

Следующий урок Основы работы с массивами данных

Предыдущий урок Цикл while

------------------------------

Задания

В данных задачах не использовать особенности Python, например возможность получения строки из символа, умноженного на число, а также дополнительные возможности функции print(): sep и end. Обращение к символам строки осуществлять через индексы.

1. Дана строка. С помощью цикла вывести все ее символы на разных строках.

2. Дано целое число N>0 и символ. Вывести на экран строку из N заданных символов.

3. Дана строка символов. Вывести строку, представляющую собой исходную строку, перевернутую справа налево.

4. Дана строка, символ S и число N. Вывести строку, между символами которой будет вставлено по N символов S.

5. Дана строка число N. Если N меньше длины строки, то оставить в строке N первых символов. Если N больше длины строки, то добавить в начало строки столько точек, насколько она меньше N. Иначе никаких действий не предпринимать. Вывести длину строки и новый вариант строки.

6. Дана строка и символ. Удвоить все символы строки, совпадающие с заданным символом.

7. Дана строка. Заменить все пробелы на знак подчеркивания.

8. Дана строка, содержащая минимум 2 пробела. Вывести часть строки, расположенную между последними двумя пробелами.

9. Дано предложение. Подсчитать количество слов.

10. Дано предложение. Вывести самое длинное слово.

11. Дано арифметическое выражение, включающее в себя цифры (0..9) и знаки арифметических операций (+, -). Вывести результат арифметического действия.