Как правильно использовать глобальную переменную при подсчете баллов в боте

      bot.send_message(message.chat.id, "✅Правильный ответ! Молодец!")
      conn = sqlite3.connect('mydatabase.db')
      cursor = conn.cursor()
      sam = random.choice(id_listb)
      global q
      cursor.execute("SELECT problem FROM B1 WHERE id=?", (sam,))
      sun = cursor.fetchone()
      cursor.execute("SELECT answer FROM B1 WHERE id=?", (sam,))
      san = cursor.fetchone()
      id_listb.remove(sam)
      global qn11
      qn11 = ' '.join(map(str, san))
      qm1 = ' '.join(map(str, sun))
      msg=bot.send_photo(message.chat.id,qm1,caption=f"*Задание #12*",parse_mode="Markdown")
      bot.register_next_step_handler(msg, check_b12)
      q += 1
    
 else:
      bot.send_message(message.chat.id, f"❌Неправильный ответ.\nВведенный ответ:{message.text}\nПравильный ответ:{qn10}")
      conn = sqlite3.connect('mydatabase.db')
      cursor = conn.cursor()
      sam1 = random.choice(id_listb)
      cursor.execute("SELECT problem FROM B1 WHERE id=?", (sam1,))
      sun = cursor.fetchone()
      cursor.execute("SELECT answer FROM B1 WHERE id=?", (sam1,))
      san = cursor.fetchone()
      id_listb.remove(sam1)
      qn11 = ' '.join(map(str, san))
      qm = ' '.join(map(str, sun))
      msg=bot.send_photo(message.chat.id,qm,caption=f"*Задание #12*",parse_mode="Markdown")
      bot.register_next_step_handler(msg, check_b12)

Получается подсчитать баллы когда тест проходит один человек ,а когда несколько то в переменную добавляются в баллы в том числе и других участников.Как сделать чтобы для каждого участника показывались только его баллы и не добавлялись лишние.Выше часть кода .Заранее спасибо.Не программист и просто хочу понять сделать чтобы это работало


Ответы (1 шт):

Автор решения: Amgarak

В глобальную переменную помещаем словарь: scores = {}

Проверяем правильность ответа, и если он верный:

user_id = message.from_user.id # Сохраняем id участника
scores.setdefault(user_id, 0) # Если он еще не получал балла ранее, то добавляем ключ и ставим значение по умолчанию 0
scores[user_id] += 1 # Плюсуем баллы за верный ответ

Соответственно так же и проверяем наличие\количество балов:

user_id = message.from_user.id
user_score = scores.get(user_id, 0) # Если пользователь ранее не получал балы и его нет в словаре участников, то вернём 0
→ Ссылка