курсовая. Среда разработки Писать программы на Python можно несколькими способами онлайн, построчно, блочно, в средах разработки и так далее. Коротко остановимся на основных. Онлайн Interactive Shell
Скачать 399.23 Kb.
|
Python – это высокоуровневый язык программирования с минимальным уровнем вхождения. За счет динамической типизации и автоматического управления памятью, использование Python представляется весьма простым, что определяет его популярность. Особенностью Python является наличие большого количества библиотек, в которых реализовано большинство необходимого функционала, включая графику (в том числе динамическую), работу с большими данными, символьные и численные расчеты, использование machine learning и многое другое. Причем все эти библиотеки являются бесплатными, а их установка не занимает много времени. Поскольку данное пособие имеет целью знакомство с Python как с инструментом, то в основном предлагается рассмотрение типовых подходов для решения распространенных задач, позволяющих достигнуть нужного результата с минимальными усилиями Среда разработки Писать программы на Python можно несколькими способами: онлайн, построчно, блочно, в средах разработки и так далее. Коротко остановимся на основных. Онлайн «Interactive Shell» Одним из самых простых (при наличии интернета) является построчное исполнение программ в «Interactive Shell» на официальном сайте https://www.python.org/ Рис. 1. Запуск Interactive Shell на официальном сайте После запуска в появившейся консоли можно писать построчно программы. После ввода кода и нажатия Enter происходит ее незамедлительное исполнение. 2 Блокнот Jupyter Проект Jupyter является преемником более раннего проекта IPython Notebook, который впервые был опубликован в качестве прототипа в 2010 году. Хотя в Jupyter Notebooks можно использовать разные языки программирования, мы ограничимся рассмотрением Python. Для того чтобы начать работу с Jupyter Notebooks, необходимо установить дистрибутив Anaconda. Anaconda является наиболее широко используемым дистрибутивом Python для работы с данными и поставляется с предустановленными наиболее популярными библиотеками и инструментами, включая NumPy, pandas, Matplotlib и многие другие. Это позволит приступить к работе, без хлопот управления установками библиотек или беспокойства о зависимостях и проблемах установки, связанных с ОС. Чтобы установить Anaconda, необходимо загрузить последнюю версию Anaconda для Python 3 ( https://www.anaconda.com/products/individual ) и далее следовать инструкциям. PyCharm PyCharm — интегрированная среда разработки для языка программирования Python. Предоставляет средства для анализа кода, графический отладчик, инструмент для запуска юнит-тестов и поддерживает веб-разработку на Django. PyCharm разработана компанией JetBrains на основе IntelliJ IDEA. Скачать и установить ее можно с официального сайта https://www.jetbrains.com/ru-ru/pycharm/ БАЗОВЫЕ КОНСТРУКЦИИ PYTHON Переменная — это именованная область памяти, в которую могут быть записаны различные значения. Также из этой области памяти может быть извлечено значение переменной, используя ее имя. В каждый момент времени переменная может иметь только одно значение. Особенностью языка Python является динамическая типизация. Это означает что тип (и размер) переменной могут меняться в процессе выполнения программы. Также для людей, знакомых с программированием на других языках может стать неожиданностью, что даже первоначальный тип переменных указывать не надо, поскольку он определяется автоматически при ее инициализации. Также это означает отсутствие необходимости объявлять заранее необходимые переменные, как это происходит в языке С. a=5 a = a*0.7 b=a*a b='Hi' Обратите внимание, что в процессе исполнения программы программист может изменять тип переменной, просто присвоив ей другое значение. Ввод и вывод данных Для вывода данных используется функция print(), которой в качестве параметров необходимо передать то, что будет напечатано пользователю. В качестве параметров можно указывать имена переменных, выражения (которые будут вычислены), так и строки. a=5 print(a) print(a*2.5) 3 print("Hello") Ввод данных в Python возможен с помощью функции input(), которая возвращает введенное пользователем выражение. Особенностью этой функции является то, что возвращает она всегда строку. a = input() print("Hello", a) Преобразование строки в числа Поскольку особенностью ввода данных является то, что возвращаемое значение всегда является строкой, то даже в первых программах необходимо сразу преобразовывать строки в числа. В случае если пользователь должен ввести целочисленное значение, можно использовать функцию int (): a = int(input()) print(a*2) Если же пользователь должен ввести число с плавающей точкой, то можно явно указать тип, в который будет преобразована строка: a = float(input()) print(a*2) Операции со строками Python является крайне интуитивным инструментом программирования, поэтому в стандартные библиотеки уже входят операции по работе со строками и их можно не только складывать a = "Hello " b = input() print(a+b) но и например умножать на число, что будет означать «размножение» v = input() print(v*3) 4 ЗАДАЧИ Блок 1. Задачи на синтаксис и конструкции языка Python a. Сложить два числа введенных с клавиатуры. b. Возвести в квадрат комплексное число c. Вычислить квадратный корень числа, введенного с клавиатуры d. Вычислить арксинус числа «pi / 4» e. Сложить все целые числа от одного до 2 25 f. Вычислить факториал числа, введенного с клавиатуры g. Сделать список из 3872 нулей h. Найти элементы списка, отсутствующие в другом i. Удвоить все нечетные числа в списке j. Вывести названия всех клеточек поля для игры в морской бой k. Вычислить, сколько четных числа от 1 до миллиона начинаются на 793, но при этом не кратны 7 l. Считать строку с клавиатуры и напечатать в обратном порядке m. Подсчитать количество букв 'ы' в файле n. Найти самое длинное слово в файле o. Найти наибольший общий делитель двух чисел p. Сделать букву заглавной (найти, как) 5 Блок 2. Базовые практические задачи для решения 1. Решить квадратное уравнение • Целочисленные коэффициенты задаются пользователем с клавиатуры. • Решением занимается отдельная функция. • Разветвление решения на случай линейного и квадратного уравнения. • Обобщить решение задачи для комплексных корней. • Что возвращает ваша функция? Унифицируйте возвращаемый тип для случаев комплексного решения. 2. Печать всех простых чисел, не превышающих N • N задается пользователем с клавиатуры. • Точная реализация математического определения: "имеет 2 делителя" • должна быть реализована внутри функции `is_prime`. • Сократить программу до одной строки. • Список простых чисел должен быть получен через списковое включение с фильтрацией. • Не допускается использование циклов в явном виде. 3. Вычисление числа pi с заданной точностью (кол-во знаков после запятой) • Не допускается использование циклов в явном виде. 4. Программа для решения уравнения вида f(x) = 0 методом Ньютона • Функция f(x) вводится с клавиатуры. • Производная функции f(x) вычисляется аналитически. • Начальное приближение и требуемая точность вычисления задаются с клавиатуры. • Промежуточные точки и касательные отобразить графически. 5. Вычисление интеграла функции f(x) аналитически (sympy) и численно (numpy/scipy) • Функция f(x) вводится с клавиатуры. • Пределы интегрирования вводятся с клавиатуры. 6. Вычисление статистик массива. • Вычислить минимум и максимум. • Вычислить среднее значение. • Вычислить среднеквадратическое отклонение. • Вычислить пятый центральный момент. • Докажите, что он действительно центральный. • Вычислить среднее из пяти вышеуказанных чисел. 7. Сортировка. • Отсортировать массив действительных чисел по возрастанию. • Отсортировать массив комплексных чисел по модулю. • Отсортировать массив комплексных чисел по убыванию действительной части. • Отсортировать список строк по длине. • Отсортировать кортеж строк в лексикографическом порядке. • Отсортировать кортеж списков по возрастанию длины. 8. Работа с текстом. • Считать предложение из файла. • Вычислить количество слов в предложении. • Развернуть порядок букв в третьем слове предложения. • В получившемся предложении развернуть порядок слов. • В получившейся строке сделать первую букву заглавной. • Сохранить результат в файл. • Построить гистограмму частотности букв без учета регистра. 9. Приведение текста в соответствие правилам. • Считать строку произвольной длины. • Преобразовать строку следующим образом: o Удалить пробелы, стоящие перед точкой или запятой. o После точек, запятых, двоеточий и т.д. поставить пробел. o Несколько пробелов, следующих подряд, заменить на одиночный. o Первую букву каждого предложения сделать заглавной. • Что нужно сделать, чтобы программа обрабатывала строку на любом языке? 10. Матрицы. • Сгенерировать две случайные матрицы заданного размера. 6 • Вычислить сумму, произведение, определитель и обратные матрицы. • Реализовать сохранение матриц в файл. • Добавить вариант со считыванием матриц из файла. • Что нужно сделать, чтобы добавить поддержку матриц комплексных чисел? • Измерить время обращения матриц 10x10, 100x100, 1000x1000. 11. Телефонная книга. • Определить тип Person. • Поля данных: имя, фамилия, номер телефона, дата рождения. • Предоставить возможность сортировать список Person по любому из полей. • Реализовать считывание телефонной книги из файла в текстовом формате. • Реализовать сохранение телефонной книги в файл в совместимом формате. • Реализовать сохранение и считывание через сериализацию (pickle). 12. Определить НОД и НОК • Считать N натуральных чисел. • Вычислить и вывести наибольший общий делитель введенных чисел. • Вычислить и вывести наименьшее общее кратное введенных чисел. 13. Перевод чисел между системами счисления. • Считать число, старое основание и новое основание. • Вывести число в системе счисления с новым основанием. 14. Найти наибольшую общую подпоследовательность двух списков. 15. Найти вероятность того, что на цифровых часах с секундами будут одновременно отображаться и "16", и "37" (местоположение цифр не важно). 16. Вычислить число pi методом Монте-Карло. • Разыграть много случайных x и y в квадрате [-1, 1] x [-1, 1]. • Подсчитать долю попавших в круг с радиусом 1. • По этой доле оценить значение pi. 17. Повторение иностранных слов. • Завести словарь из слов и их переводов. • Запрашивать у пользователя переводы случайных слов. • Слова, переводы которых введены правильно, больше не спрашивать. • Реализовать сохранение состояния между запусками. 18. Подбор бинарного оператора. • Считать целые числа `A`, `B` и `C`. • Вывести всех возможные бинарные операторы Python 3, для которых истинно `A operator B == C` (найти библиотеку м перечислением всех возможных бинарных операторов). 19. Обрезание полей у изображения. • Раздобыть или нарисовать однобитное изображение. • Превратить его в булев массив `numpy`. • Обрезать с краев поля из строк и столбцов исключительно ложных пикселей, но N пикселей оставить. 20. Поиск наибольшего прямоугольного отверстия • Раздобыть или нарисовать однобитное изображение. • Превратить его в булев массив `numpy`. • Найти и отобразить наибольшую по площади прямоугольную ложную область. 21. Построить график функции в декартовых полярных координатах • Функция вводится с пользователем • Возможность писать тригонометрические функции • Нарисовать график в декартовых координатах • Нарисовать график в полярных координатах 22. Моделирование взаимодействия "хищник-жертва" в модели Лотки-Вольтерры • Задать стартовые значения популяций жертв и хищников • Задать коэффициенты связи alpha, beta, gamma, delta. Объяснить смысл этих коэффициентов. • Значения популяций от времени отобразить в виде графика 23. Реализовать клеточный автомат "игра Жизнь" 24. Конвертер валют, который сам узнает курс. • Запросить у пользователя пару валют и сумму. • Перевести сумму из одной валюты в другую. • Курс перевода запросить из сети Интернет автоматически. 7 Блок 3. Обработка данных 1. Фурье-фильтрация сигнала • Смоделировать сигнал из трёх некратных частот, добавить случайный шум. • Вычислить спектр сигнала, нарисовать график, оси в реальных единицах (Гц). • Избавиться от шума в исходном сигнале путём вырезания "лишних" частот в фурье-спектре. • Построить график исходного, зашумлённого и фильтрованного сигнала с «легендой». 2. Аппроксимация методом наименьших квадратов. • Взять модельный сигнал (a*sin(b*x), x=0..2*pi), добавить случайный шум, методом наименьших квадратов найти параметры a, b. • Построить на графике исходный сигнал (линия), зашумлённые данные (точки), результат аппроксимации (линия), вывести легенду, найденные значения. • Добавить случайные выбросы амплитудой порядка a*3, применить взвешенный МНК. • Сравнить действие различных весовых функций, построить график. 3. Лабораторная работа 4.4. • По набору сохранённых циклов перемагничивания построить основную кривую намагничивания. • Сгладить кривую, получить зависимость дифференциальной магнитной проницаемости. • По петле гистерезиса предельного цикла вычислить потери на перемагничивание (площадь под кривой) для всех измеренных образцов. 4. Лабораторная работа 6.3. • По измеренным осциллограммам определить коэффициент трения для каждой из трубок используя МНК. • Времена пролёта через катушки определить по минимуму (максимуму) производной исходного сигнала, для подавления шумов использовать фурье-фильтр. • Времена пролёта определить путём вейвлет-анализа, обосновать выбор базисной функции, сравнить погрешности с предыдущим пунктом. • Сравнить вейвлет-спектрограммы для сигналов разной зашумлённости, пояснить смысл величин, отложенных по осям. 5. Приближения функций. • Функция F(x) задается аналитически, с клавиатуры. • Приблизить функцию F(x) полиномом N-ой степени. • Пользователю вывести коэффициенты, сравнительный график. • Функция G(x, p) задается аналитически, с клавиатуры. • Приблизить функцию F(x) функцией G(x, p) за счет варьирования p. • Пользователю вывести оптимальное значение p, сравнительный график. 6. Численно промоделировать полет тела. • Рассчитайте траекторию тела, летящего в поле тяжести по параболе. • Отобразите траекторию на графике. • Решите эту же задачу аналитически (sympy), сравните результат. • Повторите тот же анализ, добавив модель трения о воздух. • Оптимизируйте угол вылета тела (при заданном модуле начальной скорости) так, чтобы пересечение уровня начальной высоты произошло как можно дальше от начальной точки. 8 Блок 4. Интересные задачи 1. Численно промоделировать движение тысячи частиц. • Начальные положения: x равномерно распределен от -1 до 0; y — от -1 до 1. • Начальные скорости равномерно распределены по углу, постоянны по модулю. • Частицы отражаются от "стенок коробки" за исключением "отверстия" (1, -0.1) — (1, 0.1). • Нарисовать положения всех частиц через время t. • Анимировать движение частиц. 2. Напоминания по почте. • Считать файл со строками вида '2018-12-01 19:00:00 Свидание с Машей'. • За час до наступления указанного времени ('2018-12-01 19:00:00') отправлять электронное письмо с указанным текстом ('Свидание с Машей') на электронную почту • Программа должна поддерживать несколько таких строк в любом порядке. • Программа должна выводить предупреждения для напоминаний "в прошлом". 3. Массовое скачивание видео с YouTube. • Имя пользователя/канала вводится с клавиатуры (пример: 'kvn'). • Вывести, пронумеровав, все видео с этого канала. • Считать строку с номерами видео через запятую, с поддержкой интервалов (пример: "1,3,6-9"). • Скачать эти видео. 4. Автоматизированный тестировщик других программ. • Напишите программу, которая запускает программу, вычисляющую число pi с заданной точностью, передает ей искомую точность, считывает ответ и сравнивает его с заранее известным. • Напишите программу, которая тестирует другую произвольную программу: ▪ запускает произвольную программу, ▪ подает на вход указанные данные, ▪ считывает результат и сравнивает с эталонным. • Формат конфигурационного файла, в котором будет прописано, что запускать, что подавать на ввод и что ожидать в результате, придумать самостоятельно и обосновать. • Продемонстировать работу для как минимум двух программ на разных языках программирования: компилируемом и интерпретируемом. • Провести поиск данных, приводящих к аварийному завершению программы. 5. RPC. • Реализовать механизм выполнения функций на другом компьютере. • Идеальный интерфейс: another_pc.numpy.sum(a, b), где: ▪ another_pc - Ваш модуль или объект, ▪ numpy - модуль на удаленном компьютере, ▪ sum - функция на удаленном компьютере, ▪ a и b - объекты с Вашего компьютера, которые пропутешествуют на удаленный компьютер и сложатся там, а результат выполнения вернется обратно. Критерии оценок: • «Удовлетворительно» 15 из Блока №2 + задача №1 из Блока №3 • «Хорошо» Критерии на «3» + 1 задача из Блока №3 + 1 задача из Блока №4 • «Отлично» Критерии на «4» + проект *) Проект выбирается и согласуется с преподавателем **) Задачи (а также требования и вопросы) могут быть изменены преподавателем ***) Задачи (а также требования и вопросы) могут быть дополнены преподавателем |