МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ
«ЦЕНТР ДЕТСКОГО ТЕХНИЧЕСКОГО ТВОРЧЕСТВА»
Методическая разработка
«Проект на Python "Электронный планер"»
к дополнительной общеобразовательной
общеразвивающей программе
технической направленности
«Программирование на Python»
Возраст детей: 10-17 лет
Автор: Костычев Вадим Александрович
г. Заречный Пензенской области
2024 г.
В ходе изучения программирования на основе языка Python большую роль играет разработка проектов. Они позволяют отработать как навыки программирования, вспомнить работу различных функций, команд, развить навыки построения алгоритмов.
Целью данной разработки является повышение интереса учащихся к техническому творчеству посредством работы над проектом на языке Python.
Данная методическая разработка используется как обучающий пример для работы по дополнительной общеобразовательной общеразвивающей программе технической направленности «Программирование на Python». С их помощью учащиеся смогут применить теоретические знания на практике, построив сложные алгоритмы для решения собственных задач.
Самостоятельная разработка PET-проектов является неотъемлемой частью обучения программирования. Она помогает не только глубже вникнуть в работу языка программирования, но и изучить различные библиотеки, научить самостоятельно строить алгоритм. PET-проекты могут быть развлекательного характера, а могут выполнять определенную очень важную функцию – таким проектом можно поделиться с близкими, друзьями, коллегами или опубликовать в какой-либо социальной сети или форуме.
Данная методическая разработка предлагает один из возможных вариантов PET-проекта. Проект «Электронный планер» является общественно-полезным PET-проектом, которым, при нужной степени модификации, ребенок может поделиться со своими родными и близкими для планирования своего времени или использовать сам.
В ходе проекта ученики:
Научатся работать с данными, создавать и управлять объектами (задачами);
Узнают, как обрабатывать пользовательский ввод и выводить структурированную информацию;
Поймут, как реализовывать функции для сортировки, фильтрации и проверки условий (например, дедлайнов);
Освоят основы работы с датами и временем в Python;
Получат опыт использования принципов объектно-ориентированного программирования.
Проект «Электронный планер»
Описание проекта: этот проект позволит школьникам создавать расписание на день, задавать список задач, помечать выполненные задания и получать рекомендации по управлению временем. Проект также может включать возможность напоминаний и анализа продуктивности.
Цель проекта: основной целью проекта является разработка программы на языке Python, которая помогает школьникам эффективно организовывать свой день, управлять задачами и рационально распределять время.
Темы, которые необходимо знать для разработки проекта:
ввод и вывод данных;
условия (if, else);
циклы (while);
работа с модулями;
модуль datetime для работы с датой и временем;
модуль json для работы с json файлами;
принципы объектно-ориентированного программирования;
сортировка объектов.
Листинг программы
import json
from datetime import datetime
# Класс для управления задачами
class Task:
def __init__(self, title, priority, due_time, completed=False):
self.title = title
self.priority = priority # Высокий, Средний, Низкий
self.due_time = due_time # Время дедлайна
self.completed = completed # Статус выполнения
def mark_as_completed(self):
self.completed = True
def to_dict(self):
"""Конвертирует объект Task в словарь для сохранения в JSON."""
return {
"title": self.title,
"priority": self.priority,
"due_time": self.due_time.strftime("%Y-%m-%d %H:%M"),
"completed": self.completed
}
@classmethod
def from_dict(cls, task_dict):
"""Создает объект Task из словаря."""
due_time = datetime.strptime(task_dict["due_time"], "%Y-%m-%d %H:%M")
return cls(task_dict["title"], task_dict["priority"], due_time, task_dict["completed"])
def __str__(self):
status = "Выполнено" if self.completed else "Не выполнено"
return f"Задача: {self.title}, Приоритет: {self.priority}, Дедлайн: {self.due_time}, Статус: {status}"
# Класс для управления расписанием
class TaskManager:
def __init__(self, filename="tasks.json"):
self.filename = filename
self.tasks = self.load_tasks()
# Добавление новой задачи
def add_task(self, title, priority, due_time):
new_task = Task(title, priority, due_time)
self.tasks.append(new_task)
self.save_tasks()
print(f"Задача '{title}' добавлена!")
# Отметить задачу как выполненную
def complete_task(self, title):
for task in self.tasks:
if task.title == title:
task.mark_as_completed()
self.save_tasks() # Сохраняем изменения
print(f"Задача '{title}' отмечена как выполненная!")
return
print(f"Задача '{title}' не найдена.")
# Показать список задач (с фильтром по выполнению)
def show_tasks(self, show_completed=False):
print("Список задач:")
for task in self.tasks:
if not show_completed and task.completed:
continue
print(task)
# Проверка на дедлайны
def check_deadlines(self):
now = datetime.now()
for task in self.tasks:
if not task.completed and task.due_time print(f"ВНИМАНИЕ: Задача '{task.title}' просрочена!")
# Рекомендации по приоритетам
def get_recommendations(self):
high_priority = [task for task in self.tasks if task.priority == "Высокий" and not task.completed]
if len(high_priority) 3:
print("РЕКОМЕНДАЦИЯ: У вас слишком много задач с высоким приоритетом. Пересмотрите их важность.")
# Сохранение задач в файл
def save_tasks(self):
with open(self.filename, "w") as file:
tasks_data = [task.to_dict() for task in self.tasks]
json.dump(tasks_data, file, indent=4)
print("Задачи сохранены в файл.")
# Загрузка задач из файла
def load_tasks(self):
try:
with open(self.filename, "r") as file:
tasks_data = json.load(file)
tasks = [Task.from_dict(task_dict) for task_dict in tasks_data]
print("Задачи загружены из файла.")
return tasks
except FileNotFoundError:
print("Файл с задачами не найден. Начинаем с пустого списка.")
return []
# Основная программа
def main():
task_manager = TaskManager()
while True:
print("\nМеню:")
print("1. Добавить задачу")
print("2. Отметить задачу как выполненную")
print("3. Показать все задачи")
print("4. Показать только невыполненные задачи")
print("5. Проверить дедлайны")
print("6. Получить рекомендации по приоритетам")
print("7. Выход")
choice = input("Выберите действие: ")
if choice == "1":
title = input("Введите название задачи: ")
priority = input("Введите приоритет (Высокий, Средний, Низкий): ")
due_time_str = input("Введите дедлайн (формат: ГГГГ-ММ-ДД ЧЧ:ММ): ")
try:
due_time = datetime.strptime(due_time_str, "%Y-%m-%d %H:%M")
task_manager.add_task(title, priority, due_time)
except ValueError:
print("Неверный формат даты!")
elif choice == "2":
title = input("Введите название задачи для отметки как выполненной: ")
task_manager.complete_task(title)
elif choice == "3":
task_manager.show_tasks(show_completed=True)
elif choice == "4":
task_manager.show_tasks(show_completed=False)
elif choice == "5":
task_manager.check_deadlines()
elif choice == "6":
task_manager.get_recommendations()
elif choice == "7":
print("Выход из программы.")
break
else:
print("Неверный выбор. Попробуйте снова.")
if __name__ == "__main__":
main()
Объяснение работы кода программы:
1. Импортирование библиотек
В начале программы используются две библиотеки: json для работы с JSON-форматом, который позволяет сохранять и загружать задачи из файла, и datetime, необходимая для работы с датами и временем, что важно для установки дедлайнов задач.
2. Класс Task
Класс Task представляет задачу. Он содержит:
- конструктор, который инициализирует новый объект задачи с названием, приоритетом, временем дедлайна и статусом выполнения;
- метод для отметки задачи как выполненной;
- метод, преобразующий объект задачи в словарь для сохранения в формате json;
- класс-метод, создающий объект задачи из словаря;
- метод, определяющий строковое представление задачи, что позволяет удобно выводить информацию о ней/
3. Класс TaskManager
Класс TaskManager управляет списком задач. Он включает:
конструктор, который инициализирует менеджер задач и загружает существующие задачи из файла;
метод для добавления новой задачи, который также сохраняет обновленный список задач в файл;
метод для отметки задачи как выполненной, который также сохраняет изменения;
методы для отображения списка задач, проверки дедлайнов и предоставления рекомендаций по управлению задачами;
метод для сохранения всех задач в файл в формате json;
метод для загрузки задач из файла при старте программы, который обрабатывает ситуацию, если файл не найден.
4. Основная программа
Функция main() инициализирует менеджер задач и запускает главное меню программы. В меню предлагаются варианты действий, такие как добавление задачи, отметка задачи как выполненной, отображение задач, проверка дедлайнов и получение рекомендаций.
Пользователь вводит свой выбор, и программа выполняет соответствующее действие:
при добавлении задачи программа запрашивает название, приоритет и дедлайн, затем задача добавляется в список.
если пользователь хочет отметить задачу как выполненную, программа запрашивает название задачи и обновляет ее статус.
для отображения задач программа показывает все задачи или только невыполненные, в зависимости от выбора.
программа проверяет дедлайны задач и выдает предупреждения о просроченных задачах.
при запросе рекомендаций программа анализирует количество задач с высоким приоритетом и предлагает советы.
если пользователь выбирает выход, программа завершает работу.
Данная программа представляет собой функциональный менеджер задач, позволяющий пользователям добавлять, завершать и отслеживать свои задачи, а школьникам актуализировать и закрепить свои знания по работе с ООП, json-файлами, функциями, фильтрации и вводу-выводу информации. Данный код – один из вариантов возможного решения, учащиеся могут предоставить свое видение и решение данного проекта.