python course for me
November 3, 2023

Stepik: Введение в строки. Операции над строками. Методы

Строки задаются либо через одинарные, либо через двойные кавычки

s1 = "Panda"
s2 = 'Panda-Kuma'

Если записать s1 = Panda (без кавычек), тогда это будет восприниматься как имя переменной, и, если такой переменной нет, выдаст исключение.

Так же можно выводить текст с помощью тройных кавычек.

text = '''Сижу за решеткой в темнице сырой
Вскормленный в неволе орел молодой
Мой грустный товарищ махая крылом
Кровавую пищу клюет под окном'''
print(text)

# Вывод:
# Сижу за решеткой в темнице сырой
# Вскормленный в неволе орел молодой
# Мой грустный товарищ махая крылом
# Кровавую пищу клюет под окном

# этот же код можно записать и с помощью переноса строки \n

text_alt = 'Сижу за решеткой в темнице сырой\nВскормленный в неволе орел молодой\nМой грустный товарищ махая крылом\nКровавую пищу клюет под окном'
print(text_alt)

# Вывод:
# Сижу за решеткой в темнице сырой
# Вскормленный в неволе орел молодой
# Мой грустный товарищ махая крылом
# Кровавую пищу клюет под окном

Базовые операции со строками

s1 = 'Я люблю'
s2 = 'язык Python'
print(s1 + s2) # склеивание строк (конкатенация)
# Вывод: Я люблюязык Python
print(s1 + ' ' + s2) # склеивание строк + знак пробела
# Вывод: Я люблю язык Python

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

s1 = 'Я люблю'
print(s1 + 5)
# Вывод: TypeError: can only concatenate str (not "int") to str

s1 = 'Я люблю'
print(s1 + str(5))
# Вывод: Я люблю5

s2 = str(True)
print(s1 + s2)
# Вывод: Я люблюTrue

* - оператор дублирования строки

print('ха ' * 5) # "умножаем" только на целые числа
# Вывод: ха ха ха ха ха

len() - вычисляет длину строки (количество знаков и символов)

print(len('hello'))
# Вывод: 5

print(len('No! I\'m your father...'))
# Вывод: 22

in - позволяет проверять вхождение подстроки в строку

print('ab' in 'abracadabra')
# Вывод: True

a = 'ab'
b = 'abracadabra'
c = a in b
print(c)
# Вывод: True

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

a = 'hello'
print(a == 'hello') # == оператор сравнения
# Вывод: True

print(a == 'Hello') # == оператор сравнения
# Вывод: False так как очень важен регистр!

print(a != 'hello')
# Вывод: False - как как строки равны

print(a != 'Hello')
# Вывод: True - так как строки не равны

print('кот' > 'кит')
# Вывод: True потому что "и" идет раньше "0" в алфавите, буква "и" считается меньше

ord() - преобразование символа в код ASCII

print(ord('a'))
# Вывод: 97

Обращение к отдельному символу строки

s = 'hello python'

print(s[0], s[1]) # обращаемся к первому символу
# Вывод: h e

print(s[-1], s[-2]) # обращаемся к последнему и предпоследнему символу
# Вывод: n o

Так же можно обратиться к конкретному символу без присвоения переменной

print('panda'[2])
# Вывод: n

Так же можно выделять несколько символов из строки - срез

'string'[start:stop:step]
start - откуда начинается срез
stop - где заканчивается (последний символ не включается)
step - шаг среза (например, шаг 3 означает, что в срез попадет каждый третий символ)

s = 'hello python'

print(s[1:3])
# Вывод: el

print(s[4:])
# Вывод: o python

print(s[::2]) # каждый второй от начала до конца
# Вывод: hlopto

print(s[2:-2])
# Вывод: llo pyth

print(s[::-1]) # инвертирование строки
# Вывод: nohtyp olleh

Строка - неизменяемый тип. Если, допустим, нужно в строке 'hello python' сделать h заглавной, то можно это сделать так:

s = 'hello python'
s2 = 'H' + s[1:] 
# создаем новую строку и склеиваем H и исходную строку со второго символа
print(s2)
# Вывод: Hello python

Основные методы строк

Синтаксис: Объект.Метод(Аргумент)

Метод upper() - преобразует все символы нижнего регистра в верхний регистр

s = 'python'
s_res = s.upper()
print(s_res)
# Вывод: PYTHON

Метод lower() - преобразует все символы верхнего региста в нижний регистр

s = 'PYTHON'
s_res = s.lower()
print(s_res)
# Вывод: python

Метод count() - возвращает число повторений подстроки в строке
String.count(sub, start, end), [start, end] - необязательные элементы

msg = 'abracadabra'
msg_res = msg.count('ra')
print(msg_res)
# Вывод: 2 - ra повторяется 2 раза

msg_res1 = msg.count('ra', 4, 10) # ищем вхождение с 4 по 10 символ
print(msg_res1)
# Вывод: 0 - потому что последняя а не учувствует в поиске

Метод find() - находит первое вхождение подстроки в строку
String.find(sub, start, end), [start, end] - необязательные элементы

msg = 'abracadabra'
msg_res = msg.find('br')
print(msg_res)
# Вывод: 1 - то есть на символе с индексом 1 началось вхождение

# если указать несуществующую подстроку
msg = 'abracadabra'
msg_res1 = msg.find('brr')
print(msg_res1)
# Вывод: -1 - если подстрока не входит в строку

Метод rfind() - находит первое вхождение подстроки в строку, но, в отличии от find(), ищет с права на лево, в обратном порядке
String.rfind(sub, start, end), [start, end] - необязательные элементы

msg = 'abracadabra'
msg_res = msg.rfind('br')
print(msg_res)
# Вывод: 8

Метод index() - работает так же, как и find(), но в случае, если в строке не находит подстроку, index() возвращает исключение

msg = 'abracadabra'
msg_res = msg.index('brr')
print(msg_res)
# Вывод: ValueError: substring not found

Метод replace() - выполняет замену подстрок на новую подстроку.
String.replace(old, new, count = -1), где count - максимальное количество замен (-1 - без ограничений)

msg = 'abracadabra'
msg_res = msg.replace('a', 'o') # меняем а на о
print(msg_res)
# Вывод: obrocodobro

msg = 'abracadabra'
msg_res1 = msg.replace('ab', 'AB') # меняем ab на AB
print(msg_res1)
# Вывод: ABracadABra

msg = 'abracadabra'
msg_res2 = msg.replace('ab', '') # удаляем ab
print(msg_res2)
# Вывод: racadra

msg = 'abracadabra'
msg_res3 = msg.replace('a', 'o', 2) # меняем а на о только на первых двух символах а
print(msg_res3)
# Вывод: obrocadabra

Метод isalpha() - проверяет строку на то, состоит ли она только из букв

msg = 'abracadabra'
msg_res = msg.isalpha()
print(msg_res)
# Вывод: True

msg = 'abra cadabra'
msg_res2 = msg.isalpha()
print(msg_res2)
# Вывод: False потому что строка не состоит целиком из букв, есть еще и пробел

Метод isdigit() - проверяет строку на то, состоит ли она только из цифр

msg = '5.6'
msg_res = msg.isdigit()
print(msg_res)
# Вывод: False потому что есть точка

msg = '-56'
msg_res2 = msg.isdigit()
print(msg_res2)
# Вывод: False потому что есть минус

msg = '56'
msg_res3 = msg.isdigit()
print(msg_res3)
# Вывод: True потому что только цифры

Метод rjust() - возвращает новую строку с заданным числом символов width и, при необходимости, слева добавляет символы - заполнители fillchar.
String.rjust(width, fillchar = '')

d = 'abc'
d_res = d.rjust(5)
print(d_res)
# Вывод:  abc - слева добавлено 2 символа пробела и строка теперь 5 символов

Часто используется при добавлении незначащих нулей перед цифрами

d = '12'
d_res = d.rjust(4, '0')
print(d_res)
# Вывод: 0012

Метод ljust() - возвращает новую строку с заданным числом символов width и, при необходимости, справа добавляет символы - заполнители fillchar.
String.ljust(width, fillchar = '')

d = '12'
d_res = d.ljust(10, '*')
print(d_res)
# Вывод: 12********

Метод split() - возвращает коллекцию строк, на которую разбивается исходная строка
String.split(sep = None, maxsplit = -1), sep - фрагмент разбиения строки

name = 'Иванов Иван Иванович'.split(' ')
print(name)
# Вывод: ['Иванов', 'Иван', 'Иванович']
digs = '1, 2,3, 4,  5,6 '
digs = digs.replace(' ', '').split(',')
print(digs)
# Вывод: ['1', '2', '3', '4', '5', '6']

Метод join() - из списка строк собирает единую строку

d = ['1', '2', '3', '4', '5', '6']
d1 = ', '.join(d)
print(d1)
# Вывод: 1, 2, 3, 4, 5, 6

fio = 'Иванов Иван Иванович'
fio = ', '.join(fio.split())
print(fio)
# Вывод: Иванов, Иван, Иванович

Метод strip(), lstrip(), rstrip() - удаляет символы пробелов и переносов строк

a = '        hello world         \n'.strip()
# удаляет все символы пробелов и переносов строк в начале и в конце строки
print(a)
# Вывод: 'hello world'

a = '        hello world         \n'.lstrip()
# удаляет все символы пробелов и переносов строк слева
print(a)
# Вывод: 'hello world         '

a = '        hello world         \n'.rstrip()
# удаляет все символы пробелов и переносов строк справа
print(a)
# Вывод: '        hello world'

ТЕКСТ ЛЕКЦИИ