Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Язык программирования высокого уровня Python. Функции, структуры данных, дополнительные модули. Учебное пособие
.pdf
1. Логические компоненты программ
Ф
Ф
Обозначим условно понятие «Класс»
Пример класса:
Класс Столы:
Атрибуты: Цвет (белый, черный, красный)
Форма (круглый, квадратный, прямоугольный, овальный)
Размер (журнальный, обеденный)
Методы: Посчитать стоимость стола с заданными атрибутами
Изменить атрибут Цвет
…
Таким образом, любой предмет живой и неживой природы можно
представить в виде объекта – набора атрибутов (характеристик объекта) и
методов (действий, которые можно совершать с объектом).
Модули (библиотеки)
Модулем в языке Python называется лю-
бой файл с программой. Обычно модули включают в себя функции, операторы и классы, относящиеся к одной тематике. Поэтому название
модулям принято давать осмысленное, связанное с их внутренним наполнением. Например,
модуль с классами «Столы», «Стулья» и
«Шкафы» логично назвать «Мебель».
Модули могут включать в себя наборы
операторов, отдельные функции, классы.
Операторы языка Python были подробно описаны в [1], поэтому в
данном учебном пособии рассмотрены не будут. В то время как разработка и использование функций, классов и модулей – основная цель этого
учебного пособия.
К
О
Ф
О
Ф
К
Класс
…
…
…
Модуль
…
…
…
О
О
К
11

1. Логические компоненты программ
Современная наука о защите информации начинается с трех основ-
ных понятий.
Криптология – наука, включающая в себя криптографию и крипто-
анализ.
Криптография – область математики, изучающая способы сокрытия
сути информации с целью разработки стойких ко взлому алгоритмов.
Криптоанализ – область математики, изучающая способы вскрытия
криптографических алгоритмов с целью анализа их стойкости ко взломам
и дальнейшего усовершенствования.
12

2. СОЗДАНИЕ ФУНКЦИЙ В ПИТОН
2.1. Оформление функций
Функция – это фрагмент кода, оформленный по определенным в
каждом языке программирования правилам, и решающий одну задачу,
который можно вызывать из любого места программы. Функции в общем
виде состоят из набора операторов и позволяют уменьшить избыточность
программного кода и повысить его структурированность.
В гл.1 при решении задачи были использованы встроенные функции
ввода/вывода языка Питон. Однако в любом языке программирования
высокого уровня существует возможность создания пользовательской
функции.
Принципы написания функций во всех языках программирования
высокого уровня идентичны:
1. записать ключевое слово, обозначающее начало функции;
2. придумать и записать имя функции, которое должно отражать ее
смысл;
3. задать входные значения (аргументы функции)
4. описать логику работы на языке программирования (обычно
внутри одного цикла);
5. пометить значения, которые функция должна вернуть, как резуль-
тат.
В языке Питон функция представляет собой объект в оперативной
памяти, который умеет принимать аргументы и возвращать значения, полученные в результате работы функции, в основную программу [2, 3].
Оформление функции в Питоне
Правила оформления части кода в Питоне как функции можно описать с помощью следующей схемы [23]:
def имя_функции([Аргумент1],…, [АргументN] ):
Тело функции
[return Значение]
Return – ключевое слово, которое одновременно выполняет две
функции:
13

2. Создание функций в Питон
- является признаком конца функции;
- после return указываются значения, которые необходимо вернуть
из функции в основную программу.
В качестве результата функция может возвращать любые объекты
(списки, кортежи, и даже функции).
Если инструкция отсутствует, то функция возвращает пустое значе-
ние (None).
Так, задача, рассмотренная в гл.1: «напишите программу, которая в
последовательности, состоящей из n натуральных чисел, определяет максимальное число, кратное 5» может быть оформлена в виде функции на
языке Питон, например, так:
n = int(input())
def my_max(n):
max = 0
for i in range(n) :
a = int(input())
if (a > max) and (a % 5 ==0) :
max = a
return max #возвращаемое значение
res = my_max(n) # вызов функции из основной про-
граммы
print(res) # вывод результата работы функции
Если тело функции должно оставаться пустым и не содержать операторов, то внутри необходимо разместить оператор pass (используется
при создании классов):
def my_func():
pass
14

2.2. Аргументы функций
Правильно:
Неправильно:
my_max()
my_max
2.2. Аргументы функций
Аргументами функции называют все данные, которые поступают на
ее вход и являются начальными значениями для ее операторов. Аргументы функции оформляются внутри круглых скобок после имени функции
через запятую:
def Имя_функции([Аргумент1],…, [АргументN] ):
Количество аргументов функции может быть произвольным в разумных пределах (обычно не более пяти), или аргументы могут вовсе отсутствовать.
Если аргументы функции отсутствуют, то круглые скобки после
имени функции остаются пустыми. Оставить имя функции без круглых
скобок будет ошибкой:
Виды аргументов в языке Питон:
- аргументы по умолчанию;
- переменное число аргументов;
- произвольное число именованных аргументов.
Рассмотрим каждый из видов аргументов подробнее.
Аргументы функции по умолчанию
В Питон аргументы функции могут иметь значения, заданные программистом по умолчанию. В этом случае при вызове функции такие параметры можно вообще не задавать, тогда будут использоваться аргументы по умолчанию.
Для задания такого вида аргумента достаточно при создании функции указать его значение по умолчанию после знака «=». Рассмотрим на
примере ранее решенной задачи:
n = int(input())
def my_max(n=3): # n – аргумент по умолчанию
max = 0
15

2. Создание функций в Питон
for i in range(n) :
a = int(input()) if (a > max) and (a % 5 ==0) :
max = a
return max
res = my_max() # используется аргумент по умолчанию
n=3
print(res)
Произвольное число аргументов функции
Функция в языке Питон может принимать переменное количество
параметров. Здесь возможны следующие варианта:
1. все параметры будут сохранены в кортеж (*);
2. все параметры будут сохранены в словарь (**);
3. комбинирование параметров.
Рассмотрим некоторые примеры.
Если перед параметром внутри круглых скобок поставить символ *,
то в этом случае все параметры, которые функция примет на вход, будут
сохранены в кортеже. Соответственно, работать с параметрами можно,
как обычным кортежем.
Рассмотрим на примере задачи из гл.1. Передадим последовательность чисел в функцию, как переменное число аргументов:
n = int(input())
def my_max(n, *a): # n – аргумент по умолчанию
max = 0
for i in a :
if (i > max) and (i % 5 ==0) :
max = i
return max
res = my_max(3, 5, 10, 22)
print(res) # Выведет 10
Если перед параметром внутри круглых скобок поставить символ **,
то в этом случае все параметры, которые функция примет на вход, будут
сохранены в словаре. Все функции и методы для работы со словарями
будут доступны.
16

2.2. Аргументы функций
def my_func(**dic):
return dic
my_func(a=1, b=2, c=3)
# выведет {'a': 1, 'c': 3, 'b': 2}
my_func(a='python')
{'a': 'python'}
Возможно комбинирование аргументов, то есть использование всех
видов аргументов одновременно. В этом случае необходимо соблюдать
приоритет задания аргументов, то есть параметр с двумя ** задается последним.
def my_func(*c, a, n=3, **d):
17

3. СОЗДАНИЕ СТРУКТУРЫ ДАННЫХ В ПИТОН
№
Округ
ФИО
Любимый
предмет
Баллы
1 В Иванов И.И.
Информатика
КТсо1-1
2 Ю Петров П.И.
Информатика
КТсо1-1
3 С Гущин И.А.
Физика
КТсо1-2
Структура данных (англ. data structure) составной тип данных,
позволяющий хранить и обрабатывать множество логически связанных данных разного типа [4].
Структуры данных в программировании предназначены для программирования таблиц с множеством столбов различных типов. Пример
такой таблицы представлен в табл. 1.
Таблица 1
Описание структуры данных
В табл. 1 представлены сведения о студентах. Каждому студенту соответствует одна строка в таблице. Эта строка на языке программистов
называется записью.
Запись состоит из данных разного типа, расположенных в соответствующих столбцах таблицы.
Каждый столбец имеет определенное назначение и содержит единую
смысловую информацию. Такие столбцы на языке программистов принято называть полями. Каждое поле имеет имя, которое используется для
обращения к данному, и тип данного.
Заголовок таблицы представляет собой совокупность полей и является форматом структуры записи.
Каждая строка является одной записью [5].
Обычно в языках программирования высокого уровня существует
отдельный составной тип данных для программирования структур. В языке Питон структуры (записи) не выделены в отдельный тип данных. Однако существует возможность программировать структуры, как класс,
содержащий характеристики (атрибуты), но не содержащий действия (методы) [6, 7].
18

3. Создание структуры данных в Питон
Таким образом, в Питон структуры задаются как пустой класс. Достоинство такого подхода заключается в том, что подобная структура является динамической, то есть в любой момент в любом месте программы
можно добавить поле (соответствует столбцу таблицы) или удалить его.
То есть структуры в питон являются масштабируемыми.
# создание нового типа данных
class TPupil:
pass
Программирование одной строки таблицы не представляет практического интереса. Поэтому на практике используют множество структур,
каждая из которых соответствует одной строке таблицы. Такие наборы
структур программируют с помощью массивов структур:
# объявление массива
pupils = []
n = int(input('Введите количество учеников: '))
# создание массива из n пустых структур
for i in range(n):
pupils.append(TPupil())
Заполнение массива структур данными с одновременным созданием
полей:
# заполнение массива структур данными
for i in range(n):
print('Введите информацию о ', i+1, ' ученике: ')
pupils[i].region = input('Округ: ')
pupils[i].surname = input('Фамилия: ')
pupils[i].subject = input('Любимый предмет: ')
pupils[i].ball = int(input('Баллы: '))
После создания и заполнения массива структур становится возможным обрабатывать большие таблицы данных с сотнями и тысячами записей. Рассмотрим пример решения задачи для натл.1.: «Напишите программу, позволяющую определить:
19

3. Создание структуры данных в Питон
1. Сколько учеников из Восточного региона выбрали Информатику?
2. Средний балл по экзамену учеников Северного региона»
# создание нового типа данных
class TPupil:
pass
# объявление массива
pupils = []
n = int(input('Введите количество учеников: '))
# создание массива из n пустых структур
for i in range(n):
pupils.append(TPupil())
# заполнение массива структур данными
for i in range(n):
print('Введите информацию о ', i+1, ' ученике: ')
pupils[i].region = input('Округ: ')
pupils[i].surname = input('Фамилия: ')
pupils[i].subject = input('Любимый предмет: ')
pupils[i].ball = int(input('Баллы: '))
k1 = 0
k2 = 0
s = 0
for i in range(n):
if pupils[i].region == 'в' and pupils[i].subject
== 'информатика':
k1 +=1
if pupils[i].region == 'с':
k2 +=1
s += pupils[i].ball
# вывод поля "округ" на экран
for i in range(n):
print(pupils[i].region)
print (k1, ' ', s/k2)
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
