ЛЕКЦИЯ 7 Применение списков 1
Методы списка 2 Метод – это функция, первый параметр которой указывается не в скобках, а перед именем функции через точку.
Сортировка списков список.sort(key = None, reverse = False) 3 key – функция одного аргумента, reverse – логическое значение. Если задан параметр key, алгоритм сортировки будет сравнивать не два элемента, e1 < e2, а два значения key(e1) < key(e2) Параметры по умолчанию – параметры, значения которых не обязательно указывать при вызове. >>> def odd(x): return x % 2 >>> t = [2,4,3,5,8,9] >>> t.sort(key = odd) >>> t [2, 4, 8, 3, 5, 9]
Задачи 1.Переставить элементы списка в обратном порядке. Новый список не создавать. 2.Удалить из числового списка все элементы, стоящие на четных местах. 3.Даны два списка. Удалить из первого списка все элементы, которые встречаются и во втором списке тоже. 4.Задан список. Оставить в нем только уникальные элементы, например, [1,3,2,4,3,2,1] => [1,3,2,4]. 5.Задан числовой список. Переставить числа так, чтобы вначале шли все отрицательные числа, а за ними все положительные. 6.Задан список, упорядоченный по возрастанию. Вставить в него новый элемент так, чтобы порядок не нарушился 7.Задан список из числовых списков. Отсортировать по сумме чисел во вложенных списках. 4
Инструкция for for - специальное издание инструкции повторения для последовательностей. 5 L = [2,4,7] for x in L: print(x) Встроенная функция range(a, b) ведет себя как список [a, a + 1, a + 2,…,b – 1] p = 1 while x
Срезы 6 Срез – это способ образовать новую последовательность из заданной. новая = старая[н : к : ш] "от начала (включительно) до конца (исключительно) с шагом". >>> L = [ 'A', 'B', 'C', 'D', 'E', 'F' ] >>> L[1:5:2] ['C','E'] Нумерация индексов в списке [ 'A', 'B', 'C', 'D', 'E' ] 'A' L[::-1] => ['F', 'E', 'D', 'C', 'B', 'A']
Алгоритм заполнения пропусков 1.Пропущенный шаг = 1 2.if шаг > 0: пропущенное начало = - пропущенный конец = 3.if шаг < 0: пропущенное начало = пропущенный конец = - 7 L[н : к : ш]
Задачи Используя цикл for и списки, решить следующие задачи: 1.Объявить функцию, которая вычисляет факториал числа. 2.Задан числовой список. Просуммировать его элементы. Встроенную функцию sum() не использовать. 3.Вычислить значение биномиального коэффициента - C(n, m) = (n * (n – 1) * (n – 2)*…* (n – m + 1)) / m! 4.Объявить функцию, которая получает список и делит его на два списка, составленных из элементов, стоящих на четных и нечетных позициях исходного списка. 8
ЛЕКЦИЯ 8 Строки 9
Строки – это последовательности, поэтому к ним применимы все функции для последовательностей: len(), del(), min(), max(), +, *, in, … В отличие от списков, строки – неизменяемые последовательности. Примеры строк: s = 'abcd' s = "abcd" 10
Печатные и непечатные символы Непечатные символы задаются при помощи знака \ и восьмеричного или 16-ичного числа: '\07', '\xA5', '\uFF07' Тройные кавычки позволяют переводить строку и игнорировать действие обратного слеша. Две строковых константы, стоящие рядом, объединяются интерпретатором в одну. 'кот''омка' == 'котомка' 11
Методы строк split, join, пример: '/'.join(['a','b','c']) ->'a/b/c' upper, lower, isupper, count, startswith, find, replace, splitlines, strip, str(x) – любое значение можно преобразовать в строку 12
Ввод с клавиатуры Ввод с клавиатуры выполняется функцией input(). s = input() Функция input() возвращает строку – последовательность символов, введенную пользователем до нажатия клавиши Enter. 13 s = input() # x = int(s) #
Исключения Исключения возникают в библиотечных функциях, если что- то пошло не так. Объекты исключений перехватываются исполняющей системой, которая при этом немедленно завершает программу и что-то выводит на экран. Код программы должен перехватить исключение, чтобы самому поправить дело и не допустить аварийного завершения своей программы. 14 try: проблемный код except тип исключения: код обработки исключения
Пример обработки исключения 15 try: i = int(input()) print(i) except: print("Введено не число.") Задача. Написать код, который предлагает ввести с клавиатуры число и печатает это число. Если пользователь вводит не число, предложение повторяется, пока не будет введено число.
Задачи 1.Объявить функцию, которая получает одноразрядное число и возвращает его прописью. 2.Сделать то же для двухразрядного числа. 3.Запрограммировать методы s.find() и s.count() в виде функций. Использовать для этого только операции и общие функции для последовательностей. 4.Задан текст, в котором слова разделены одним или более пробелами. Найти самое длинное слово. 16
ЛЕКЦИЯ 9 Системы счисления 17
Системы счисления 18 Уже давно люди изображают числа в позиционной системе счисления. Переход от числа к его записи в п.с.с. и обратно основан на формуле: N = (abcd) p = d * p 0 + c * p 1 + b * p 2 + a * p 3 (2013) 10 = 3 * * * * 10 3 (1011) 2 = 1 * * * * 2 3 = Число – это некоторое количество. Для обозначения количества есть разные способы – пальцы, палочки, римские цифры, арабские и т.д.
Переход от числа к его записи 19 n = 2013; p = 10 n % p = 3 n = n // p = 201 n % p = 1 n = n // p = 20 n % p = 0 n = n // p = 2 n % p = 2 n = n // p = 0 n % p = 0 n = n // p = 0... n = 11; p = 2 n % p = 1 n = n // p = 5 n % p = 1 n = n // p = 2 n % p = 0 n = n // p = 1 n % p = 1 n = n // p = 0 n % p = 0 n = n // p = 0...
Переход от числа к его записи 20 def i2s(n, p): s = '' while n: d = n % p s = str(d) + s n = n // p return s n – заданное число p – основание системы счисления s – будущая запись числа d – очередная цифра числа
Переход от записи к числу 21 s = '2013'; p = 10 n = 3 * * * * 1000 = = 2013 s = '1011'; p = 2 n = 1 * * * * 8 = = 11
Переход от записи к числу 22 def s2i(s, p): n = 0 for c in s: d = int(c) - int('0') n = n * p + d return n s – заданная запись числа p – основание системы счисления n – будущее число c – очередной символ в записи числа d – очередная цифра числа
B 2 A = (955B2A) = ( ) 8 8-ые и 16-ые числа в Питоне используют для обозначения символов: '\07', '\xA5', '\uFF07'
24
Задачи 1.Дано целое число. Образовать список из десятичных цифр числа, начиная с младшей. Сделать то же для р-ичных цифр. 2.Получить цифры числа в 16-й системе счисления. Цифры > 9 обозначать буквами: A, B, C, D, E, F. 3.В числовом списке находятся p-ичные цифры некоторого числа (1
Кортежи () – пустой кортеж (3, ) – одноэлементный кортеж (3) – никакой не кортеж (3, 16) – двухэлементный кортеж 3, 16 – то же самое x, y = y, x – присвоение кортежей. Преобразование «список кортеж» t = tuple([1,2,3]) l = list ((1,2,3)) 26
Словари Словарь – это неупорядоченное множество пар (ключ, значение). Ключи в словаре уникальны, значения – нет. 27 К элементам списка обращаются по индексу, s[i]. К элементам словаря – по ключу, d[(4, 11)], d['mars'], d[21].
Создание словарей d1 = {"id": 1948, "name": "Washer", "size": 3} d2 = dict(d1) d3 = dict(id=1948, name="Washer", size=3) d3 = dict([("id", 1948), ("name", "Washer"), ("size", 3)]) Если d1 – словарь, то d2 = d1 и d2 = dict(d1) – две большие разницы! 28
Методы словаря 29 for key, value in dict.items(): print(key, value) for key in dict: print(key, dict[key])
Задачи 1.Составьте словарь, в котором языку программирования соответствует год его появления на свет (не менее 10 языков). Напечатайте список пар (язык, год), упорядоченный по языкам. 2.Напечатайте список пар (язык, год), упорядоченный по годам. 3.Имеется список слов. Составить частотный словарь. 4.Имеется список пар (англ.слово, рус.слово). Составить англо-русский словарь, в котором одному англ.слову соответствует список русских. 30
ЛЕКЦИЯ 10 Файлы и каталоги 31
Файлы и каталоги D:\MyFyles\Photos\Teddy.jpg Абсолютный путь Текущий рабочий каталог Относительный путь Aбсолютный = Tекущий + Oтносительный 32 >>> os.getcwd() 'C:\\Python33' >>> os.chdir('D:\\111') >>> os.getcwd() 'D:\\111'
Работа с файлом 33 Схема работы с файлами такая же, как для работы с любым ограниченным ресурсом: Открыть файл (захватить ресурс) Читать или писать (попользоваться ресурсом) Закрыть файл (освободить ресурс)
Ввод и вывод в файл 34 f1 = open( 'd:/111.txt', 'r' ) s = f1.read() # один символ f1.close() f1 = open( 'd:/222.txt', 'w' ) f1.write('123') f1.close() f1.readline() f1.readlines() f1.writelines() Открыть файл можно: для чтения – 'r', для записи – 'w', для дополнения – 'a'.
Модули 35 Модуль – это файл с программой на Питоне. Имя модуля и имя файла совпадают. Например, функции sin и cos находятся в модуле math, a функция getcwd находится в модуле os. Чтобы сделать имена из модуля доступными в нашей программе, модуль нужно импортировать.
Инструкция import import math import os import math, os import math as m 36 >>> d = os.getcwd() >>> s = math.sin(0.5) >>> m.pi Модуль загружается в память только один раз – при nервой оnераuии имnорта.
Инструкция from После того, как импортирован модуль, можно импортировать все или некоторые имена из него. from math import sin, cos from math import * 37
Пути поиска модулей Поиск импортированного модуля выполняется: – в текущем каталоге – на путях из системной переменной PYTHONPATH – еще кое-где 38 Все пути поиска хранятся в переменной sys.path. >>> import sys >>> sys.path Список sys.path можно изменять программно.
Задачи 1.Есть файл "f1.txt". Дополнить его содержимым файла "f2.txt". 2.В файле находится русский текст. Распечатать самую длинную строку. 3.В файле находится английский текст. Записать в другой файл все слова этого текста (каждое слово по одному разу). 39