/
WhiteM93
/
Puzzles
Обзор
Документация
Войти
/
WhiteM93
/
Puzzles
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
add_task.py
140 строк
5 KB
WM93
1
31 дек 2024, 06:58
31 дек 2024, 06:58
c839502
Код
Авторство
О чём код?
import os # Путь к корню репозитория REPO_ROOT = "./" # Папка для всех задач TASKS_DIR = os.path.join(REPO_ROOT, "Tasks") # Список доступных категорий CATEGORIES = ["Программирование", "Математика"] # Уровни сложности DIFFICULTY_LEVELS = {1: "Легкий", 2: "Средний", 3: "Сложный"} def get_next_task_id(): """Определяет следующий номер задачи на основе существующих папок.""" if not os.path.exists(TASKS_DIR): os.makedirs(TASKS_DIR) return 1 # Если папка пустая, начать с первой задачи # Смотрим существующие задачи task_dirs = [d for d in os.listdir(TASKS_DIR) if d.startswith("task")] task_ids = [int(d[4:]) for d in task_dirs if d[4:].isdigit()] # Извлекаем номера задач return max(task_ids, default=0) + 1 # Следующий номер задачи def select_category(): """Выбор категории задачи из списка.""" print("Выберите категорию задачи:") for idx, category in enumerate(CATEGORIES, start=1): print(f"{idx}. {category}") while True: try: choice = int(input("Введите номер категории: ").strip()) if 1 <= choice <= len(CATEGORIES): return CATEGORIES[choice - 1] else: print("Некорректный номер. Попробуйте снова.") except ValueError: print("Пожалуйста, введите число от 1 до", len(CATEGORIES)) def select_difficulty(): """Выбор уровня сложности из списка.""" print("Выберите уровень сложности:") for key, level in DIFFICULTY_LEVELS.items(): print(f"{key}. {level}") while True: try: choice = int(input("Введите номер уровня: ").strip()) if choice in DIFFICULTY_LEVELS: return DIFFICULTY_LEVELS[choice] else: print("Некорректный номер. Попробуйте снова.") except ValueError: print("Пожалуйста, введите число 1, 2 или 3.") def create_task(task_name, task_description, category, level): """Создает новую задачу в папке Tasks.""" task_id = get_next_task_id() # Определяем номер задачи task_folder = os.path.join(TASKS_DIR, f"task{task_id}") # Создаем папку для задачи os.makedirs(task_folder, exist_ok=True) task_file = os.path.join(task_folder, f"task{task_id}.md") solution_file = os.path.join(task_folder, "solution.py") test_file = os.path.join(task_folder, f"test_task{task_id}.py") # Создаем файл задачи with open(task_file, "w", encoding="utf-8") as f: f.write(f"""# Задача {task_id}: {task_name} **Категория:** {category} **Уровень:** {level} ## Условие {task_description} ### Пример Вход: `[пример входа]` Выход: `[пример выхода]` ## Ограничения [перечислите ограничения здесь] """) print(f"Создан файл задачи: {task_file}") # Создаем решение на Python with open(solution_file, "w", encoding="utf-8") as f: f.write(f"""# Решение для задачи {task_id}: {task_name} def solve(): \"\"\"Функция для решения задачи.\"\"\" pass if __name__ == "__main__": solve() """) print(f"Создан файл решения: {solution_file}") # Создаем файл тестов with open(test_file, "w", encoding="utf-8") as f: f.write(f"""# Тесты для задачи {task_id}: {task_name} import pytest from solution import solve def test_solve(): assert True # Напишите тесты здесь if __name__ == "__main__": pytest.main() """) print(f"Создан файл с тестами: {test_file}") # Интерфейс для пользователя if __name__ == "__main__": print("Добавление новой задачи в репозиторий!") task_name = input("Введите название задачи: ").strip() category = select_category() level = select_difficulty() print("Введите описание задачи (можете вставить многострочный текст). Для завершения ввода введите строку 'END':") # Считываем описание задачи description_lines = [] while True: line = input() if line.strip().upper() == "END": break description_lines.append(line) task_description = "\n".join(description_lines).strip() create_task(task_name, task_description, category, level) print("Задача успешно добавлена!")