Урок 5. Строки


Друзья, мы с вами продолжаем изучение Python и напомню, что в предыдущем уроке мы познакомились с вами с таким понятием, как переменная. Мы узнали, что это такое, как определяется переменная, как присвоить им какое-то значение, но и узнали правила именования переменных. На очереди у нас такая тема, как строки, и тема достаточно обширная, поскольку строка - это, пожалуй, один из самых распространённых и, наверное, самый часто используемый тип данных в любом языке программирования и Python здесь не исключение. Мы узнаем что такое строка, что это за тип данных, как с ними работать, как использовать в коде. Мы с вами узнаем об операциях, которые можно производить со строками. Узнаем о методах, которые Python предлагает для работы со строками, индексах, разрезах и так далее. Вот такие темы у нас стоят на повестке текущего урока.

Мы печатали "Hello world" и это было не что иное как литерал, так называемое литерал строки. Ну и когда мы писали, допустим, многострочный комментарий - это тоже была многострочная строка. Мы можем объявить строку очень просто в одинарных, либо в двойных кавычках, без разницы. Итак, давайте мы объявим какую-нибудь строку.

Код

s1 = "первая строка"
s2 = 'вторая строка'
s3 = "третья 'одинарные кавычки' строка"
s4 = 'четвёртая "двойные кавычки" строка'
print(s1)
print(s2)
print(s3)
print(s4)

''' вывод:
первая строка
вторая строка
третья 'одинарные кавычки' строка
четвёртая "двойные кавычки" строка
'''

Как и в других языках программирования в Python можно использовать экранирущие последовательности. В качестве экранирующего символа выступает обратный слэш (backslash ("\")). Для чего они используются?

  • \n - перевод строки на следующую строчку кода
  • \t - ставит табуляцию
Список экранирующих последовательностей:

Как работают экранирующие последовательности?


# как вывести строку  Hello "test" world

# words = "Hello "test" world" # неправильный формат. Здесь он будет выступать в качестве специального символа.
words = "Hello \"test\" world"	# правильный формат
print(words)


words1 = "Hello world \nHello world"
print(words1)

'''
Вывод: 
Hello world 
Hello world
'''

words2 = "Hello world \\nHello world"
print(words2)

'''
Вывод:
Hello world \nHello world
'''

words3 = "Hello world \tHello world"
print(words3)

'''
Вывод:
Hello world 	Hello world
'''

words4 = "Hello world \\tHello world"
print(words4)

'''
Вывод:
Hello world \tHello world
'''

print(r"Hello world \n \n \t \t Hello world")
'''
Вывод:
Hello world \n \n \t \t Hello world
'''

Символы строки имеют уникальный индекс. Это означает, что по индексу мы можем обращатся к любому символу строки. Рассмотрим порядок индексации строки

-10  -9  -8  -7  -6  -5  -4  -3  -2  -1 			
  0   1   2   3   4   5   6   7   8   9
  H   E   L   L   O   W   O   R   L   D
		

Индексация строки

'''
-10  -9  -8  -7  -6  -5  -4  -3  -2  -1 			
0     1   2   3   4   5   6   7   8   9
H     E   L   L   O   W   O   R   L   D
'''
word = "HELLOWORLD"
print(word[3]) # L
print(word[9]) # D
print(word[-1]) # D
print(word[-10]) # H
print(word[0]) # H		

Срезы имеют следующий синтаксис X:Y:Z. При этом все три параметра не являются обязательными, то есть мы можем опускать при необходимости. Что они обозначают: X обозначает начало среза, Y окончание среза и Z обозначает шаг среза. Чаще всего используют первые две.

Ещё несколько срезов

'''
-10  -9  -8  -7  -6  -5  -4  -3  -2  -1 			
0     1   2   3   4   5   6   7   8   9
H     E   L   L   O   W   O   R   L   D
'''
word = "HELLOWORLD"
print(word[3:5]) # Вывод: LO   Символы от 3 индекса до 5
print(word[0:9]) # Вывод: HELLOWORL   Символы от 0 индекса до 9     Сам индекс 9 не включается
print(word[-1::-1]) # Вывод: DLROWOLLEH   Перевёрнутая строка    Начиная с индекса -1 до начала с шагом -1, т.е назад
print(word[::2]) # HLOOL   Выводит все символы через один символ, начиная с первого символа
print(word[::]) # HELLOWORLD

Методов достаточно много и мы разберём некоторые из них. А другие методы рекомендую ознакомиться на досуге. Строки в Python относятся к неизменяемым последовательностям. Это значит, что все методы и функции, которые работают со строками могут создавать лишь новую строку, т.е не изменюят текущую строку.

Метод Операция
len(a) Длина строки
s.find(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или -1, если str не найден
s.rfind(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или -1, если str не найден
s.index(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError, если str не найден
s.rindex(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError, если str не найден
s.replace(шаблон, замена) Замена шаблона
s.split(символ) Разбиение строки по разделителю
s.isdigit() Состоит ли строка из цифр
s.isalpha() Состоит ли строка из букв
s.isalnum() Состоит ли строка из цифр или букв
s.islower() Состоит ли строка из символов в нижнем регистре
s.isupper() Состоит ли строка из символов в верхнем регистре
s.isspace() Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы ('\f'), "новая строка" ('\n'), "перевод каретки" ('\r'), "горизонтальная табуляция" ('\t') и "вертикальная табуляция" ('\v'))
s.join(список) Сборка строки из списка с разделителем S
ord(символ) Символ в его код ASCII
chr(число) Код ASCII в символ
s.capitalize() Переводит первый символ строки в верхний регистр, а все остальные в нижний
s.count(str, [start],[end]) Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (по умолчанию: начало, start = 0; конец, end = длине строки)
s.strip([chars]) Удаление пробельных символов в начале и в конце строки
s.title() Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний

Методы строк на примерах

s = "Cтрока - это тип данных! Never give up!"
print(len(s))           #Вывод: 39    Учитывает пробелы, знаки препинания

print(s.find("!"))      #Вывод: 23    Индексация начинается с нуля. Поиск с начало строки
print(s.rfind("!"))     #Вывод: 38    Поиск с конца строки
print(s.find("В"))      #Вывод: -1    Такого символа в строке не существует

print(s.replace("!", '.'))  # Вывод: Cтрока - это тип данных. Never give up.    Меняет все символы "!" на "."

print(s.split(' ')) 	# Вывод: ['Cтрока', '-', 'это', 'тип', 'данных!', 'Never', 'give', 'up!']   разбили на части по пробелу. В итоге получаем массив с 8 элементами.

s1 = "1234"
print(s1.isdigit())	# True Строка s1 действительно состоит только из цифр
print(s.isdigit())  	# False Строка s не состоит из цифр

s2 = "Толькобуквы"
print(s2.isalpha()) 	# True Строка s1 действительно состоит только из букв
print(s.isalpha()) 		# False В строке присутствуют пробелы и знаки препинания, поэтому ответ false

s3 = "маленькие буквы"
print(s3.islower()) 	# True В строке s3 все буквы действительно нижнего регистра
print(s.islower()) 	# False В строке присутствуют буквы, записанные с большой буквы.

print(" ".join(s)) 	# C т р о к а   -   э т о   т и п   д а н н ы х !   N e v e r   g i v e   u p !    Вставляет пробелы после каждого символа, кроме последнего
print(s.join("123")) 	# 1Cтрока - это тип данных! Never give up!2Cтрока - это тип данных! Never give up!

s4 = "PROGRAMMER"
print(s.capitalize())  	# Cтрока - это тип данных! never give up!
print(s4.capitalize()) 	# Programmer

print(s4.count("R"))  	# 3  В слове Programmer символ "R" встречается 3 раза. Их индексы: 1, 4, 9
print(s4.count("R", 0, 6)) # 2 В строке PROGRAM символ "R" встречается 2 раза. Их индексы: 1, 4. То есть, задаём промежуток для поиска

s5 = "   Cтрока с пробелами в начале и в конце   "
print(s5.strip()) 		# s5 = "Cтрока с пробелами в начале и в конце". В итоге удалились пробелы в начале и в конце строки

print(s.title()) 		# Cтрока - Это Тип Данных! Never Give Up!

print("12" * 5) # 1212121212. Программа выводит  5 раз строку "12"

Форматирование строк

name = "Minhojkhon"
age = "16"
print(f"Hi. My name is {name}. I'm {age}. I'm founder of this site.") # подставляем внутри фигурных скобок имена переменных
print("Hi. My name is {}. I'm {}. I'm founder of this site.".format(name, age))

a = 2
b = 5
print(f"{a} + {b} = {a + b}")
print("{} + {} = {}".format(a, b, a + b))


Ну что ж, пожалуй, это всё, что я хотел вам рассказать в данном уроке. Достаточно много уделили её внимание. Это того стоило, поскольку это часто используемый тип данных в любом языке программирования и она вам не раз ещё пригодится.


Комментарии

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