@fenser

Проблемы с кодом на Python. Поможете?

Я только начал разбираться в Python, и решил пройти бесплатный курс по основам программрования на этом языке. Написал кое как основные функции бота для телеграмм, но дальше у меня возникла проблема. Я не имею ни малейшего понятия как переменную из одной функции перенести в другую (команда /add), а ещё у меня проблема с командой, /show при отдельном её написании, я хочу что-бы она выводила все задачи и даты, а не крашила бота. Подскажите как исрправить мои ошибки! Буду благодарен любой помощи.

Вот проблемная часть кода:

import telebot

token = "********"
bot = telebot.TeleBot(token)
tasks = {}
todos = dict()


def add_todo(date, task):
    date = date.lower()
    if todos.get(date) is not None:
        todos[date].append(task)
    else:
        todos[date] = [task]
@bot.message_handler(commands=['add'])
def add(message):
    msg = bot.reply_to(message, "Введите дату (Пример: 15/01/2023):")
    bot.register_next_step_handler(msg, add_date)
def add_date(message):
    date1 = " "
    try:
         date1 = message.text
         if not len(date1) == 10:
             msg = bot.reply_to(message, "Введите дату (Пример: 15/01/2023):")
             bot.register_next_step_handler(msg, add_date)
             return
         msg = bot.reply_to(message, 'Напишите задачу:')
         bot.register_next_step_handler(msg, add_task)
    except Exception: 1==1
    return date1

def add_task(message):
    try:
        task = message.text
        bot.send_message(message.chat.id, date1)
        add_todo(date1, task)      #я не зная как передать переменную date1 из другой функии
    except Exception: 1==1

@bot.message_handler(commands=['show'])     #эта команда может работать только с указаной через пробел датой
def show_(message):
    dates = message.text.split(maxsplit=1)[1].lower().split()
    response  = ''
    for date in dates:
        tasks = todos.get(date)
        response += f'{date}: \n'
        for task in tasks:
            response += f'[ ] {task}\n'
        response += '\n'
    bot.send_message(message.chat.id, response)

bot.polling(none_stop=True)
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dima20155
you don't choose c++. It chooses you
Чтобы перенести переменную из функции в функцию нужно либо явно передавать ее в качестве аргумента, или поместить обе функции в класс, а общую переменную сделать переменной этого класса.
Также самый простой, но при этом самый плохой с точки зрения архитектуры подход - сделать переменную глобальной
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы