Представлены некоторые материалы лекционного курса.
3. Самое важное
◾ Учебный ресурс кафедры физики твёрдого тела ФТИ ПетрГУ ◾
Представлены некоторые материалы лекционного курса.
3. Самое важное
Задания выполняются в течение семестра под руководством преподавателя. Для оценки успеваемости используется балльно-рейтинговая система: суммируется общий балл всех выполненных заданий. По каждому из нижеприведённых разделов нужно набрать не менее 10 баллов. Если в задачах раздела не указаны баллы, значит раздел нужно пройти целиком, решив все задания. Для зачёта по курсу нужно набрать не менее 50 баллов. Можно выбрать из каждого раздела только те задачи, которые интересны для вас и которые дадут необходимое количество баллов. В разделе 4 выполняются все задания, из них некоторые - по вариантам.
На занятиях можно пользоваться любыми доступными Интернет-ресурсами. Для новичков в Python имеет смысл до решения задач познакомиться с основами языка, например, на ресурсе https://pythontutor.ru/. При выполнении заданий следует вводить в программы элементы защиты от некорректно введённых исходных данных и снабжать программу комментариями. Неправильно написанная программа не приносит баллов. Программа, являющаяся точной копией уже принятой преподавателем у другого студента, также никак не оценивается. Преподаватель может добавить 1 балл к задаче, если алгоритм оказался хорош, и снять 1 балл, если программа написана кое-как.
В описание заданий постоянно вносятся изменения, поскольку курс сейчас находится в состоянии разработки.
Задача 0 (1 балл). Написать программу перевода введённого пользователем значения длины в метрах в длину в аршинах. 1 аршин равен 0.7112 метра.
Задача 1 (2 балла). Вводится год (целое положительное число). Программа должна определить, является ли введённый год високосным. В соответствии с григорианским календарем, год является високосным, если его номер кратен 4, но не кратен 100, а также если он кратен 400.
Задача 2 (2 балла). Даны декартовы координаты двух точек на плоскости: (x1, y1) и (x2, y2). Написать программу, которая найдёт коэффициенты в уравнении прямой y=ax+b, проходящей через эти точки.
Задача 3 (2 балла). Написать программу, которая знакомится с пользователем и просит его ввести о нём различные данные: фамилию, имя, пол, дату рождения (пусть посчитает возраст), хобби и т. п. Результаты опроса затем отображаются.
Задача 4 (2 балла). Улитка ползет по вертикальному шесту высотой h метров, поднимаясь за день на a метров, а за ночь спускаясь на b метров. На какой день улитка доползет до вершины шеста? Программа получает на вход натуральные числа h, a, b. Программа в качестве ответа должна вывести одно натуральное число. Следует убедиться, что a > b.
Задача 5 (2 балла). Вводится число N > 0. Программа должна найти и показать N-е число ряда Фибоначчи. Ряд Фибоначчи - числовая последовательность, в которой первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел (0, 1, 1, 2, 3, 5, 8, 13, 21, 34 и т. д.).
Задача 6 (4 балла). Написать программу экспресс-тестирования. Программа задаёт пользователю несколько вопросов (или задач), принимает ответы и анализирует количество верных ответов. Можно, например, вводить номер правильного ответа, если выводится набор возможных ответов на вопрос. Программа должна обрабатывать ситуации, связанные с некорректным ответом пользователя на поставленный вопрос (например, ввод номера ответа, которого нет в списке, либо нажатие <Enter> вместо ответа на вопрос).
Задача 7 (6 баллов). Вводится целое число. Программа отображает это число в увеличенном виде в окне терминала - например, составляет каждую цифру введённого числа из символов "*" (как на рисунке) или же из случайных символов. Пользоваться дополнительными модулями (типа art) в данном случае не разрешается.
Задача 1 (1 балл). Вводится строка осмысленного текста. Программа выводит введённую строку наоборот (от последнего символа к первому) и анализирует, является ли введённая пользователем строка палиндромом. Палиндром - текст, одинаково читающийся в обоих направлениях, типа "Коту тащат уток".
Задача 2 (2 балла). Вводится стока, состоящая из нескольких слов. Программа должна разделить строку на слова и вывести каждое слово с новой строки, отсортировав их от самого длинного к самому короткому.
Задача 3 (3 балла). Вводится число N. Программа должна сгенерировать список из N случайных вещественных чисел в диапазоне от 0 до 10 (это нужно оформить в виде функции), а затем найти среднее и среднеквадратичное отклонение (т. е. корень квадратный из суммы квадратов отклонений от среднего) по всем элементам списка.
Задача 4 (3 балла). Вводится строка целых чисел, разделенных пробелами. Программа должна выбрать два числа из этой строки так, чтобы произведение этих чисел было минимальным. Числа могут быть как положительными, так и отрицательными.
Задача 5 (4 балла). Реализовать алгоритм "решето Эратосфена" для поиска простых чисел в диапазоне от 1 до целого положительного N. Простыми являются числа, которые делятся нацело только на себя и на единицу. Программа, после запроса числа N, должна каким-либо образом демонстрировать пользователю, как работает алгоритм, т. е. как "вычеркиваются" числа из исходного набора на каждой итерации.
Задача 1 (2 балла). Создайте текстовый файл с осмысленным текстом от 100 до 1000 символов. Напишите программу, которая открывает созданный файл и подсчитывает количество символов (не включая пробелы, знаки табуляции и перехода на новую строку), а также считает количество слов и строк во всём тексте.
Задача 2 (2 балла). Напишите программу, которая выводит на экран список всех файлов из текущего рабочего каталога, при этом файлы, имеющие расширение .py, должны быть выведены жёлтым цветом, а остальные - цветом по умолчанию. Используйте методы модуля os и escape-коды.
Задача 3 (3 балла). В Microsoft Excel или Libre Office Calc создайте таблицу, содержащую непустые ячейки с цифрами либо текстовыми строками, и сохраните эту таблицу в текстовый файл с расширением .CSV. Напишите программу на Python, которая корректно читает этот файл и переписывает данные в виде таблицы в файл формата HTML. Пользоваться методами модуля pandas не разрешается. Проверить результат можно, открыв полученный HTML-файл в любом Интернет-браузере.
Задача 4 (3 балла). Программа запрашивает имя бинарного файла. Программа должна распознать, является ли этот файл изображением в формате png, изображением в формате jpeg, или каким-либо другим файлом. Анализ следует проводить, исходя, во-первых, из расширения файла (.jpeg, .jpg, .png или другое) и, во-вторых, прочитав первые 10 байтов файла и сравнив их с характерными метками в заголовках jpeg- или png-файлов (спрашивайте об этом у преподавателя). Программа должна уметь анализировать различные ошибочные ситуации, например, когда расширение файла не соответствует его формату (хранится png-изображение, а расширение файла jpg или gif). Программа должна корректно обрабатывать ошибки ввода имени файла (например, когда файл с указанным именем не найден).
Задача 5 (3 балла). В файле содержится осмысленный текст (не менее 100 и не более 1000 символов) в кодировке UTF-8. Программа №1 должна прочитать этот файл, запросить у пользователя ключ, закодировать с помощью этого ключа прочитанный текст и сохранить закодированный текст в файле с указанным пользователем именем. Программа № 2 должна прочитать файл с закодированным текстом, запросить у пользователя ключ (ранее использованный для кодирования), раскодировать с помощью этого ключа текст и вывести его на экран. Алгоритм кодирования должен быть более сложным, чем "шифр Цезаря".
Задача 6 (3 балла). Вводится текстовая строка как аргумент командной строки программы. Программа осуществляет поиск введённой строки символов во всех файлах рабочего каталога, имеющих кодировку символов UTF-8. Если строка найдена - на экран выводится имя файла, где она нашлась, и строка текста, в которой она нашлась. Программа подсчитывает, сколько раз встретилась искомая строка.
Эти задания являются общими для нескольких учебных дисциплин. Для их выполнения сначала рекомендуется посмотреть >> наш учебник <<.
Задание 1. Постройте график функции по набору экспериментальных точек, записанных в текстовый файл якобы как результат нескольких измерений. То есть, первый столбец в файле - это координаты по оси Х. Второй, третий и последующие столбцы - это какие-то результаты первого, второго и последующих измерений. Вы можете использовать любые реальные данные - например, взятые из ваших лабораторных работ по физике. График должен идти по точкам, рассчитанным как средние значения по строкам файла, содержащим результаты нескольких измерений для одного значения X. Должен получиться график, напоминающий этот.
Задание 2. Постройте в трёхмерных координатах параметрически заданную кривую, указанную преподавателем. Пример построения кривой x = t2・sin(t); y = t2・cos(t); z = t2 приведен здесь.
Задание 3. Постройте трёхмерную поверхность для указанной преподавателем функции двух переменных с использованием возможностей модуля matplotlib либо модуля vispy для языка Python.
Задание 4. Промоделируйте двумерные случайные блуждания для 1000 шагов со смещением на каждом шаге ±1 по любой из координатных осей. Следует построить двумерный график, на котором интерактивно (т.е. на каждом шаге) будет отображаться моделируемый путь. Желательно начало и конец пути пометить маркерами, как на приведённом рисунке. Дополнительно вычислите расстояние между начальной и конечной точками пути.
В этом блоке работаем с библиотекой PyQt5. Допускается использовать библиотеку PyQt6, однако работоспособность Qt6 Designer не гарантируется на компьютерах наших классов.
Задача 1 (от 1 до 2 баллов). Создать простейшее оконное приложение: графическое окно с какой-либо надписью по центру. Программу следует написать в стиле объектно-ориентированного программирования. Наличие кнопки, инициирующее какое-либо действие в окне (кроме закрытия окна, например, изменение цвета надписи) добавляет 1 балл.
Задача 2 (от 2 до 4 баллов). Создать цифровые часы, которые показывают в реальном времени часы, минуты, секунды, число, месяц, год. Программа объектно-ориентированная. Любые добавления функционала часов (будильник, таймер, изыски дизайна) приведут к увеличению количества баллов.
Задача 3 (3 балла). Создать текстовый редактор, который умеет открывать выбранный пользователем текстовый файл и сохранять отредактированный текст в указанное пользователем место (т.е. должны быть реализованы вызовы из строки меню стандартных диалоговых окон открытия и сохранения файла).
Задача 4 (3 балла). Создать программу просмотра изображений, которая позволяет открывать выбранное пользователем изображение и имеет инструменты (кнопки или команды меню) для поворота изображения на 90° и 180°.
Задача 5 (4 балла). Реализовать простой калькулятор как минимум на четыре действия арифметики, с кнопками цифр и окошком вывода результата. Можно (но не обязательно) использовать Qt5 Designer для разработки собственного интерфейса. Нельзя использовать чужие проекты и чужие варианты дизайна.
Задача 6 (6 баллов). Написать программу обучения через игру. Например, можно реализовать вариацию классической игры "Змейка", в которой по экрану разбросаны разные английские буквы, и нужно в правильном порядке скормить змейке буквы, чтобы собрать английское слово, русский перевод которого дан. Исходный код "Змейки" можно, например, взять по этому адресу: https://www.geeksforgeeks.org/pyqt5-snake-game/ и модифицировать в соответствии с поставленной целью.
Задача 1 (2 балла). Создать квадратное изображение размером 100 на 100 пикселей в градациях серого такое, что выше главной диагонали будет линейный градиент от белого к серому, а ниже - линейный градиент от серого к чёрному (см. рисунок).
Задача 2 (2 балла). Используя OpenCV, загрузить любое изображение формата PNG, увеличить его в 1.5 раза, отразить его зеркально, повернуть на 10 градусов против часовой стрелки и сохранить полученное изображение в новый файл.
Задача 3 (2 балла). Напишите программу с библиотекой OpenCV, которая вычисляет средний цвет изображения, взятого из файла формата jpeg, и выводит на экран заполненный этим цветом квадрат.
Задача 4 (4 балла). Напишите программу, использующую OpenCV, которая умеет распознавать на фотографии одиночный яркий объект зелёного цвета любой формы.
Дополнительные задания
Задача 5 (от 1 до 5 баллов). Придумайте оригинальное задание (и предложите его решение) по языку Python для следующих поколений студентов в рамках любого из представленных выше разделов. На сколько баллов может претендовать ваше задание - столько баллов вы и заработаете.
Задача 6 (5 баллов). Вы должны в течение 15 минут написать программу, решающую одну из задач, подобных простым задачам разделов 1 и 2, не пользуясь никакими подсказками (без Интернета, смартфона и товарищеской помощи, за специально выделенным компьютером в компьютерном классе). Билет с задачей вы выбираете сами из предложенных преподавателем. У вас одна попытка. Неудачная попытка даёт вам 1 балл за смелость.