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