К содержимому

Общие вопросы

Содержание номера · 1 из 3

1.1. Общие вопросы

В предыдущей брошюре [1], в разделе 3, говорилось, что одним из основных типов данных в языке Python является тип str. К нему относятся величины, значением которых является последовательность символов. Это может быть конкретная строка символов, которая указывается в кавычках ('карандаш', "Дмитрий", 'h', ' ' и т.п.1), переменная (s, famil и т.п.) или выражение, результатом которого является последовательность символов (im + ' ' + famil и т.п.). В устной речи и при письме, как правило, этот тип данных называют «строковый тип», а сами данные - «строки».

В [1] были описаны также способы задания значений величинам строкового типа:

- с помощью инструкции присваивания:

  im = 'Дмитрий'

- с помощью инструкции input():

st = input('Введите строку символов ')

При хранении значения в памяти компьютера символы строки расположены подряд (в соседних ячейках). Модель памяти при этом можно представить в виде:

Д м и т р и й
Номер символа 0 1 2 3 4 5 6
im

Рис . 1.1

Видно, что нумерация отдельных символов в памяти компьютера начинается с нуля. Здесь же напомним, что каждый символ в памяти компьютера хранится в виде двоичного числа - его кода.

Строки можно соединять («склеивать») в одно значение. Такая операция называется «конкатенация». Для конкатенации используется знак (оператор) «+»:

Text = 'Меня зовут' + ' ' + im 

Реже используется операция «умножения» величины строкового типа на целое число:

st = 'ABC'
st2 = st * 3 #st2 == 'ABCABCABC'

Видно, что «умножение» в данном случае - это повторение строки заданное число раз.

Можно также сравнивать строки между собой, и не только на предмет их равенства или неравенства:

if derevo > 'дуб':

Вот несколько примеров сравнения строк (во всех случаях результат является истинным):

'a123' > 'a'
'a2' > 'a123'
'a123' > 'aб'
'aб' > 'б'
'б' > 'б2'
'б2' > 'б2д'
'б2д' > 'бб'
'б' > 'а'

Если выписать перечисленные строки в виде:

'a'
'a123'
'a2'
'aб'
'б'
'б2'
'б2д'
'бб'

- то можно установить правило, по которому происходит сравнение двух строк: посимвольно слева направо сравниваются коды соответствующих символов до тех пор, пока не нарушится равенство кодов или не кончится одна из строк (или обе сразу), при этом сразу делается вывод о неравенстве и определяется, какая из строк меньше, а какая - больше. Две величины типа str являются равными, если они равны по длине и совпадают посимвольно.

Именно по такому правилу происходит сравнение строк при их сортировке. Порядок, в котором окажутся строки в результате сортировки, называют «алфавитным» (так расположены, например, слова в словарях).

Но как компьютер «знает», что такое «алфавитный порядок»? И как сравнивать слова, в которых есть и строчные и прописные буквы, а также цифры и другие символы? Оказывается, при сравнении строк используются коды символов.

В кодовой таблице2 прописные буквы стоят раньше строчных и поэтому имеют меньшие коды. Цифры стоят в кодовой таблице по порядку, причем раньше, чем латинские буквы; латинские буквы - раньше, чем русские; заглавные буквы (русские и латинские) - раньше, чем соответствующие строчные.

В Python имеется возможность получить так называемый «срез» строки - последовательность символов, начинающуюся с символа номер nach и заканчивающуюся символом номер kon. Для этого после имени величины строкового типа указать в квадратных скобках значения nach - 1 и kon через двоеточие3.

Пример. Программа для получения слова 'menu' (6-9-й символы строки 'File menu'):

s = 'File menu' 
s2 = s[5:9] #Срез строки s
print(s2)

В дальнейшем часть строки будем называть «подстрока».

Чтобы использовать в программе значение отдельного символа строки, нужно указать имя величины и в квадратных скобках - номер символа в памяти компьютера (где, напомним, нумерация начинается с нуля)4.

Примеры:

print(s[5])
print(famil[k])
if st[nom + 1] == 'Д':
…

В любой момент выполнения программы длину строки (количество символов в ней) можно определить с помощью функции len(). В этом примере в переменную L записывается длина строки s:

L = len(s)

В [1], в разделе 2, рассказывалось о том, что к последовательности символов может быть применен метод upper, преобразующий все буквы строки в их написание в верхнем регистре («прописными буквами»). Обратиться к результату выполнения метода можно так:

<строка>.upper()

Например:

famil.upper()

Десятичный эквивалент кода символа можно получить с помощью функции ord():

ord(<символ>)

Имеются и другие функции и методы для работы со строками. О некоторых из них читатель может узнать ниже, а об остальных - по другим источниками.



1 Если строка ограничена одинарными кавычками, внутри нее могут быть двойные кавычки:

s2 = 'Я болельщик клуба "Спартак"'

и наоборот.

2 Кодовая таблица - таблица, сопоставляющая каждому символу некоторое двоичное число - его код.

3 Указаны номера символов nach и kon в заданном значении величины s. Если известны номера символов в памяти компьютера (см. рис . 1.1) nach_pam и kon_pam, то в квадратных скобках записываются значения nach_pam и kon_pam + 1. Такой вариант использован для выделения отдельных слов предложения (см. далее задачи 10-12) и в других программах, использующих срез строки.

4 После того как вы ознакомитесь со списками (см. раздел 2), вы согласитесь с утверждением, что строка в Python рассматривается как список, значением элементов которого является один символ.


Дальше в номере: «Типовые задачи обработки строк» — 190 ₽, остаётся у вас навсегда.

Войти, чтобы купить
  1. 2 Типовые задачи обработки строк
  2. 3 Преобразования «число ↔ строка»