def task(task_id): user = current_user task = user.tasks.filter_by(task_id=task_id).first() task_finish = Task.query.filter_by(status=0, user_id=user.id).first() if not task_finish is None and task.id > task_finish.id: return redirect(url_for('task.task', task_id=task_finish.id)) base_task = ManagerTask.get_task(task_id) name = base_task.name description = base_task.description instruction = base_task.instruction example = base_task.example quest = base_task.quest form, result = check_from(user) table_names = user.get_table_names() return render_template('task/task.html', **result, table_names=table_names, name=name, description=description, instruction=instruction, example=example, quest=quest, task=task, form=form)
def finish(task_id): user = current_user task = user.tasks.filter_by(task_id=task_id).first() if task.status == 1: score, errors = ManagerTask.check(task_id=task_id, user=user) task_name = ManagerTask.get_task(task_id=task_id).name task.status = 2 task.score = score task.finish_time = datetime.utcnow() db.session.commit() return render_template('task/finish.html', title=task_name, procent=task.score, errors=errors) else: return redirect(url_for('task.task', task_id=task_id))
from app.no_web.base_task import ManagerTask, Table def check(user): result_count = 100 result = list() table = user.get_table('Животные') count = user.tables.count() if table is None: result.append('Таблица с именем Животные не найдена!') result_count -= 50 if count != 1: result.append( f'Количество таблиц не соответствует заданию {count} != 1') result_count -= 50 return result_count, result task = ManagerTask.add( name="""Удаление таблицы""", description= """Удаление таблицы довольно важная возможность. Когда вы начнёте реогранизовывать вашу базу данных, некоторые таблицы понадобиться удалить из - за того, что данные которые они хранили, перестали быть нужны, или же будут хранится в другой таблице.""", instruction= """Для удаления таблицы, выберете нужную таблицу и используйте команду del_table()""", example="""del_table()""", quest="""Удалите ВСЕ таблицы, кроме таблицы с названием Животные.""", check_func=check)
result = list() table = user.get_table('Животные') if table is None: result.append('Таблица с именем Животные не найдена!') result_count -= 100 else: names = list() for col in table.cols: names.append(col.name) if len(colomn_names) != len(names): result.append( f'Количество столбцов не соотвествует заданию. {len(colomn_names)} != {len(names)}' ) result_count -= 40 for name in colomn_names: if names.count(name) == 0: result.append(f'Отсутствует столбец {name}') result_count -= 60 / len(colomn_names) return result_count, result task = ManagerTask.add( name="""Добавление столбцов""", description= """Обычно таблицы представлены в виде столбцов, и строк. Поэтому в этом задании показано, как создаются столбцы.""", instruction= """Для добавления столбца используйте команду add_colomn('Название столбца 1', 'Название столбца 2')""", example="""add_colomn('Название столбца 1', 'Название столбца 2')""", quest= f"""Добавьте в таблицу Животные, такие столбцы: {', '.join(colomn_names)}""", check_func=check)
from app.no_web.base_task import ManagerTask, Table def check(user): result_count = 100 result = list() table = user.table() if table is None or table.name != 'Животные': result.append('Таблица с именем Животные не выбрана!') result_count -= 100 return result_count, result task = ManagerTask.add( name = """Выбор таблицы""", description = """Для того, чтобы получить возможность узнать чем заполнена ваша таблица, требуется выбрать её.""", instruction = """Для выбора таблицы используйте команду select_table('Название таблицы')""", example = """select_table('Тестовая таблица')""", quest = """Выберите таблицу с названием 'Животные' """, check_func = check )
from app.no_web.base_task import ManagerTask, Table def check(user): result_count = 100 result = list() table = user.get_table('Животные') if table is None: result.append('Таблица с именем Животные не найдена!') result_count -= 100 else: if table.rows.count() != 6: result.append( f'Количество строк не соотвествует заданию. {table.rows.count()} != 6' ) result_count -= 100 return result_count, result task = ManagerTask.add( name="""Удаление строк""", description="""В этом задании показано, как удаляются строки.""", instruction= """Для удаления строки используйте команду del_row(номер строки)""", example="""del_row(3)""", quest=f"""Оставьте в таблице Животные 6 строк.""", check_func=check)
result_count -= 100 else: if table.rows.count() != 6: result.append(f'Количество строк не соотвествует заданию. {table.rows.count()} != 6') result_count -= 50 types = list() for row in table.rows: for e in row.items:types.append(e.item_type) r1 = 0 r2 = 0 r3 = 0 if types.count(0) != 0: r1 = types.count(0) / len(types) * 100 if types.count(1) != 0: r2 = types.count(1) / len(types) * 100 if types.count(2) != 0: r3 = types.count(2) / len(types) * 100 max = 0 if r1 != r2 and r2 != r3 and r1 != r3: result.append(f'Процент строк цифрового типа = {r1}') result.append(f'Процент строк дробного типа = {r2}') result.append(f'Процент строк строкового типа = {r3}') result_count -= 50 return result_count, result task = ManagerTask.add( name = """Изменение значения строк""", description = """В этом задании показано, как можно изменить значение у строки.""", instruction = """Для изменения строки используйте команду set_row(номер строки, номер столбца, новое значение)""", example = """set_row(1, 1, 'New value')""", quest = f"""Сделайте половину строк с одним типом, а вторую половину с другим типом.""", check_func = check )
result.append(f'Название столбца не исправлено = {col}') result_count -= 10 errors = 0 for i2, row in enumerate(table.rows): for i, e in enumerate(row.items.all()): if e.item() == '': result.append(f'#{i2}|{i} - пустая ячейка') errors += 1 elif (i == 0 or i == 2) and e.item_type != 2: errors += 1 result.append( f'#{i2}|{i} - не является строкой = {e.item()}') else: if (i == 1 or i == 3) and e.item_type != 0: errors += 1 result.append( f'#{i2}|{i} - не является числом = {e.item()}') result_count -= errors result.append(f'Всего ошибок в строках = {errors}') return result_count, result task = ManagerTask.add( name="""Итоговое задание по пройденным функциям""", description= """Данное задание проверяет освоение работы с функциями для работы с таблицами.""", instruction="""Для получения таблицы введите команду create_test()""", example="""create_test()""", quest= f"""В этом задании требуется привести таблицу 'Тестовая таблица для задания 10' в порядок. Добавьте ещё несколько строк. Количество строк в таблице должно быть = 13.""", check_func=check)
) result_count -= 40 types = list() for row in table.rows: for e in row.items: types.append(e.item_type) r1 = 0 r2 = 0 r3 = 0 if types.count(0) != 0: r1 = types.count(0) / len(types) * 100 if types.count(1) != 0: r2 = types.count(1) / len(types) * 100 if types.count(2) != 0: r3 = types.count(2) / len(types) * 100 max = 0 if r1 > max: max = r1 if r2 > max: max = r2 if r3 > max: max = r3 if max != 100: result.append(f'Процент строк одинакового типа = {max}') result_count -= (60 - 60 * (max / 100)) return result_count, result task = ManagerTask.add( name="""Добавление строк""", description="""В этом задании показано, как создаются строки.""", instruction= """Для добавления строки используйте команду add_row('строка', цифра и т.д.)""", example="""add_row('Страус', '1000 кг', 5, 'Зоопарк')""", quest=f"""Добавьте в таблицу Животные, 10 строк одного типа.""", check_func=check)
table = user.get_table('Животные') if table is None: result.append('Таблица с именем Животные не найдена!') result_count -= 100 else: names = list() for col in table.cols: names.append(col.name) if len(colomn_names) != len(names): result.append( f'Количество столбцов не соотвествует заданию. {len(colomn_names)} != {len(names)}' ) result_count -= 50 if names.count('Вес') == 0: result.append(f'Отсутствует столбец Вес') result_count -= 25 if names.count('Размер') != 0: result.append(f'Столбец Размер не был изменён') result_count -= 25 return result_count, result task = ManagerTask.add( name="""Изменение столбцов""", description= """В данном задании вы научитесь изменять название, уже существующих, столбцов.""", instruction= """Для изменения названия используйте команду rename_colomn(номер столбца, 'Название колонки')""", example="""rename_colomn(2, 'Название колонки')""", quest="""Измените столбец Размер на Вес в таблице Животные.""", check_func=check)
from app.no_web.base_task import ManagerTask, Table def check(user): result_count = 100 result = list() table = user.get_table('Животные') count = user.tables.count() if table is None: result.append('Таблица с именем Животные не найдена!') result_count -= 40 if count < 3: result.append( f'Количество таблиц не соответствует заданию {count} < 3') result_count -= (3 - count) * 20 return result_count, result task = ManagerTask.add( name="""Создание таблицы""", description="""Таблица - это набор связанных данных.""", instruction= """Для создания таблицы используйте команду create_table('Название таблицы')""", example="""create_table('Тестовая таблица')""", quest= """Создайте таблицу с названием Животные. Создайте ещё, как минимум 2 таблицы с произвольным названием.""", check_func=check)