Question_data = questions[question_index] question_text = question_data["question"] task_number = question_data["task_number"] # Номер задания options = question_data["options"] question_type = question_data.get("type", "multiple_choice") # Тип задания (по умолчанию multiple_choice) correct_answer = question_data["correct_answer"] # Получаем правильный ответ explanation = question_data["explanation"] # Получаем объяснение # Создаем клавиатуру с вариантами ответа markup = types.InlineKeyboardMarkup() for option in options: callback_data = f"answer_{question_index}_{option}" # Уникальный callback_data для каждого варианта button = types.InlineKeyboardButton(option, callback_data=callback_data) markup.add(button) # Добавляем кнопку "Разбор" explanation_callback_data = f"explanation_{question_index}" explanation_button = types.InlineKeyboardButton("Разбор", callback_data=explanation_callback_data) markup.add(explanation_button) send_html_message(chat_id, add_emoji(f"Задание {task_number}: {question_text} ({question_index + 1}/{state['total_questions']})"), reply_markup=markup) user_states[chat_id]["state"] = "waiting_for_answer" user_states[chat_id]["correct_answer"] = correct_answer user_states[chat_id]["explanation"] = explanation def check_answer(chat_id, question_index, answer): """Проверяет ответ пользователя.""" state = user_states.get(chat_id) if not state or state["state"] != "waiting_for_answer": return correct_answer = state["correct_answer"] # Достаем правильный ответ explanation = state["explanation"] # Достаем объяснение if answer == correct_answer: send_html_message(chat_id, add_emoji("✅ Правильно!")) user_states[chat_id]["correct_answers"] += 1 else: send_html_message(chat_id, add_emoji("❌ Неправильно!")) def show_explanation(chat_id): """Показывает объяснение к вопросу.""" state = user_states.get(chat_id) if not state or state["state"] != "waiting_for_answer": return explanation = state["explanation"] # Достаем объяснение из состояния send_html_message(chat_id, add_emoji(f"Разбор:\n{explanation}")) def next_question(chat_id): """Переходит к следующему вопросу.""" state = user_states.get(chat_id) if not state or state["state"] != "waiting_for_answer": return user_states[chat_id]["current_question_index"] += 1 if user_states[chat_id]["current_question_index"] < len(user_states[chat_id]["questions"]): ask_question(chat_id) # Задаем следующий вопрос, только если есть еще вопросы else: finish_test(chat_id) def finish_test(chat_id): """Завершает тест и выводит результаты.""" state = user_states.get(chat_id) if not state or state["state"] != "testing": return correct_answers = state["correct_answers"] total_questions = state["total_questions"] percentage = (correct_answers / total_questions) * 100 send_html_message(chat_id, add_emoji(f"Тест завершен!\nПравильных ответов: {correct_answers} из {total_questions} ({percentage:.2f}%)")) user_states[chat_id]["state"] = None # Сбрасываем состояние # --- Обработчики CallbackQuery --- @bot.callback_query_handler(func=lambda call: call.data.startswith('answer_')) def handle_answer(call): """Обрабатывает выбор варианта ответа.""" chat_id = call.message.chat.id data = call.data question_index = int(data.split('_')[1]) selected_answer = data.split('_')[2] check_answer(chat_id, question_index, selected_answer) # Удаляем клавиатуру после ответа bot.edit_message_reply_markup(chat_id=chat_id, message_id=call.message.message_id, reply_markup=None)
Ответ нейросети
09 марта 2025 17:29
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



