Как правильно использовать глобальную переменную при подсчете баллов в боте
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