Задать вопрос
@Maxwell012

Как передать переменную из одной функции в другую?

Мне нужно задать пользователю в телеграмме небольшой список вопросов и каждый ответ сохранить (я это сделал, но мне кажется что это не рациональный подход, если кто-то знает как можно улучшить эту часть кода, прошу помочь), каждый ответ у меня храниться в отдельной функции, как правильно обратиться к переменой из другой функции.
Код:
def mail(message):
    surname = message.text
    msg = bot.send_message(message.chat.id, 'Почта :')
    bot.register_next_step_handler(msg, link)
def link(message):
    mail = message.text
    msg = bot.send_message(message.chat.id, 'Ссылка на тест :')
    bot.register_next_step_handler(msg, time)
def time(message):
    url = message.text
    msg = bot.send_message(message.chat.id, 'Время затраченное на один вопрос ⏳:')
    bot.register_next_step_handler(msg, question)
def question(message):
    time = message.text
    msg = bot.send_message(message.chat.id, 'Хотите получить скрин-отчёт после выполнения теста (д/н)?')
    bot.register_next_step_handler(msg, answer)
def answer(message):
    if message.text == 'да' or 'д' or 'y' or 'yes' or 'Д' or 'Да' or 'ДА' or 'Y' or 'YES' or 'Yes' or '+':
        bool_answer = True
        bot.send_message(message.chat.id, 'Ок ')
        print(link)
    else:
        bool_answer = False
    full_time = time*number_of_questions(url)
    if full_time > 60:
        bot.send_message(message.chat.id, f'Время теста: {full_time/60} минут')
    else:
        bot.send_message(message.chat.id, f'Время теста: {full_time} секунд')


Мне нужно с функции answer обратиться к переменной url из функции time
  • Вопрос задан
  • 181 просмотр
Подписаться 2 Простой 2 комментария
Решения вопроса 2
@dmshar
Вопрос не имеет никакого отношения к написанию ботов вообще, ни к telegram в частности. Вопрос имеет отношения к Python, его основам, а так-же к необходимости его изучения.
Для передачи значений между функциями ВСЕГДА И ВЕЗДЕ существует ТРИ способа.
1. Классический: в общей вызывающей программе создаете переменную, которую передаете как параметр в обе функции. В одной из этих функций эта переменная заполняется значением, в другой - читается и используется.
2. Нерекомендуемый: через глобальную переменную.
3. Для очень сложных систем: через внешний файл.
Все.
Вот и выбирайте тот из них, который вам подходит больше.
Ответ написан
Комментировать
iggor-markin
@iggor-markin
Python Developer
Чтобы задать пользователю несколько вопросов тебе нужно воспользоваться машиной состояний. Обычно реализация есть в любой популярной библиотеке. Вот пример на aiogram: https://github.com/aiogram/aiogram/blob/dev-2.x/ex...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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