Skip to content

Лабораторные по курсу "Язык программирования Python", группы ИС-33, ИС-34

Notifications You must be signed in to change notification settings

kit8nino/2023-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

2023-python co-made by Milly

Лабораторные по курсу "Язык программирования Python", группы ИС-33, ИС-34

Содержание:

Старт:

  • Для работы необходим python 3.9 и выше.

Библиотеки:


  • numpy
  • matplotlib
  • tkinter

Редактор любой. Из неплохих:


  • IDLE (родной, идёт вместе с установщиком)
  • Visual Studio Code, notepad++
  • PyCharm
  • vim (для любителей сначала страдать, потом наслаждаться)

Полезное

  • Работа с блокнотами онлайн, с возможностью подключение удалённых мощностей гугла (GPU, TPU): Google colab Badge
  • Презентация (будет обновляться в течение семестра): Google Docs Badge
  • Хорошая книга по python, очень простым языком и на понятных примерах: Book Badge
  • Сервер в Дискорд, где буду дублировать: Discord Badge
  • Мой контакт: E–mail Badge

Предупреждения:

  • В своей папке можете делать все что угодно, в чужие не залезать, в корневую тоже.
  • Я буду ориентироваться на файлы, где в названии будет номер лабораторной.

[1] Работа со структурами данных

Исходные данные:


  • свои ФИО, число, месяц, год рождения в виде кортежа;
  • предметы в школьном аттестате (не меньше 14), как словарь из названия и оценки (можно мокать);
  • имена (только) ближайших (до двоюродных включительно) родственников в списке;
  • имя, которое вы бы дали своей домашней пушистой киве (строка).

Действия:


  1. вывести среднюю оценку в аттестате;
  2. вывести, исключив повторения, все различные имена среди своих родственников (включая свое);
  3. общая длина всех названий предметов;
  4. уникальные буквы в названиях предметов;
  5. имя вашей домашней пушистой кивы в бинарном виде;
  6. отсортированный по алфавиту (в обратном порядке) список родственников;
  7. количество дней от вашей даты рождения до текущей даты (должна быть всегда актуальной);
  8. FIFO очередь, в которую можно добавлять предметы по вводимому с клавиатуры индексу (до команды остановки), после введения - вывести все;
  9. по введеному индексу, поменять имя в отсортированном списке родственников на имя ацтекского правителя (Wiki Badge) под номером, получаемым из вашей даты рождения: number = (day + month**2 + year) % 21 + 1;
  10. создать связный список, как словарь, где ключ - имя родственника, а значение - индекс следующего имени по исходному списку (к этому моменту, отсортированному в обратном алфавитном порядке), упорядоченному по их (родственников) годам рождения (года или создать отдельным списком, или просто держите их в уме при составлении связного -- оба варианта валидны), исходный список при этом должен остаться неизменным
  11. написать функцию-генератор (cвой вариант определяется как number = len("ФИО") * len (family_names) % 4):
    1. аликвотной последовательности;
    2. последовательности Сильвестра;
    3. числа трибоначчи;
    4. числа Леонардо.

[2] Алгоритмы сортировки

Исходные данные:


  • список целых чисел от 0 до 999999;
  • список из 99999 случайных вещественных чисел в диапазоне [-1, 1];
  • 42000 разных точки комплексной плоскости, лежащие в пределах окружности радиуса r = birth_day / birth_month (можно случайных, можно равномерно распределённых), сортировать по модулю;
  • отрывок из книги (любой, на свой выбор) не менее 10000 слов, разбитый в список по словам.

Действия:


Реализовать для каждого из исходных списков один из представленных алгоритмов сортировки (подробнее почитать о них тут). Выбор тех четырех алгоритмов, которые будут использованы конкретно у вас:

import random

random.sample(range(1, 18), 4) # вернет список из 4 случайных значений в заданном диапазоне, сделать один раз

  1. shaker sort, сортировка перемешиванием;
  2. bubble sort, сортировка пузырьком;
  3. comp sort, сортировка расческой;
  4. insertion sort, сортировка вставкой;
  5. Shellsort, сортировка Шелла;
  6. tree sort, сортировка деревом;
  7. Gnome sort, гномья сортировка;
  8. selection sort, сортировка выбором;
  9. Heapsort, пирамидальная сортировка;
  10. Quicksort, быстрая сортировка;
  11. Merge sort, сортировка слиянием;
  12. Counting sort, сортировка подсчетом;
  13. Bucket sort, блочная (карманная) сортировка;
  14. Radix sort, поразрядная сортировка;
  15. least significant digit;
  16. most significant digit;
  17. bitonic sort, битонная сортировка;
  18. timsort, гибридная сортировка.

[3] Алгоритмы поиска пути и структурное программирование

Исходные данные:


  • файл с текстовым представлением лабиринта;
  • координаты аватара;
  • координаты ключа;
  • координаты выхода (на одной из внешних границ);
  • правила (алгоритм) нахождения пути до ключа и до выхода.

Действия


  1. В папке _3 запустить скрипт gen_lab_origin.py, подождать его работу несколько минут;
  2. Полученный файл maze-for-u.txt переместить в свою папку;
  3. Найти любой маршрут от начальной координаты аватара до ключа, используя (выбрать или все, или по номеру сезона, в который вы родились, начиная с зимы):
    1. з. алгоритм Дейкстры;
    2. в. поиск в ширину;
    3. л. поиск в глубину;
    4. о. жадный алгоритм.
  4. Используя А* со следующими параметрами (вес g(x), вес h(x), максимальная длина хранимого списка возможных шагов), найти оптимальный путь до ближайшего выхода;
  5. Сохранить в файл 'maze-for-me-done.txt', в котором точка ключа будет указана как '*', а сам маршрут построен точками к ключу и запятыми от него к выходу.

[4] Объектно-ориентированное программирование

Исходные данные:


  • класс аватара;
  • класс моба, наследованный от черепахи;

Действия:


  1. Добавить в класс аватар наследование от черепахи (для его отображения)
  2. Перенести в класс моба жадный алгоритм из 3 лабораторной, где целевая точка - координаты аватара. Длина каждого шага (ширина клетки шага) равна скорости (self.speed). Алгоритм при вызове возвращает новые координаты или направление (на ваш выбор). Можно реализовать как функцией-генератором, так и полной реализацией с пересчетом при каждом вызове.
  3. Перенести в класс аватара алгоритм А* из 3 лабораторной, где целевая точка - self.target. Алгоритм при вызове возвращает новые координаты или направление (на ваш выбор). Можно реализовать как функцией-генератором, так и полной реализацией.
  4. В файле lab4 импортировать оба класса, создать по объекту каждого класса (минимум по одному, максимум не ограничен) и запустить в общем цикле их алгоритмы построения маршрута, каждый такт перемещая их на величину скорости

Вопросы к экзамену:

  1. Типы данных.
  2. Логические и физические строки.
  3. Операторы и порядок вычислений.
  4. Циклы for и while.
  5. Функции и их параметры. Области видимости переменных.
  6. Аргументы функции по умолчанию. Ключевые аргументы.
  7. Функции с переменным числом параметров. Распаковка.
  8. Модули: импортирование, частичное импортирование, псевдонимы.
  9. Виды структур данных.
  10. Списки: генераторы, итерирование, распаковка.
  11. Циклы по итерируемым последовательностям.
  12. Кортежи.
  13. Множества.
  14. LIFO и FIFO очереди.
  15. Методы работы со строками.
  16. Передача кортежей и словарей в функции.
  17. Классы и объекты.
  18. Поля класса, поля объекта.
  19. SOLID принципы ООП.
  20. Паттерны проектирования.
  21. Антипаттерны проектирования.
  22. Работа с файлами.
  23. Анонимные (lambda) функции.
  24. Функции высшего порядка.
  25. Форматированный вывод строк.

About

Лабораторные по курсу "Язык программирования Python", группы ИС-33, ИС-34

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages