Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Современные средства разработки программного обеспечения. Учебное пособие
.pdf
41
Необходимо протабулировать функцию, зависящую от 2-х переменных или от
нескольких параметров согласно индивидуальному варианту. Результат табулирования вывести на консоль в форме таблицы или совокупности таблиц. Параметры таблицы вводить с экрана. Для введенной информации о таблицах организовать минимальную проверку на достоверность: таблица должна располагаться на видимой части
экрана, ширина колонок должна быть достаточной для размещения числовых данных.
Параметры: отрезок и шаг табулирования следует вводить с клавиатуры, а не задавать
в коде программы в виде констант.
3 Полученные программы по заданиям 1 и 2 оформить в виде функций.
3.1.1 Порядок выполнения лабораторной работы
1 Ознакомиться с целью, задачами, содержанием лабораторной работы, об-
щими методическими указаниями к выполнению.
2 Установить и настроить интегрированную среду Visual Studio Code или
PyСharm, следую инструкциям на официальном сайте разработчика IDE.
3 Изучить правила работы с условными и циклическими операторами, функ-
циями.
4 Подготовить исходные данные к работе.
5 В системе Visual Studio Code или PyСharm выполнить практические задания
согласно варианту, вариант выбирается по номеру списка студентов в группе.
6 Оформить отчет.
3.1.2 Индивидуальные варианты заданий к лабораторной работе
1 Варианты заданий по условному оператору.
1 Даны 3 различных действительных числа X,Y,Z. Если их сумма меньше 1, то
наименьшее из них заменить полусуммой двух других, в противном случае заменить
наименьшее из X иY полусуммой двух оставшихся.
2 Даны действительные числа X,Y. Если X,Y- отрицательны, то каждое значение заменить его модулем; если отрицательно только одно из них, то оба значения

42
увеличить на 0.5; если оба значения не отрицательны и ни одно из них не принадлежит отрезку [0.5,2], то оба значения уменьшить в 10 раз; в остальных случаях X и Y
оставить без изменения.
3 Определить в какую четверть координатной плоскости попала точка с координатами (X,Y). Переменной N присвоить номер четверти. Если точка попала в
начало координат, то N=0. Если точка попала на ось или , то напечатать сообщение
об этом.
4 Даны числа A1,B1,C1,A2,B2,C2. Напечатать координаты точек пересечения прямых: A1x+B1y=C1 и A2x+B2y=C2, либо сообщить, что эти прямые совпадают, не пересекаются или вовсе отсутствуют.
5 Даны действительные числа A,B,C,D,S,T,U(S,T одновременно не равны
нулю). Определить, лежат ли точки (A,B) и (C,D) на прямой, заданной уравнением
Sx+Ty +U=0. Если нет, то выяснить принадлежат ли они разным полуплоскостям.
6 Для целого числа К от 1 до 99 напечатать фразу «мне К лет», учитывая при
этом, что при некоторых значениях, К слово «лет» надо заменить на слово «год» или
«года».
7 Даны действительные числа x,y,z. Получить разность между максимальным и
минимальным из этих чисел.
8 Даны натуральные числа А,В, С, которые обозначают число, месяц и год. Получить тройку чисел, соответствующую следующему дню.
9 Даны тройки чисел A1,B1,C1 и A2,B2,C2 , которые обозначают две даты. Вычислить количество дней, прошедших между этими датами.
10 Даны тройки чисел A1,B1,C1 и A2,B2,C2 , которые обозначают две даты. Вычислить количество полных лет, прошедших между этими датами.
11 Даны числа A,B,C, которые обозначают дату. Определить количество дней,
прошедших с начала года.
12 Написать программу, которая вводит номер года нашей эры и печатает его
название по старояпонскому календарю. В старояпонском календаре года носили

43
названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. (1984 год – год зеленой крысы был началом очередного цикла).
13 Написать программу, которая по введенной дате рождения выводит название
знака зодиака, соответствующее введенной дате по гороскопу.
14 Даны тройки чисел A1,B1,C1 и A2,B2,C2 , которые обозначают две даты. Определить какая дата более ранняя. Если даты равны вывести об этом сообщение.
15 Даны произвольные числа a,b,c. Выяснить существует ли треугольник с такими длинами сторон. Если треугольник существует, то определить является ли он
равносторонним ил каким-либо иным.
2 Варианты заданий по циклическому оператору.
1 Вычислить значение функции.
f(x,y)=x+(y/)
при х, изменяющемся от 1,7 до 5,2 с шагом 0,35, а у, изменяющемся от 0 до 2
с шагом /6.
2 На интервале х от 3 до 6 с шагом 0,3 для каждого у на интервале от 5 до 7,2 с
шагом 0,2 вычислить значение функции
f(x,y)= 3√ x2 +3y.
3 Протабулировать значение функции
f(x,y)=x+ √3+y2
при х изменяющемся от 0 до 1 с шагом 0,1, а у от 0 до 1 с шагом 0,2.
4 На интервале 0<х<1 с шагом 0.05 для каждого у из промежутка 1<у<2 с шагом
0,1 вычислить значение функции
f (x,y)= y/ e-x + y
2
5 На интервале х от 0,011 до 0,635 с шагом 0,312 для каждого ‘в’ из интервала
от 0,012 до 0,021 с шагом 0,001 протабулировать функцию
Z=arccos a+b / x
6 Вычислить значение функции U(x,y)=(y>=2) and (abs(x)<=1) and ((x>=0)and
(y<=x) or (x<0) and (y<-x)) при х от -1,5 до 1,5 с шагом 0,5 у от 1 до 1 с шагом 0,25.

44
7 Для каждого “а” от 0,1 до 0,2 при всех “в” от -0,5 до 0,8 с шагом в=0,1 вычислить t=cos(ах+b), С=(ах2 +bx+Lna/x+e
-(a+b)
) +X
2
причем, если b- неотрицательное, то
а= 0,025, иначе а= 0,01
8 Для каждого у от 0,16 до 1,6 с шагом 0,24 при всех z от 0,1 до 0,5 вычислить
S=(yx2+z)* arcsin z, причем , если у<0,8 то z=0,1, иначе z=0,05
9 Для каждого а от 1 до 3 с шагом 0,25 при всех b от 0,5 до 0,9 вычислить
С=ах2+bx+0,16 / √a+b+x2 причем, если с>0 то b=0,1, иначе b=0,05
10 Вычислить U(х,у)=(х≥0) and (sqr(x)+ sqr(y) ≤1) or (x≥ -2) and (x≤0) and (y≤
0,5*x+1) and (y≥ -0,5x -1) при х от -2 до 1 с шагом 0,5, у от -1 до 1 с шагом 0,4
11 На интервале а1≤с1≤b1 с шагом 0,1 и для а2≤с2≤b2 с шагом 0,11 протабулировать функцию Z = (e
– (c1x / a1+b2) +e-(c2x / a2+b2)
)
c1+c2 / x
, t= cos (c1*x+c2)
a1, b1, a2, b2 – ввести с экрана.
12 На интервале у от х до 2х с шагом х/5 и для z от 3х до 4х с шагом х/6 протабулировать S=y2-z2 / y2+z2.
13 На интервале у от х до 2х с шагом х/5 и для z от 3х до 4х с шагом х/6 протабулировать Р=S*e
-s
14 На интервале у1 от 0,1 до 0,8 с шагом 0,1 для у2 от 0,2 до 0,9 с шагом 0,1
протабулировать Z= t(y1-y2)2 +xy1, где t=x/y2 –вводить.
15 На интервале у1 от 0,1 до 0,8 с шагом 0,1 для у2 от 0,2 до 0,9 с шагом 0,1
протабулировать P= t-ex – y1 / y2, где t=x/y2 –вводить.
3.5 Контрольные вопросы
1 Как работает условный оператор if в Python?
2 Из каких элементов состоит оператор цикла?
3 Как работает оператор for в Python?
4 Что представляют собой в Python аннотации функций?
5 Что такое лямбда-выражения и где их используют?
6 Что такое декоратор в Python, как и для чего применяется?

45
4 Объектно-ориентированное программирование
4.1 Понятия объектно-ориентированного подхода
Объектно-ориентированная парадигма программирования определяет стиль
написания программ, согласно которой предметная область рассматривается в виде
совокупности взаимодействующих объектов – реальных сущностей, а структура программы строится на основе совокупности взаимодействующих объектов – абстракций. Результирующее множество абстрактных объектов зависит от прагматики, а
прагматика определяется целью разработки программной системы.
В отличие от процедурного подхода в ООП основное внимание уделяется данным (объекту), а не процедуре или функциям, используемым для манипулирования
этими данными.
Объект – это абстрактное представление вещей и концепций в реальном мире,
таких как сотрудники, организации, автомобили, электроника или все, что только
можно придумать. А класс – это эскиз или схема создания объектов.
Строительными блоками ООП являются: классы, объекты, атрибуты, методы.
Классы
Класс – это схема объектов. Это как технический проект дома или автомобиля.
В таких проектах, например, указываются особенности дома. Используя описания в
проектах в качестве руководства, можно построить любое нужное количество домов
[14].
Классы и объекты работают аналогичным образом. Если требуется создать программу, например, обрабатывающую информацию об автомобилях, то нужно будет
начать с описания сущности автомобиля, можно назвать его – Car, а затем создания
класса Car.

46
Рисунок 4.1 – Сущность – Car
Определение класса в Python
В Python класс определяется с помощью ключевого слова class, за которым сле-
дует имя класса и двоеточие. Затем задают метод __init__(), чтобы объявить, какими
атрибутами должен обладать каждый экземпляр класса:
Определение класса сообщает Python о пользовательском объекте и о том, как
его создать. Оно сообщает Python, какими атрибутами обладает этот объект, используя некоторые существующие встроенные типы данных или другие определенные
объекты, и какие действия может выполнять объект.
Объекты
После создания класса можно будет создавать объекты данного класса. Хотя
класс является схемой, экземпляр – это объект, созданный на основе класса и содержащий реальные данные.
Так объект, созданный на основе класса похож, например, на настоящий дом
или настоящую машину, созданную по чертежу. Например, если у вас есть класс с
именем Car, вы можете создавать объекты car1, car2, ..., carN.
В Python это можно выполнить в виде команды:
имя_объекта = new Имя_класса([значения атрибутов]),
например car1=new Car() или car2 = new Car("Lada 2106")
Car
Car

47
Каждый из этих объектов является отдельным экземпляром класса Car. Таким
образом, у него есть свои индивидуальные данные, которые отделены от других объектов класса.
Инструкция new Имя_класса([значения атрибутов]) в команде создания объекта
также называется конструктором.
Каждый аргумент в конструкторе экземпляра объекта передается __init__() методу. В объект car1 не передано никаких аргументов, но в __init__() есть значения по
умолчанию, которые и будут установлены в качестве текущих значений атрибутов. В
car2 передан параметр "Lada 2106"), который будет установлен в качестве текущего
значения атрибута name.
Рисунок ниже иллюстрирует этот момент.
Рисунок 4.2 – Экземпляры (объекты) класса Car
Каждый раз, при создании нового объекта класса Car, __init__() устанавливает
начальное состояние объекта, присваивая значения свойств объекта. То есть
.__init__() инициализирует каждый новый экземпляр класса.
Важно помнить, что определение класса является всего лишь описанием объекта и работает как своего рода шаблон или контракт. Определение не создает сам
объект.
name=“MERCEDES-BENZ
Ocean Drive”
speed = 200
pos=(10, 100)
Car1
name=”Лада2106”
speed = 200
pos=(10, 100)
Car1

48
Создание экземпляра – это шаг, который фактически создает объект в памяти
компьютера.
Как только объект создан, можно получить доступ к его атрибутам и методам.
Атрибуты
Это данные или информация, связанная с объектом. В классе Car, описанном
выше, название, скорость и координаты являются атрибутами объектов, поскольку
они предоставляют необходимую информацию об объектах Car.
Атрибуты определяются в шаблоне класса и представляют состояние объекта.
Объекты содержат данные, хранящиеся в поле атрибута.
Можно задать в __init__() любое количество параметров, но первым параметром всегда будет вызываемая переменная self. При создании нового экземпляра
класса, Python автоматически передает экземпляр в self параметр метода __init__(),
чтобы Python мог определить атрибуты для данного объекта.
Атрибуты, созданные в.__init__(), называются атрибутами экземпляра. Значе-
ние атрибута экземпляра специфично для конкретного экземпляра класса.
С другой стороны, можно задавать атрибуты класса – это атрибуты, которые
имеют одинаковое значение для всех экземпляров класса. Атрибуты класса, можно
определить присвоив значение переменной, имя которой находится за пределами.__init__().
Динамическое изменение атрибутов класса
Python позволяет добавлять новые атрибуты в классе после описания, в объекты
после интанцирования например, так:
Car.type_car = 'седан'
Или то же самое можно сделать с помощью специальной функции setattr:
setattr(Car,'atr',2)
Прочитать какое-либо значение атрибута, воспользовавшись специальной
встроенной функцией:
getattr(Car, 'atrr', False)
Удалить атрибут с помощью функции:
delattr(Car, 'type_car)

49
Перед удалением рекомендуется проверять существование удаляемого атрибута с помощью функции hasattr:
hasattr(Car, 'type_car ')
Методы
Методы – это функции, определенные внутри класса и описывающие поведение
объекта. Методы полезны для повторного использования или сохранения функциональности, инкапсулированной внутри одного объекта единожды.
По сути методы – это процедуры и логика, которые используются для манипулирования данными или атрибутами объекта. Методы также могут использоваться
для создания новой информации об этом объекте.
В класс Car можно включить метод move для реализации функции передвижения автомобиля, например, следующего вида:
В Python можно определять экземплярные, статические и классовые методы.
Методы экземпляра – это функции, которые вы определяете внутри класса и
которые могут вызываться только для экземпляра этого класса. Точно так же, как
__init__(), метод экземпляра всегда принимает self в качестве своего первого параметра согласно PEP8 .
В класс Car метод move является экземплярным. внутри метода move Аргумент
self находится в качестве первого аргумента.
Аргумент self относится к конкретному экземпляру объекта класса. Его также
можно использовать для доступа к методам и атрибутам текущего объекта.
Статические методы в Python выполняются в контексте объекта, создаются
применением декоратора @staticmethod.

50
У них нет обязательных параметров-ссылок вроде self.
Доступ к таким методам можно получить как из экземпляра класса, так и из
самого класса:
class SomeClass(object):
@staticmethod
def hello():
print("Hello, world")
SomeClass.hello() # Hello, world
obj = SomeClass()
obj.hello() # Hello, world
Методы классов выполняются в контексте самого класса (классы – это тоже
объекты), создаются с помощью декоратора @classmethod и первым параметром в таких методах должна быть обязательно cls – ссылка на класс. Это означает, что данный
метод может обращаться только к атрибутам текущего класса, но не к локальным
свойствам его экземпляров.
Пример.
class SomeClass(object):
@classmethod
def hello(cls):
print('Hello, класс {}'.format(cls.__name__))
SomeClass.hello() # Hello, класс SomeClass
Статические и классовые методы доступны без инстанцирования.
4.2 Принципы объектно-ориентированного программирования
Для правильного моделирования объектов программистам нужно знать и уметь
реализовать четыре основополагающих принципа ООП: абстракция, инкапсуляция,
наследование и полиморфизм. Следует отметить, что кроме данных фундаментальных принципов ООП, существуют и другие уточняющие и расширяющие их, более
практические принципы, такие как SOLID.
Инкапсуляция
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
