Строки. Обзор

Строка - это список (или последовательность) символов, расположенных в определенном порядке. Вся последовательность символов рассматривается как единый объект.

Символом является все, что вы можете набрать на клавиатуре в одно нажатие клавиши (буква, цифра, обратная косая черта или другой какой-либо символ).

Строки могут иметь пробелы : "Привет, мир!".

Пустая строка является строкой, которая имеет 0 символов.

Python признает в качестве строк все, что записано в кавычках (" ") или апострофах (' ').

В языке Python строка относится к типу str.
 
Надо запомнить!
Строки в Python неизменяемы!


Записать новое значение в строку можно с помощью оператора ввода
s = input()

Также можно просто присвоить переменной какое-либо строковое значение, например 
s = 'Питон'
или так
s = "Питон"

Можно определить длину строки, используя встроенную функцию len()
n = len(s)


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

Строки можно сравнивать между собой так же, как и числа. Можно определить, какая из строк больше, какая - меньше.

При сравнении строк сравниваются коды символов. Существуют десятки, если не сотни, кодировок символов. Понять эту концепцию легче всего, разобрав одну из самых простых, ASCII (почитайте про нее здесь). 

Необходимо понять, что в современных кодировках и русские, и английские буквы расположены в алфавитном порядке, цифры также идут от меньшей к большей. 
Например, в таблице ASCII-кодов код английской буквы 'A' - 65, буквы 'a' - 97, цифра '0' имеет код 48. Русские буквы расположены в расширенной части таблицы ASCII-кодов (номера с 128 по 255). Заглавные буквы стоят раньше (то есть имеют код меньше), чем строчные.

В большинстве используемых кодировочных таблицах закономерности такие же, строчные буквы стоят позже заглавных, цифры раньше букв, а русские буквы позже английских.
 
При сравнении символов или строк, Python конвертирует символы в их соответствующие порядковые значения, после чего сравнивает слева направо. 

Например: "паровоз"  < "пароход", потому что слова различаются в пятой букве и "в" < "х".

Разделение строки на части

При вводе строки можно сразу же разделять ее на части по какому-либо разделителю.
Так мы уже делали, когда вводили несколько числовых переменных в одной строке. Для разделения строки на части мы использовали метод split(). По умолчанию он разделяет строки на подстроки по пробелу.
Используя такой способ, можно разделить строку на части, например, по пробелам. И каждую часть строки записать в отдельную переменную.
 
Пример
s1, s2 = input().split()

В примере, при вводе двух слов через пробел, первое слово сохраняется в переменной s1, второе - в переменной s2.

Сложение и умножение строк

Строки можно складывать, для этого используется знак "+". Эту операцию называют сцеплением строк или конкатенацией
 
Пример 
s = "Привет, "
s1 = "мир"
print(s + s1)
На экране появится фраза "Привет, мир" (без кавычек).

В Python реализована операция умножения строки на число: она заменяет многократное сложение.
 
Пример 
Строку
s = "мир "+"мир "+"мир "+"мир "
можно заменить на 
s = "мир " * 4

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

Каждый символ строки имеет свой номер (называется индексом), причем нумерация во многих языках всегда начинается с нуля.
В языке Python можно указывать отрицательные индексы. Это означает, что отсчет ведется с конца строки.
 
Пример 
Строка S H e l l o
Индекс S[0] S[1] S[2] S[3] S[4]
Индекс S[-5] S[-4] S[-3] S[-2] S[-1]

Если к отрицательному индексу прибавить длину строки, можно получить "нормальную" позицию символа.
 
Надо запомнить!
В Python нельзя изменить отдельный символ в строке, так как строки сами по себе неизменяемы. 

Перебор всех символов

Поскольку к символу можно обращаться по индексу, для перебора всех символов можно использовать цикл по переменной, которая будет принимать возможные значения индексов. Например, программа, которая выводит на экран все коды символов строки s будет выглядеть так
for i in range(len(s)): 
    print(s[i], ord(s[i]))
Пояснения к программе:
1) Функция len(s) находит длину строки. Индекс первого символа равен 0, а индекс последнего len(s)-1. Переменная цикла i как раз и будет принимать последовательно значения от 0 до len(s)-1.
2) В каждой строке сначала будет выводиться сам символ, а затем его код, который возвращает встроенная функция ord().

Такой же перебор можно записать короче:
for c in s: 
    print(c, ord(c))
В данном фрагменте заголовок цикла перебирает все символы s, помещая их по очереди в переменную c.

Как уже говорилось, особенность Python при работе со строками заключается в том, что строки - это неизменяемые объекты. Другими словами, мы не можем изменять отдельные символы строки.

Например, не сработает следующий оператор
s[5]='a'
Но можно составлять из символов новую строку с требуемыми изменениями.
 
Задача
Во входной строке заменить все символы 'a' на символы 'b'. 
s = input()
sNew = ""
for c in s:
    if c == 'a': c = 'b'
    sNew += c
print(sNew)

В данной программе цикл перебирает все символы строки s. В теле цикла проверяем значение переменной с: если символ совпадает с символом 'a', то заменяем его на 'b', и добавляем его в конец новой строки sNew с помощью оператора сложения.
Данный вариант работает достаточно медленно.

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