有这样的代码,我需要以某种方式将 words 变量从循环传递给 step_proceed 函数(最后一行)。我对全局变量有一个想法,但是没有它们有什么办法吗?
def callback_handler(call):
db = Database('db/database.db')
markup = types.InlineKeyboardMarkup(row_width=1)
for category in db.get_categories():
markup.add(types.InlineKeyboardButton(text=category['title'], callback_data='category_' + category['callback_name']))
if call.data == 'start_quiz':
bot.send_message(call.message.chat.id, 'Привет, устрою вам небольшой экскурс. Когда вы выбираете категорию, появляются новые слова, под каждым словом есть 2 кнопки. Когда вы нажимаете "Не знаю" - вам ничего не начисляется. При нажатии "Подсказка" ,у вас снимется 0.5 бала(если вы напишете правильный ответ). Если вы напишете перевод верно, вам зачислится 1 очко. Игра до 10 очков. Удачи!')
time.sleep(11)
bot.send_message(call.message.chat.id, 'Выберите категорию {}'.format(emoji.emojize(':down_arrow:')), reply_markup=markup)
for category in db.get_categories(): #выполнение колбеков через цикл, используя БД
if call.data == 'category_' + category['callback_name']:
markup = types.InlineKeyboardMarkup(row_width=2)
btn1 = types.InlineKeyboardButton(text="Не знаю", callback_data='dont_know')
btn2 = types.InlineKeyboardButton(text="Подсказка", callback_data='hint')
markup.add(btn1, btn2)
words = db.get_words(category['title'])
random_word = words[random.randint(0, len(words))]
bot.send_message(call.message.chat.id, "Ну что ж, да начнется битва! Даю вам время 30 сек, иначе...", parse_mode='Markdown')
time.sleep(2)
msg = bot.send_message(call.message.chat.id, ("Впишите перевод: " + str(random_word['translation']).capitalize()), parse_mode='Markdown', reply_markup=markup)
bot.register_next_step_handler(msg, step_proceed)