Главная страница

питон. ООП_на_Python_Учебное пособие_var5a. Методическое пособие по дисциплине Введение в компьютерные технологии Москва Физический факультет мгу имени м в ломоносова 2022


Скачать 0.51 Mb.
НазваниеМетодическое пособие по дисциплине Введение в компьютерные технологии Москва Физический факультет мгу имени м в ломоносова 2022
Анкорпитон
Дата07.11.2022
Размер0.51 Mb.
Формат файлаpdf
Имя файлаООП_на_Python_Учебное пособие_var5a.pdf
ТипМетодическое пособие
#774857
страница6 из 6
1   2   3   4   5   6
class
Body
:
def
__init__
(
self
,
mass
,
position
,
velocity
):
# конструктор self
.
mass
=
mass
# масса self
.
position
=
position
# радиус вектор положения в пространстве self
.
velocity
=
velocity
# вектор скорости
def
update
(
self
,
force
,
dt
):
#
"
Обновление положения и
скорости под действием силы force"
self
.
velocity
+=
force
*
dt
/
self
.
mass self
.
position
+=
self
.
velocity
*
dt
Функция gravity_force принимает на вход два небесных тела (экземпляра класса Body) и возвращает вектор силы, с которой первое тело притягивает второе.
def
gravity_force
(
A
,
B
):
r_AB
=
B
.
position
-
A
.
position
return
-
G
*
A
.
mass
*
B
.
mass
*
r_AB
/
(
r_AB
.
norm
()
**
3
)

41
Класс ThreeBodyProblem инкапслурует в себе три небесных тела, которых принимает в конструкторе. Метод do_step вычисляет силы, действующие на каждое из тел, методом
compute_forces и обновляет положения и скорости этих тел. Метод compute_trajectories
вычисляет и возвращает траектории движения всех трех тел на интервале времени
ݐ߳ൣ0, ܶ
௙௜௡௔௟
൧.
class
ThreeBodyProblem
:
def
__init__
(
self
,
body1
,
body2
,
body3
):
self
.
body1
=
body1 self
.
body2
=
body2 self
.
body3
=
body3
def
compute_forces
(
self
):
# вычисление сил попарного взаимодействия
F_12
=
gravity_force
(
self
.
body1
,
self
.
body2
)
F_13
=
gravity_force
(
self
.
body1
,
self
.
body3
)
F_23
=
gravity_force
(
self
.
body2
,
self
.
body3
)
# противоположные силы
F_21
,
F_31
,
F_32
=
-
F_12
,
-
F_13
,
-
F_23
# возвращаем кортеж результирующих сил
return
F_21
+
F_31
,
F_32
+
F_12
,
F_13
+
F_23
def
do_step
(
self
,
dt
):
# сделать шаг по времени
F_1
,
F_2
,
F_3
=
self
.
compute_forces
()
# рассчет силы self
.
body1
.
update
(
F_1
,
dt
)
self
.
body2
.
update
(
F_2
,
dt
)
self
.
body3
.
update
(
F_3
,
dt
)
def
get_positions
(
self
):
return
[
self
.
body1
.
position
,
self
.
body2
.
position
,
self
.
body3
.
position
]
def
compute_trajectories
(
self
,
dt
,
t_final
):
t
=
0
# инициализации времени trajectories
=
[
self
.
get_positions
()]
# начальные положений
while
t
<
t_final
:
self
.
do_step
(
dt
)
# шаг по времени trajectories
.
append
(
self
.
get_positions
())
# обновленные положения t
+=
dt
# приращение времени
return
trajectories

42
21.
Заданиядлясамостоятельногорешения
(1)
Класс Vector3D
Экземляр класса задается тройкой координат в трехмерном пространстве (x,y,z).
Обязательно должны быть реализованы методы:
– приведение вектора к строке с выводом кооржинат (метод __str __),
– сложение векторов оператором `+` (метод __add__),
– вычитание векторов оператором `-` (метод __sub__),
– скалярное произведение оператором `*` (метод __mul__),
– умножение и деление на скаляр операторами `*` и `/` (метод __mul__ и __truediv__),
– векторное произведение оператором `@` (метод __matmul__),
– вычисление длинны вектора методом `norm`.
Пример v1 = Vector3D(4, 1, 2) print(v1) v2 = Vector3D() v2.read() v3 = Vector3D(1, 2, 3) v4 = v1 + v2 print(v4) a = v4 * v3 print(a) v4 = v1 * 10 print(v4) v4 = v1 @ v3 print(v4)
(2)
Класс «Прямоугольный треугольник»
Класс содержит два действительных числа – стороны треугольника. и включает следующие методы:

увеличение/уменьшение размера стороны на заданное количество процентов;

вычисление радиуса описанной окружности,

вычисление периметра,

определение значений углов.
(3)
Класс «Одномерный масив» TArray
Класс содержит поле для задания количества элементов и поле для хранения элементов массива.
Методы:
– конструктор без параметров, конструктор с параметрами ,конструктор копирования,
– ввод и вывод даных,
– поиск максимального и минимального элементов,
– сортировка массива,
– поиск суммы элементов
– перегрузка оператора + (добавление элемента)
– перегрузка оператора * умножение элементов массива на число
(4)
Класс «Автобус».
Класс содержит свойства:
– speed (скорость),
–capacity (максимальное количество пассажиров),
– maxSpeed (максимальная скорость),
– passengers (список имен пассажиров),
– hasEmptySeats (наличие свободных мест),

43
– seats (словарь мест в автобусе); методы:
– посадка и высадка одного или нескольких пассажиров,
– увеличение и уменьшение скорости на заданное значение.
– операции "in", "+=" и "−=" (посадка и высадка пассажира(ов) с заданной фамилией)
(5)
Класс «Снежинки» Snow
Класс содержит целое число - количество снежинок.
Класс включает методы перегрузки арифметических операторов сложения, вычитания, умножения и деления. Код этих методов должен выполнять увеличение или уменьшение количества снежинок на число n или в n раз.
Класс также включает метод makeSnow(), который принимает сам объект и число снежинок в ряду, а возвращает строку вида
"*****\n*****\n*****…",
где количество снежинок между '\n' равно переданному аргументу, а количество рядов вычисляется, исходя из общего количества снежинок.
(6)
Класс «Снежинка» (SnowFlake)
При инициализации класс принимает целое нечетное число – сторону квадрата, в который вписана снежинка.
Методы:
– thaw() – таять, при этом на каждом шаге пропадают крайние звездочки со всех сторон; параметр показывает, сколько шагов прошло.
– freeze(n) – намораживаться, при этом сторона квадрата, в который вписана снежинка, увеличивается на 2 * n, одновременно добавляются звездочки в нужных местах, чтобы правило соблюдалось.
– thicken() – утолщаться, ко всем линиям звездочек с двух сторон добавляются параллельные (если перед этим снежинка таяла, то теперь звездочки восстанавливаются).
– show() – показывать (рисуется снежинка в виде квадратной матрицы со звездочками и дефисами в пустых местах).
(7)
Класс «Robot»
Класс инициализируется начальными координатами – положением Робота на плоскости, обе координаты заключены в пределах от 0 до 100.
Робот может передвигаться на одну клетку вверх (N), вниз (S), вправо (E), влево (W).
Выйти за границы плоскости Робот не может.
Метод move() принимает строку – последовательность команд перемещения робота, каждая буква строки соответствует перемещению на единичный интервал в направлении, указанном буквой. Метод возвращает список координат – конечное положение Робота после перемещения.
Метод path() вызывается без аргументов и возвращает список координат точек, по которым перемещался Робот при последнем вызове метода move. Если метод не вызывался, возвращает список с начальным положением Робота.
(8)
Класс «Темы» (Themes)
Экземпляру класса при инициализации передается аргумент – список тем для разговора.
Класс реализует методы:
– add_theme(value) – добавить тему в конец;
– shift_one() – сдвинуть темы на одну вправо (последняя становится первой, остальные сдвигаются);
– reverse_order() – поменять порядок тем на обратный;

44
– get_themes() – возвращает список тем;
– get_first() – возвращает первую тему.
Пример 1
Ввод: tl = Themes(['weather', 'rain']) tl.add_theme('warm') print(tl.get_themes()) tl.shift_one() print(tl.get_first())
Вывод:
('weather', 'rain', 'warm')
warm
Пример 2
Ввод: tl = Themes(['sun', 'feeding']) tl.add_theme('cool') tl.shift_one() print(tl.get_first()) tl.reverse_order() print(tl.get_themes())
Вывод:
cool
('feeding', 'sun', 'cool')
(9)
Класс «ПчёлоСлон» (BeeElephant)
Экземпляр класса инициализируется двумя целыми числами: первое относится к пчеле, второе – к слону.
Класс реализует следующие методы:
– fly() – может летать – возвращает True, если часть пчелы не меньше части слона, иначе
False;
– trumpet() – трубить – если часть слона не меньше части пчелы, возвращает строку:
“tu-tu-doo-doo!”, иначе “wzzzzz”.
– eat(meal, value) – есть – может есть только нектар (nectar) или траву (grass). Если съедает нектар, то из части слона вычитается количество съеденного, пчеле добавляется, иначе наоборот: у пчелы вычитается, а слону добавляется. Не может увеличиться выше 100 и уменьшиться меньше 0;
– get_parts() – возвращает список из значений: [часть пчелы, часть слона].
Пример 1
Ввод:
be = BeeElephant(3, 2)
print(be.fly())
print(be.trumpet())
be.eat('grass', 4)
print(be.get_parts())
Вывод:
True
wzzzzz
(0, 6)
Пример 2
Ввод:
be = BeeElephant(13, 87)
print(be.fly())
print(be.trumpet())
be.eat('nectar', 90)
print(be.trumpet())
print(be.get_parts())
Вывод:

45
False
tu-tu-doo-doo!
wzzzzz
(100, 0)
(10)
Класс «Разговор» (Talking)
Экземпляр класса инициализируется с аргументом name – именем котенка. Класс реализует методы:
– to_answer() – ответить: котенок через один раз отвечает да или нет, начинает с да. Метод возвращает “moore-moore”, если да, “meow-meow”, если нет. Одновременно увеличивается количество соответствующих ответов;
– number_yes() – количество ответов да;
– number_no() – количество ответов нет.
Пример 1
Ввод: tk = Talking('Pussy') print(tk.to_answer()) print(tk.to_answer()) print(tk.to_answer()) print(f'{tk.name} says "yes" {tk.number_yes()} times, "no" {tk.number_no()} times')
Вывод:
moore-moore
meow-meow
moore-moore
Pussy says "yes" 2 times, "no" 1 times
Пример 2
Ввод: tk = Talking('Pussy') tk1 = Talking('Barsik') print(tk.to_answer()) print(tk1.to_answer()) print(tk1.to_answer()) print(tk1.to_answer()) print(f'{tk.name} says "yes" {tk.number_yes()} times, "no" {tk.number_no()} times') print(f'{tk1.name} says "yes" {tk1.number_yes()} times, "no"
{tk1.number_no()} times')
Вывод:
moore-moore
moore-moore
meow-meow
moore-moore
Pussy says "yes" 1 times, "no" 0 times
Barsik says "yes" 2 times, "no" 1 times
(11)
Класс «Воздушный Замок» (AirCastle)
Экземпляр класса инициализируется с аргументами:
– высота;
– количество составляющих облаков;
– цвет.
Класс должен реализовывать методы:
– change_height(value) – изменить высоту на value, может уменьшаться только до нуля;
– сложить с числом, добавляется n облаков к замку, одновременно увеличивается высоту на n // 5;
– экземпляр класса можно вызвать с аргументом – целым числом, означающим

46 прозрачность облаков; метод возвращает значение видимости замка, рассчитанное по формуле: высота // прозрачность * количество облаков;
__str__ – возвращает строковое представление в виде:
“The AirCastle at an altitude of <высота> meters is <цвет> with <количествооблаков> clouds”.
– экземпляры можно сравнивать: сначала по количеству облаков, затем по высоте, затем по цвету по алфавиту; для этого нужно реализовать методы сравнения: >, <, >=, <=, ==, !=.
(12)
Класс Добрый Ифрит (GoodIfrit)
Экземпляр класса инициализируется с аргументами: высота, имя, доброта.
Класс должен реализовывать функциональность
– change_goodness(value) – менять доброту на указанную величину; не может стать отрицательной, в этом случае становится равной 0;
– к экземпляру класса можно прибавить число: (gi1 = gi + number), создается новый экземпляр с высотой, большей на величину number, остальные характеристики те же;
– экземпляр класса можно вызвать с аргументом, возвращается значение: аргумент * доброта // высота
__str__() – возвращает строку вида:
“Good Ifrit <имя>, height <высота>, goodness <доброта>”
– экземпляры можно сравнивать между собой: сначала по доброте, затем по высоте, затем по имени по алфавиту; для этого нужно реализовать методы сравнения:
<, >, <=, >=, ==, !=.
Ввод: gi = GoodIfrit(80, "Hazrul", 3) gi.change_goodness(4) print(gi) gi1 = gi + 15 print(gi1) print(gi(31))
Вывод:
Good Ifrit Hazrul, height 80, goodness 7
Good Ifrit Hazrul, height 95, goodness 7
2
Ввод: gi = GoodIfrit(80, "Hazrul", 3) gi1 = GoodIfrit(80, "Dalziel", 1) print(gi < gi1) gi1.change_goodness(2) print(gi > gi1) print(gi, gi1, sep='\n')
Вывод:
False
True
Good Ifrit Hazrul, height 80, goodness 3
Good Ifrit Dalziel, height 80, goodness 3
(13)
Класс «Волшебник» (Wizard)
Экземпляр класса при инициализации принимает аргументы:
– имя;
– рейтинг;
– на какой возраст выглядит.
Класс должен обеспечивать функциональность:
– change_rating(value) – изменять рейтинг на значение value; не может стать больше 100 и меньше 1, изменяется только до достижения экстремального значения; при увеличении

47 рейтинга уменьшается возраст на abs(value) // 10, но только до 18, дальше не уменьшается; при уменьшении рейтинга возраст соответственно увеличивается;
– к экземпляру класса можно прибавить строку: (wd += string), значение рейтинга увеличивается на ее длину, а возраст, соответственно, уменьшается на длину // 10, условия изменения такие же;
– экземпляр класса можно вызвать с аргументом-числом; возвращает значение: (аргумент
- возраст) * рейтинг;
__str__() – возвращает строку:
“Wizard with rating looks years old”
– экземпляры класса можно сравнивать: сначала по рейтингу, затем по возрасту, затем по имени по алфавиту; для этого нужно реализовать методы сравнения: <, >, <=, >=, ==, !=.
(14)
Класс «Сотрудник компании» Worker
Экземпляр класса при инициализации принимает аргументы: имя, должность и стаж работы сотрудника, метод print_info() выводит информацию о сотруднике в формате:
«Имя: Василий
Должность: Системныйадминистратор
Стаж: 3 года»
При выводе стажа нужно учитывать, что «года» должно заменяться на «лет» или «год» в зависимости от числа.
worker1 = Worker("
Алексей ", "
Программист ", 17) worker1.print_info() print() worker2 = Worker("
Анна ", "
Маркетолог ", 2) worker2.print_info() print() worker3 = Worker("
Дмитрий ", "
Аналитик ", 1) worker3.print_info() print()
(15)
Класс Post
Класс описывает публикацию от пользователя в сети:
– никнейм пользователя,
– время публикации,
– количество лайков,
– текст сообщения,
– список комментариев.
Конструктор класса получает автора, устанавливает время, зануляет количество ругательств, а для комментариев создает списочный массив.
Добавить метод, позволяющий поставить лайк сообщению.
(16)
Классы «Товар» и «Склад»
Класс «Товар»содержит следующие закрытые поля:
– название товара,
– название магазина в котором продается товар
– стоимость товара в рублях
Класс «Склад» содержит закрытый массив товаров.
Обеспечить следующие возможности:
– вывод информации о товаре по номеру с помощью индекса
– вывод информации о товаре, название которого введено с клавиатуры
– сортировку товаров по названию магазина, по наименованию и цене;
– перегруженную операцию сложения товаров, выполняющую сложение их цен.

48
(17)
Классы «Клиент»(Client) и «Банк» (Bank)
Класс «Клиент» содержит поля: код клиента, ФИО, дата открытия вклада, размер вклада, процент по вкладу.
Класс «Банк» (class Bank) содержит поле clientBase представляющем собой список клиентов и методами:
– addClient(client) — принимает обьект клиента и помещает его в base.
– showByMoney(money) — принимает количество денег и выводит информацию о всех клиентах у которых размер вклада больше
– showByCode(cod) — принимает код и выводит всю информацию клиенте с данным кодом.
– showByProc(proc) — принимает процент и выводит информацию о всех клиентах у которых процент по вкладу больше данного.
(18)
Класс «Автомобиль» и дочерний класс «Автобус»
Экземпляр класса имеет координаты своего положения и угол, описывающий направление движения. Он может быть изначально поставлен в любую точку с любым направлением (конструктор), может проехать в выбранном направлении определённое расстояние и может повернуть, то есть изменить текущее направление на любое другое
Реализуйте класс автомобиля, а также класс, который будет описывать автобус. Кроме того, что имеется у автомобиля, у автобуса должны быть поля, содержащие число пассажиров и количество полученных денег, изначально равные нулю. Также должны быть методы «войти» и «выйти», изменяющие число пассажиров. Наконец, метод move должен быть переопределён, чтобы увеличивать количество денег в соответствии с количеством пассажиров и пройденным расстоянием.
(19)
Классы «ПЕРСОНА», «АБИТУРИЕНТ», «СТУДЕНТ», «ПРЕПОДАВАТЕЛЬ»
Класс ПЕРСОНА, экземпляр класса инициализируется аргументами фамилия, дата рождения и содержит методы, позволяющие вывести информацию о персоне, а также определить ее возраст.
Дочерние классы: АБИТУРИЕНТ (фамилия, дата рождения, факультет),
СТУДЕНТ(фамилия, дата рождения, факультет, курс), ПРЕПОДАВАТЕЛЬ (фамилия, дата рождения, факультет, должность, стаж), содержат свои методы вывода информации.
Создайте список из n персон, выведите полную информацию из базы, а также организуйте поиск персон, чей возраст попадает в заданный диапазон.

49
22.
Литература

Бизли Д.,
Python, подробный справочник, 4-е издание, 2010

Марк Лутц,
Изучаем Python, Т. 1, 5-е издание, 2019

Марк Лутц,
Изучаем Python, Т. 2, 5-е издание, 2020

Марк Лутц,
Программирование на Python, 4-е издание, I том, 2011.

Марк Саммерфилд,
Программирование на Python 3. Подробное руководство, 2009

Майкл Доусон. Программируем на Python. 3-е издание, 2014.

Swaroop Chitlur,
A Byte of Python
, 2020.

Сайты:

http://python.org/
Официальный сайт

http://python.ru/

http://python.su/

http://programarcadegames.com
Доходчиво описан язык на основе аркадных игр.

http://younglinux.info/
Основы программирования на Python. Курс по информатике,
ООП, tkinter, алгоритмы, решение задач.

http://pythonworld.ru/karta-sajta
Язык программирования Python 3 для начинающих и чайников.

http://aliev.me/runestone/
Решение проблем c использованием алгоритмов и структур данных

https://www.programiz.com/python-programming очень полезный ресурс для начинающих, все очень разжевано и с примерами, но на английском языке.

https://www.youtube.com/channel/UCMcC_43zGHttf9bY-xJOTwA
хороший YouTube канал для начинающих изучать Python.

Онлайн IDE/VM

http://runnable.com/new/Python

https://koding.com/IDE

https://c9.io/

Ресурсы о популярных дополнениях
IPython - улучшенная интерактивная оболочка

Домашняя страница: http://ipython.org/

Быстрый старт -
Introducing IPython

Распечатай и положи на рабочий стол -
IPython Quick Reference

Полная официальная документация
matplotlib - построение графиков в различных форматах в стиле, навеянном MATLAB

Домашняя страница: http://matplotlib.org/

Официальная документация

Огромный каталог примеров

Глава в книге The Architecture of Open Source Applications от создателей matplotlib
numpy - библиотека для научных расчётов

Домашняя страница: http://www.numpy.org/

Пособие для начинающих

Полная официальная документация https://docs.python.org/3/py-modindex.html
- перечень модулей с описанием функций.
1   2   3   4   5   6


написать администратору сайта