Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Python. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
locations = [] tula = (54.1960, 37.6182) moscow = (55.7522, 37.6155) locations.append(tula) locations.append(moscow) print(locations)
>> [(54.196, 37.6182), (55.7522, 37.6155)]
eights = ["Эдгар Алан По", "Чарльз Диккенс"] nines = ["Хемингуэй", "Фицджеральд", "Оруэлл"] authors = (eights, nines) print(authors)
>> (['Эдгар Алан По', 'Чарльз Диккенс'], ['Хемингуэй', 'Фицджеральд', 'Оруэлл'])
bday = {"Хемингуэй": "21.07.1899", "Фицджеральд": "24.09.1896"} my_list = [bday] print(my_list) my_tuple = (bday,) print(my_tuple)
>> [{'Хемингуэй':'21.07.1899','Фицджеральд':'24.09.1896'}] >> ({'Хемингуэй':'21.07.1899','Фицджеральд':'24.09.1896'},)
Список, кортеж или словарь могут быть значениями в словаре.
ru = {"расположение": (55.7522, 37.6155), "знаменитости": ["Андрей Звягинцев", "Юрий Быков",
41
"Петр Буслов"], "факты": {"город": "Москва", "страна": "Россия"} }
Словарь ru включает три ключа: «расположение», «знаменитости», «факты». Первый ключ – кортеж, т.к. географические координаты неизменны.
Второй ключ – список знаменитостей Москвы, это список, т.к. данные могут измениться. Третий ключ – словарь, т.к. пары ключ-значение – лучший способ представить факты о Москве.

5. Операции со строками

Для лучшей читаемости кода желательно длинную строку разбить на не­сколько строк. В этом случае ее нужно поместить в тройные кавычки. Заме­тим, что использование одинарных или двойных кавычек в данном случае явля­ется синтаксической ошибкой.
""" line one line two line three """
Строки итерируемы. Добраться до любого символа строки можно с помощью
взятия индекса. Отметим, что отсчет символов строки начинается с 0, а не с 1.
my_string = "IBM" my_string[0] my_string[1] my_string[2]
>> 'I' >> 'B' >> 'M'
42
Для доступа к каждому символу используют индексы 0, 1, 2. При исполь-
зовании индекса, выходящего за эти пределы, система сгенерирует исключение:
my_string = "IBM" my_string[3]
>> IndexError: string index out of range
Заметим, что в Python существует возможность использовать отрицатель-
ные индексы. Если в вышеприведенном примере использовать конструкцию
my_string[-1], получим доступ к последнему элементу 'M', при использо­вании индекса «-2» – к предпоследнему 'B' и т.д.
Строки подобно кортежам неизменяемы, т.е. если нужно изменить симво-
лы в строке, то необходимо создать новую строку.
Можно передать параметры методу, который выполняет код и возвраща­ет результат точно так же, как функция. В отличие от функции, метод вызы­вается для объекта. Например, если есть строка “Hello”, можно вызвать “Hello”.[имя_метода]() в этой строке. Помимо вызова объекта можно думать о методе, как и о функции (на данный момент).
Одним из методов управления строками является изменение регистра. Можно изменить строку так, чтобы каждая буква была прописной, вызвав для нее метод upper:
"Per aspera ad astra".upper()
>> 'PER ASPERA AD ASTRA'
Точно так же можно изменить каждую прописную букву в строке на строчную, использовав метод lower:
"ВСЕ ПРОЙДЕТ И ЭТО ТОЖЕ ПРОЙДЕТ".lower()
>> 'все пройдет и это тоже пройдет'
Если возникает необходимость создать строку с использованием перемен­ных, то это делается с помощью метода format:
year_creation = "1989" "Python was created in {}.".format(year_creation)
>> 'Python was created in 1989.'
43
Функция format ищет любые вхождения в строке фигурных скобок {}
и заменяет их значениями, которые передаются ей.
Вы не ограничены использованием {} один раз и можете поместить столь-
ко из них в свою строку, сколько захотите:
year_creation = "1989"
creator = "Guido van Rossum"
country = "the Netherlands"
my_string = "Python was created in {} by {} in
{}.".format(year_creation, creator, country)
print(my_string)
>> 'Python was created in 1989 by Guido van Rossum in the
Netherlands.'
У строк есть метод, называемый split, используемый для разделения од-
ной строки на две строки. Можно передать методу split символ или символы, которые хотите использовать для разделения строки, например, можно пере­дать точку, чтобы разделить строку на две разные строки:
""" Practice doesn’t make perfect. Practice makes mye-
lin, and myelin makes perfect.""".split(".")
>> ["Practice doesn’t make perfect", 'Practice makes myelin, and myelin makes perfect',"]
Результатом является список с двумя разными строками, разделенными
точкой в исходной строке.
Метод join позволяет добавлять новые символы между каждым симво-
лом в строке:
my_string = 'abc'
join_result = '+'.join(my_string)
join_result
>> 'a+b+c'
44
Можно превратить список строк в одну строку, вызвав метод join для пу-
стой строки ("") и передав список:
the_Fox = ["The",
"fox", "jumped", "over", "the",
"fence", "."] one_string = "".join(the_Fox) one_string
>> The fox jumped over the fence.
Если метод join содержит только пробел, то есть " ".join, можно со-
здать новую строку, в которой каждое слово будет отделено пробелом.
Метод replace позволяет заменять каждое вхождение символа(ов) дру-
гим символом (символами). Первый параметр – это символ(ы) для замены, а второй параметр – это символ(ы) для его замены.
my_string = "The cat jumped over the hat." my_string = my_string.replace("a", "@") my_string
>> "The c@t jumped over the h@t."
Можно получить индекс первого вхождения символа в строку с помощью
метода index. Для этого необходимо передать искомый символ и получить индекс первого вхождения символа в строку:
'cat'.index('a')
>> 1
При отсутствии соответствия Python сгенерирует исключение.
"animals".index("y")
>> ValueError: substring not found
45
Во избежание такой ситуации желательно обработать исключение.
try:
"animals".index("y")
except:
print("Not detected.")
>> Not detected.
Чтобы проверить, находится ли одна строка в другой, используется ключе-
вое слово in. В случае нахождения возвращается значение True, в противном случае – False:
"Puss" in "Puss in Boots."
>> True
"Mouse" in "Puss in Boots."
>> False
Добавление ключевого слова not перед in позволяет проверить отсут-
ствие одной строки в другой:
"Potter" not in "Harry"
>> True
Управляющие символы. Использование кавычек внутри строки является
синтаксической ошибкой:
"She said "Definitely.""
>> SyntaxError: invalid syntax
Решить эту проблему можно с помощью экранирования, что означает
помещение специального символа перед символом, который имеет особое зна­чение в Python (в данном случае специальный символ – это кавычка), чтобы со­общить Python, что этот конкретный символ является обычным символом. Спе­циальный символ для экранирования – обратный слеш.
"She said \"Definitely.\""
>> 'She said "Definitely."'
'She said \"Definitely.\"'
>> 'She said "Definitely."'
46
Управляющие символы не требуются в следующих случаях: 1) перед оди-
нарными кавычками в строке с двойными кавычками и 2) перед двойными ка­вычками внутри одинарных.
"She said 'Definitely.'"
>> "She said 'Definitely.'"
'She said "Definitely."'
>> 'She said "Definitely."'
Можно использовать "\n" внутри строки для переноса строки:
print("line1\nline2")
>> 'line1' >> 'line2'
Можно соединить две или более строк, используя оператор сложения. Ре-
зультатом будет одна строка с символами из первой строки, за которыми сле­дуют символы из следующих строк. Эта операция называется конкатенацией:
"cat" + "in" + "the" + "hat"
>> 'catinthehat'
"cat " + "in " + "the " + "hat "
>> 'cat in the hat'
Возможно умножить строку на число с помощью оператора умножения:
"cat" * 3
>> 'catcatcat'
Извлечение срезов (slices). Часто возникает необходимость извлечь под-
строку из строки. Синтаксис описания срезов:
some_list[START:STOP:STEP],
где some_list – итерируемый объект; START – индекс первого элемента в вы­борке, откуда срез берёт начало до элемента с индексом STOP (не включая его), с шагом STEP. По умолчанию START = 0, STOP = длине объекта, STEP = 1 . Соответственно, какие-нибудь (а возможно, и все) параметры могут быть
опущены.
47
Если интересует срез [4:26:7], то это выборка элементов с индексами 4, 11,
18, 25. При этом любой из трёх параметров среза может быть опущен и вместо соответствующего параметра будет выбрано некое значение по умолчанию.
Если опущен параметр: START – будет выбрано некое значение по умолчанию "от начала
списка",
STOP – "до конца списка" (включительно), STEP – "брать каждый элемент".
Ниже приведены примеры с разными наборами параметров:
[:]/[::] – "весь список", [::2] – "нечётные по порядку элементы", [1::2] – "чётные по порядку элементы", [::-1] – "все элементы в обратном порядке", [5:] – "все элементы, начиная с шестого", [:5] – "все элементы, не доходя до шестого", [-2:1:-1] – "все элементы от предпоследнего до третьего в обратном по-
рядке" (во всех случаях выборки от большего индекса к меньшему нужно ука­зывать шаг!).
Срезы работают в двух режимах: выборки и присваивания. Срезы-выборки применимы к спискам, кортежам, строкам. Новое значе-
ние соответствует типу, к которому применялась выборка:
'hello'[2:] # 'llo' (1, "abc", True, None)[2:] # (True, None)
[1, 2, 3, 4, 5][2:] # [3, 4, 5]
Заметим, что:
срезы наименее полезны для кортежей, копировать список проще всего по срезу [:], при порождении нового списка или кортежа копируются только ссылки.
Одним из вариантов модификации списка (но не строк и кортежей) яв-
ляется присваивание срезу. Срезу с указанным шагом можно присвоить список, содержащий соответствующее (то же, что и в срезе) количество новых эле­ментов.
48
Пример:
list = [1, 2, 3, 4, 5, 6] list[::2] = [0, 0, 0] print(list) # => [0, 2, 0, 4, 0, 6]
Если попытаться присвоить срезу с шагом не то количество элементов, то
система сгенерирует ошибку:
list = [1, 2, 3, 4] list[::2] = [5, 6, 7]
>> ValueError: attempt to assign sequence of size 3 to extended slice of size 2
Если срез непрерывный (шаг не указан и индексы идут подряд), то такому
срезу можно присвоить как больше элементов, тогда список вырастет, так и меньше, что приведёт к урезанию списка. Примеры:
list = [1, 2, 3] list[2:] = [4, 5] print(list) # => [1, 2, 4, 5] list[1:-1] = [100] print(list) # => [1, 100, 5] list [:] = [] print(list) # => []
Сначала список растёт, потом уменьшается, а затем становится пустым. Срезы можно создавать и использовать сами по себе, как обычные
значения.
Сконструировать срез можно с помощью функции slice:
first_two = slice(2) each_odd = slice(None, None, 2) print(each_odd) # => slice(None, None, 2) list = [1, 2, 3, 4, 5]
49
print(list[first_two]) # => [1, 2] print(list[each_odd]) # => [1, 3, 5]
Функция slice может иметь от одного до трёх параметров – START,
STOP, STEP. Если нужно "пропустить" один из параметров, то вместо него
можно подставить None.
Заметим, что:
None можно использовать и в записи срезов в квадратных скобках. Там
None также будет означать пропуск значения!
На месте параметров среза могут быть любые выражения, лишь бы они
имели целые значения или None.
Элемент с индексом STOP не попадает в выборку. Какой бы ни выбрали неотрицательный индекс n для любого списка, даже выходящий за его пределы, будет соблюдаться равенство
list == list[:n] + list[n:]
Пример:
s = 'Hello!'
print(s[:2] + s[2:]) # => 'Hello!' print(s[:4] + s[4:]) # => 'Hello!' print(s[:0] + s[0:] == s) # => True print(s[:100] + s[100:] == s) # => True

6. Циклы

Основными и решающими преимуществами компьютера перед человеком являются колоссальное быстродействие, умение принимать решение и обраба­тывать циклические структуры.
Циклическими называют такие структуры, когда нужно снова и снова ис­пользовать определенный фрагмент/блок кода.
Проще говоря, циклы нужны для того, чтобы пользоваться созданным фрагментом кода несколько раз.
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]