Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практическое программирование на Python. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
2.6.1. Замена символов в строке
Важно помнить: строки являются неизменяемыми объектами! Это означает, что после инициализации производить замены символом в строке возможности нет!
str = "men's health" print(str[0]) str[0] = 'M' print(str[0])
********************* <ipython-input-6-2e877546c4d9> in <module>()
1 str = "men's health" 2 print(str[0])
----> 3 str[0] = 'M' 4 print(str[0]) TypeError: 'str' object does not support item assignment
Часто при желании заменить какой-то символ, используют функцию замены:
str = "men's health" print(str) str.replace('m','M') print(str)
Но результат в таком случае обычно не оправдывает ожидания: замены не
происходит! Для понимания причин просмотрим на работу следующей программы, которая будет также распечатывать адрес переменной (ее ID):
str = "men's health" print(id(str), str) str = str.replace('m','M') print(id(str), str)
********************* 149763952 men's health
150182384 Men's health
Как можно заметить, все дело в том, что работа функции replace() состоит не в том, чтобы заменить символ в строке (это сделать невозможно), а в том, чтобы вернуть измененную строку!
Таким
образом, адрес переменной для хранения строки стал другим.
21
2.6.2. Индексация
В Python строки являются упорядоченными последовательно­стями символьных данных и могут быть проиндексированы. Доступ к отдельным символам в строке можно получить, указав имя строки, за которым следует число в квадратных скобках [].
Индексация строк начинается с нуля: у первого символа индекс
0, следующего 1 и так далее. Индекс последнего символа в Python – «длина строки минус один». Например, схематическое представление индексов строки 'foobar' выглядит следующим образом:
Индексация элементов строки
s = 'foobar' print(s[0]) print(s[1:2]) print(s[1:5])
********************* f o ooba
Обратите внимание, что при индексации значение нижнего индекса включается, а верхнего – нет.
Индексы строк также могут быть указаны отрицательными числа­ми. В этом случае индексирование начинается с конца строки: –1 относится к последнему символу, –2 – к предпоследнему и т. д. Вот такая же диаграмма, показывающая как положительные, так и отрицательные индексы строки 'foobar':
Индексация элементов строки отрицательными значениями
22
s = 'foobar' print(s[-1]) print(s[-len(s)])
**************** r f
2.6.3. Срезы
В Python, кроме индексов, существуют ещё и срезы.
item[START:STOP:STEP]
Таким образом, берётся срез от номера START, до STOP (не включая его), с шагом STEP.
По умолчанию START = 0, STOP = длине объекта, STEP = 1. Соответственно, какие-нибудь (а возможно, и все) параметры могут быть опущены.
a = [1, 3, 8, 7] print(a[:]) # [1, 3, 8, 7] print(a[1:]) # [3, 8, 7] print(a[:3]) # [1, 3, 8] print(a[::2]) # [1, 8]
Также все эти
параметры могут быть и отрицательными:
a = [1, 3, 8, 7] print(a[::-1]) # [7, 8, 3, 1] print(a[:-2]) # [1, 3] print(a[-2::-1]) # [8, 3, 1] print(a[1:4:-1] ) # []
Также с помощью срезов можно не только извлекать элементы, но и добавлять и удалять элементы (разумеется, только для изме­няемых последовательностей).
a = [1, 3, 8, 7] a[1:3] = [0, 0, 0] print(a) # [1, 0, 0, 0, 7] del a[:-3] print(a) #[0, 0, 7]
23
2.7. Списки
Списки в Python – упорядоченный изменяемый набор объек­тов произвольных типов. Необходимо заметить, что в отличие от классических массивов, элементы списка могут иметь разные типы.
Создавать список можно как пустым, так и инициализиро­ванным:
s = [] # Пустой список my_list = list() l = ['s', 'p', ['isok'], 2]
К элементам списка можно обращаться по его индексу и произ­водить базовые операции (что
делает их похожими на классические
массивы):
my_list = ['Vasya', 'Petya', 'Masha', 'Valya'] temp = my_list[0] print(temp) my_list[0] = my_list[3] my_list[3] = temp print(my_list)
Часто бывает необходимо объединить два списка. Поскольку в Python нет четкого размера списка и список может изменяться, то можно сделать это с помощью специальной функции:
First_list = [1, 7, 9] Second_list = [4, 5] First_list.extend(Second_list) print(First_list)
Но при этом в Python можно сделать и так:
Res_list = First_list + Second_list print(Res_list)
24
2.7.1. Генераторы списков
Генератор списков – способ построить новый список, применяя выражение к каждому элементу последовательности. Генераторы списков очень похожи на цикл for.
my_list = [1, 3, 67, 4] new_list = [i * 3 for i in my_list] print(new_list)
Также возможно применять условия при генерации.
my_list = [1, 3, 67, 4] new_list = [i * 3 for i in my_list if i != 3] print(new_list)
2.7.2. Примеры работы со списком
Рассмотрим пример по работе со списком на примере про­граммы, которая должна считать набор чисел
и посчитать их
сумму.
Основной сложностью перед начинающими программистами на Python является необходимость преобразовать строку в список. И если разбиение на части строки проблем не вызывает, то преобразование типов часто ставит в тупик. В качестве первого примера рассмотрим создание нового списка:
inp = input() spis = inp.split() nums = [] for i in spis: nums.append(int(i)) nums print(sum(nums))
В качестве второго примера рассмотрим замену элементов
списка
элементами другого типа:
inp = input() inp = inp.split() for i in range(len(inp)): inp[i] = int(inp[i]) print(sum(inp))
25
2.7.3. Методы списков
Для списков доступны основные
Метод Описание
list.append(x)
list.extend(L)
list.insert(i, x)
list.remove(x)
list.pop([i])
list.index(x, [start [, end]])
list.count(x)
list.sort([key=_____])
Добавляет элемент в конец списка
Расширяет список list, добавляя в конец все элементы списка L
Вставляет на i-ый элемент значение x
Удаляет первый элемент в списке, имею­щий значение x. ValueError, если такого элемента не существует Удаляет i-ый элемент и возвращает его. Если индекс не указан, удаляется послед­ний элемент Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end)
Возвращает количество элементов со зна­чением x
Сортирует список на основе функции
встроенные функции и методы.
list.reverse()
list.copy()
list.clear()
Разворачивает список
Поверхностная копия списка
Очищает список
Нужно отметить, что методы списков, в отличие от
методов
, изменяют сам список, а потому результат выполнения не
нужно записывать в эту переменную.
26
строковых
2.8. Кортежи
Кортеж похож на список, но вы создаете его с круглыми скобками, вместо квадратных. Вы также можете использовать встроенный инструмент для создания кортежей. Разница в том, что кортеж неизменный, в то время как список может меняться.
my_tuple = (1, 2, 3, 4, 5) a = my_tuple[0:4] print(a) # (1, 2, 3) my_tuple2 = tuple() my_tuple3 = tuple([1, 2, 3]) print(my_tuple2) print(my_tuple3)
Кортежи нельзя изменять, а значит, невозможно в созданном кортеже изменять элементы
, делать сортировку и так далее.
При необходимости можно преобразовать кортеж в обычный список:
my_list = list(my_tuple) print(my_list)
2.9. Словари
Словари в Python – это неупорядоченный набор пар «ключ­значение», причем ключи обязательно должны быть уникальными.
Можно представить словарь Python как хэш-таблицу. В некоторых языках словари могут упоминаться как ассоциативная память, или ассоциативные массивы. Они индексируются
при помощи ключей, которые могут быть любого неизменяемого типа. Например, строка или число могут быть ключом.
Словари могут создаваться следующим образом:
dict1 = {} dict2= dict() dict3 = {"one":1, "two":2, "three":3}
Далее рассмотрим пример использования словарей:
my_dict = {"one":1, "two":2, "three":3} print(my_dict["one"]) # 1 my_dict2 = {"name":"Mike", "addr":"HappyWay3"} print(my_dict2["name"]) # 'Mike' if "name" in my_dict2: print("name exist")
27
2.10. Встроенные функции и пересечение имен
Рассмотрим пример задачи по суммированию членов ряда:
sum = 0 for i in range(10): sum += i print(sum)
В данном примере мы создаем переменную sum, в которой накап-
ливаем значение суммы ряда.
Приведенный код работает корректно и обычно вопросов не вызы­вает. Однако в языке Python существует ряд стандартных функций, встроенных изначально. И проблемы возникают,
если в дальнейшем
программист захочет использовать стандартную функцию sum:
data = [i for i in range(0, 10)] print(data) print(sum([i for i in range(0, 10)]))
Сам по себе приведенный код совершенно корректен. Однако если в среде был предварительно запущен предыдущий код, в котором создана переменная sum, то попытка обратиться по этому имени к функции приведет к ошибке! Поэтому будьте внимательны и, если возникает ошибка компиляции, всегда
выясняйте причину этой ошибки.
2.11. Работа с файлами
Для работы с файлом его необходимо сначала открыть:
f = open('_имя_', '_режим_')
После того как работа с файлом окончена, его необходимо закрыть:
f.close()
Режим Описание
r
w
x a b t +
Открытие на чтение (является значением по умолчанию). Открытие на запись. Содержимое удаляется при открытии.
Если файла нет, то создается новый. Открытие на запись. Если файла нет, то вызывается исключение. Открытие на дозапись. Информация добавляется в конец файла. Открытие в двоичном режиме. Открытие в текстовом режиме (является значением по умолчанию). Открытие на запись и запись.
Атрибуты открытия файлов
28
Также существует еще третий аргумент функции открытия, задающий кодировку.
2.11.1. Запись в файл
Для записи в файл можно использовать метод write(). Для примера рассмотрим запись в файл строки, введенной пользова­телем:
f = open('My_File.txt', 'w') str = input() f.write(str) f.close()
При необходимости записать в файл список, делать это нужно поэлементно:
f = open('My_File.txt', 'w') str = input().split() for i in str: f.write(i) f.close()
Обратите внимание: запись в файл
будет осуществляться подряд без разделителя. При необходимости разделения необходимо добавить соответствующий символ:
f = open('My_File.txt', 'w') str = input().split() for i in str: f.write(i + '\n') f.close()
2.11.2. Чтение из файла
Для чтения из файла можно использовать метод read(), который
вычитывает все содержимое за раз:
f = open('My_File.txt', 'r') temp = f.read() print(temp) f.close()
29
Поскольку чтение из файла аналогично чтению данных от пользо-
вателя, то дальнейшие действия могут быть аналогичными:
f = open('0_My_File.txt', 'r') temp = f.read().split() print(temp) data = [] for i in range(len(temp)): data.append(int(temp[i])) print(data) print(sum(data)) f.close()
2.12. Пользовательские функции
Функция в Python – объект, принимающий аргументы и возвра­щающий значение. Обычно функция определяется с помощью инст­рукции def:
def my_add(x, y): return x + y
print(my_add(2, 6))
Обратите внимание: поскольку четкая типизация отсутствует, то наша функция может использовать
не только для чисел, но и,
например, для строк:
def my_add(x, y): return x + y
print(my_add(2, 6)) print(my_add('Hi', 'Petya'))
2.12.1. Аргументы функций
Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произ­вольным числом аргументов, функции с позиционными и именован­ными аргументами, обязательными и необязательными:
def my_func(a, b, c=2): return (a + b + c)
print(my_func(1, 2)) print(my_func(1, 2, 7))
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]