И так, в прошлом уроке мы изучили условия и циклы, а сегодня перейдет к более детальному изучению строк.
Начнем с ввода данных с клавиатуры.
Для того, чтобы ввести данные с клавиатуры используется функция input() .
<имя переменной>=input()
В кавычках можно указать текст и он выведется также как, если бы выводили текст через print() .
Чтобы ввести число, нужно преобразовать ввод input :
<имя переменной>=int(input())
Аналогично и для других типов данных.
Строки
Как мы уже говорили в этой статье в python можно складывать строки, а также умножать их на число. Но, что еще можно делать со строками?
Можно проверять входит ли элемент в строку(кстати это работает и с списками, код указанный ниже вернет True если в строке содержатся данные, в качестве данных может быть переменная, может быть другая строка):
<данные> in <строка>
Также можно использовать оператор, который вернет True , если возвращает False - not.
<данные> not in <строка>
Для того, чтобы узнать длину строки используется уже знакомая нам функция len().
Также можно преобразовывать числа в символы при помощи функции chr() .
chr(число)
И есть обратная ей функция ord() , которая преобразует из символа в число.
ord(символ)
Про str() мы уже знаем из статьи о типах данных .
chr(), ord() - работают с ASCII и UNICODE .
Строки, как и списки могут индексироваться, мы можем обратиться к любому символу строки(напомню, что индексация начинается с нуля):
a="postHack" print(a[4]) #Выведет H.
Кстати самое время познакомить вас с комментариями в коде. Если вдруг вам нужно оставить в коде заметку, вам достаточно поставить перед текстом # и интерпритатор не будет воспринимать весь текст, находящийся в этой строке.
Также как и списки, строки поддерживают срезы. Если вы не знаете как их делать ознакомьтесь с этой статьей .
В python , также существуют так называемые f-строки . Используются они при выводе данных.
Допустим у вас есть 2 переменные k и l . И вам нужно вывести их значения и какой либо текст, вы можете сделать это так:
print('k=', k, ' l=', l)
Но это некрасиво, а в некоторых случаях даже громоздко. Можно использовать:
print(f"k={k}, l={l}")
Хотя строки и не изменяемый тип, мы все-таки можем их менять(аргумент кол-во замен не обязательный):
<переменная со строкой>.replace(<символ который нужно изменить>,<символ на который нужно изменить>, <кол-во замен>)
Но, допустим нам нужно изменить регистр символов, для этого есть несколько функций:
<переменная со строкой>.capitalize() - первая буква в верхний, остальные в нижний.
<переменная со строкой>.lower() - все буквы в нижний.
<переменная со строкой>.upper() - все буквы в верхний.
<переменная со строкой>.swapcase() - все буквы в противоположный.
<переменная со строкой>.title() - первая буква каждого слова становится заглавной.
Ну, что же, с реестром разобрались, а если нам нужно найти что-то в строке и заменить?
Для начала давайте обозначим как-то нашу переменную со строкой, ибо каждый раз писать <переменная со строкой> не удобно будем вместо этого писать s. На будущее здесь аргументы начало и конец не обязательны, они ограничивают диапазон поиска, на их место пишутся индексы начала поиска и конца.
Подсчитать кол-во вхождений подстроки в строку:
s.count(<подстрока>, <начало>, <конец>)
Проверить оканчивается ли строка подстрокой, если да вернет True :
s.endswith(<подстрока>, <начало>, <конец>)
Проверить начинается ли строка с подстроки, если да вернет True :
s.startswith(<подстрока>, <начало>, <конец>)
Ищет подстроку в строке и возвращает индекс начала подстроки(если не найдено возвращает -1):
s.find(<подстрока>, <начало>, <конец>)
Аналог find() , но возвращает ValueError , в случае не нахождения:
s.index(<подстрока>, <начало>, <конец>)
Аналог find() , ищущий с конца строки:
s.rfind(<подстрока>, <начало>, <конец>)
Аналог index() , ищущий с конца строки:
s.rindex(<подстрока>, <начало>, <конец>)
А, что если нам нужно проверить содержимое строки?
Если мы хотим узнать состоит ли она из букв и цифр(если да функция вернет True ):
s.isalnum()
Если мы хотим узнать состоит ли строка только из букв:
s.isalpha()
Только из цифр:
s.isdigit()
Подходит ли строка в качестве названия переменной/класса/функции(осторожно вернет True даже для if, elif, continue, and, break, True, и тд... ):
s.isidentifier()
Проверка на нижний регистр:
s.islower()
Проверка на верхний регистр:
s.isupper()
Проверка на печатаемость символов(если символ можно напечатать вернет True ):
s.isprintable()
Состоит ли строка только из пробелов:
s.isspace()
Все ли слова написаны с заглавной буквы:
s.istitle()
Окей, с этим разобрались, а что там с форматированием?
Выравнивание строки по центру(аргумент символ для заполнения является не обязательным, по умолчанию пробел):
s.center(<ширина>,<символ для заполнения>)
Выравнивание по левому краю:
s.ljust(<ширина>,<символ для заполнения>)
Выравнивание по правому краю:
s.rjust(<ширина>,<символ для заполнения>)
Замена табуляции пробелом(символ табуляции \t):
s.expandtabs(<кол-во пробелов по умолчанию 8>)
Вырезает пробелы слева(если заполнить аргумент символы, то удалит набор символов, которые нужно удалить):
s.lstrip(<символы>)
Вырезает пробелы справа(если заполнить аргумент символы, то удалит набор символов, которые нужно удалить):
s.rstrip(<символы>)
Вырезает пробелы слева и справа(если заполнить аргумент символы, то удалит набор символов, которые нужно удалить):
s.strip(<символы>)
Дополнить строку нулями с лева до достижения указанной длины:
s.zfill(<длина>)
Теперь расскажу вам о том как превращать строки в списки и наоборот.
Преобразование списка в строку(функция вернет строку, в которой буду все элементы списка разделенные при помощи разделителя):
<разделитель>.join(<список>)
Разделить строку и превратить в кортеж(функция вернет кортеж из трех элементов: первый - часть до разделителя, второй - разделитель, третий - часть после разделителя):
s.partition(<разделитель>)
Также есть .rpartition() , работает аналогично, но с конца.
Разделить строку на под строки, получив на выходе список(по умолчанию разделитель стоит пробел, а maxsplit установлен -1, делит строку бесконечно, пока есть разделители):
string.split(sep=<разделитель>, maxsplit=<максимальное кол-во разделений>)
Есть аналогичная функция .rsplit() , работает аналогично, но максимальное кол-во отделений идет с конца.
Разделить строку на список строк(любой символ указанный ниже считается границей строки. Если параметр оставить окончания имеет значение True, то перечисленные ниже символы не удаляются, а сохраняются вместе с словом ):
s.splitlines(<оставить окончания>)
Ну, что же на этом вроде со строками пока все, в следующем уроке изучим функции и будем писать первую более менее не бесполезную программу.