Как настроить Телеграм-бот для проведения викторины, где пользователю предлагается выбрать правильный ответ?

Как можно изменить код так, чтобы правильный ответ на вопрос был только один, а не все варианты ответа?
  • 18 марта 2024 г. 19:49
Ответы на вопрос 1
Для настройки Телеграм-бота для проведения викторины, где пользователю предлагается выбрать правильный ответ, следует использовать Python и его библиотеку python-telegram-bot. 

Ниже приведен пример кода для создания викторины с вариантами ответов, где пользователь должен выбрать верный ответ:

```python
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
from telegram import ReplyKeyboardMarkup

questions = {"Какая столица Франции?": ["Москва", "Лондон", "Париж"],
             "Как называется самая большая планета в Солнечной системе?": ["Марс", "Юпитер", "Венера"]
            }

answers = {"Какая столица Франции?": "Париж",
           "Как называется самая большая планета в Солнечной системе?": "Юпитер"
          }

def start(update, context):
    update.message.reply_text("Добро пожаловать в викторину! Выберите верный ответ на вопросы.")
    next_question(update, context)

def next_question(update, context):
    question = list(questions.keys())[0]
    answers_options = questions[question]
    reply_markup = ReplyKeyboardMarkup([answers_options], one_time_keyboard=True)
    context.user_data['correct_answer'] = answers[question]
    update.message.reply_text(question, reply_markup=reply_markup)

def check_answer(update, context):
    user_answer = update.message.text
    correct_answer = context.user_data['correct_answer']
    if user_answer == correct_answer:
        update.message.reply_text("Правильно!")
    else:
        update.message.reply_text("Неправильно. Попробуйте еще раз.")
    questions.pop(list(questions.keys())[0])
    if questions:
        next_question(update, context)
    else:
        update.message.reply_text("Викторина закончилась. Спасибо за участие!")

def main():
    updater = Updater("YOUR_TOKEN", use_context=True)
    dp = updater.dispatcher

    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(MessageHandler(Filters.text & ~Filters.command, check_answer))

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()
```

Для того чтобы изменить код так, чтобы правильный ответ на вопрос был только один, а не все варианты ответа, можно изменить структуру questions и answers, чтобы хранить только один правильный ответ на вопрос. Например:

```python
questions = {"Какая столица Франции?": "Париж",
             "Как называется самая большая планета в Солнечной системе?": "Юпитер"
            }

def start(update, context):
    update.message.reply_text("Добро пожаловать в викторину! Выберите верный ответ на вопросы.")
    next_question(update, context)

def next_question(update, context):
    question = list(questions.keys())[0]
    update.message.reply_text(question)

def check_answer(update, context):
    user_answer = update.message.text
    correct_answer = questions[list(questions.keys())[0]]
    if user_answer == correct_answer:
        update.message.reply_text("Правильно!")
    else:
        update.message.reply_text("Неправильно. Попробуйте еще раз.")
    questions.pop(list(questions.keys())[0])
    if questions:
        next_question(update, context)
    else:
        update.message.reply_text("Викторина закончилась. Спасибо за участие!")
```

Таким образом, вопросы и ответы представлены в виде словаря, где ключ - вопрос, а значение - правильный ответ. Когда пользователь отвечает на вопрос, проверяется только один правильный ответ.
Похожие вопросы