@afasfks

Квиз бот телеграм на aiogram. Как реализовать подсчет правильных ответов?

Не могу разобраться, как сделать подсчет правильных ответов в квиз боте. Суть в том, что бот выдает картинку и к ней 4 кнопки с ответами. 1 ответ верный и 3 неправильных, которые случайным образом прикрепляются к одной из четырех кнопок. Это сделано для того, чтобы ответы на вопросы всегда были перемешаны. Не могу понять, как в одну переменную запихнуть счетчик, или как-то подвязать его к базе данных.
P.S. В качестве базы данных использую файл эксель (так мне показалось проще).

@dp.message_handler(Text(equals="тест 1"))
async def quiz_1(message: types.Message):
    module_one = xlrd.open_workbook('theme1.xls')
    sheet = module_one.sheet_by_index(0)
    random_photo_id = randint(0, 2)
    random_photo = sheet.row_values(random_photo_id)[0]
    true_answer = sheet.row_values(random_photo_id)[1]
    photo = random_photo

    module_one_answers = xlrd.open_workbook('theme1.xls')
    sheet2 = module_one_answers.sheet_by_index(1)
    vals = list(range(0, 11))
    random.shuffle(vals)
    # переменная vals содержит в себе числа от 0 до 11, далее они перемешиваются друг между другом.

    a = true_answer
    b = sheet2.row_values(vals[1])[0]
    c = sheet2.row_values(vals[2])[0]
    d = sheet2.row_values(vals[3])[0]
# переменные b c d берут первое, второе и третье значение из перемешанного списка чисел в переменной vals

    keyboard_list = [a, b, c, d]
    random.shuffle(keyboard_list)
# далее идет тот же механизм, только список состоит из четырех переменных a b c d, перемешивается и соответственоо каждая из четырех кнопок берет в себя первое,второе и так далее значение из листа
    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    button1 = keyboard.add(types.KeyboardButton(text=keyboard_list[0]))
    button2 = keyboard.add(types.KeyboardButton(text=keyboard_list[1]))
    button3 = keyboard.add(types.KeyboardButton(text=keyboard_list[2]))
    button4 = keyboard.add(types.KeyboardButton(text=keyboard_list[3]))
    buttonexit = keyboard.add(types.KeyboardButton(text="тест 1"))

    await message.answer("какой препарат изображен на фотографии?", reply_markup=keyboard)
    await bot.send_photo(message.chat.id, types.InputFile(photo))
  • Вопрос задан
  • 540 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Losharik_YT
Привет попробуй дописать эту пару строчек
answer_ids = poll_answer.option_ids #Узнаём ответ пользователя
username = poll_answer.user.username #узнаём имя пользователя(кто прошёл квиз)
poll_id = poll_answer.poll_id #узнаём id викторины\квиза

и я не понимаю почему не используешь уже готовый квиз
@dp.message(Command("start"))
async def poll(message: types.Message):
    await message.answer_poll(question='2 + 2 =', options=['3', '4', '5'], type='quiz', correct_option_id=1, is_anonymous=False)

вот пример как можно вызвать квиз, я думаю ты дальше сам разберёшься
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы