@Gold_doe

Как правильно сократить код и сделать его понятным?

Здравствуйте! Я новичок в программировании, захотел написать бота в Телеграм для магазина, но столкнулся с проблемой, что очень много повторений в коде. Подскажите, можно ли как то оптимизировать код?

elif message.text == ' Другое':
            markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
            back = types.KeyboardButton(' Главная')
            kor = types.KeyboardButton(' Корзина')

            markup.add(back,kor)

            catalog = types.InlineKeyboardMarkup(row_width=1)
            a1 = types.InlineKeyboardButton(text ='Хлеб Булочка', callback_data = 'hlep')
            a2 = types.InlineKeyboardButton(text ='Соевый соус', callback_data = 'souss')
            a3 = types.InlineKeyboardButton(text ='Имбирь/Васаби', callback_data = 'vasabi')
            a4 = types.InlineKeyboardButton(text ='Палочки', callback_data = 'palki')
            catalog.add(a1,a2,a3,a4)

            bot.send_message(message.chat.id, 'Возможно, будет полезно и это!', reply_markup = markup)
            bot.send_message(message.chat.id, ' Другое', reply_markup = catalog)

            button = types.InlineKeyboardMarkup()
            a = types.InlineKeyboardButton("Добавить в заказ!", callback_data = 'button1')
            button.add(a)

            @bot.callback_query_handler(func=lambda call: call.data == 'hlep' or call.data =='souss' or call.data == 'vasabi' or call.data == 'palki' or call.data == 'button1')
            def button_callback(call):
                if call.data == 'hlep':
                    bot.answer_callback_query(call.id)
                    bot.send_message(call.message.chat.id, bulk, parse_mode='html', reply_markup= button)    
                elif call.data == 'souss':
                    bot.answer_callback_query(call.id)
                    bot.send_message(call.message.chat.id, sous, parse_mode='html', reply_markup= button)
                elif call.data == 'vasabi':
                    bot.answer_callback_query(call.id)
                    bot.send_message(call.message.chat.id, imvs, parse_mode='html', reply_markup= button)
                elif call.data == 'palki':
                    bot.answer_callback_query(call.id)
                    bot.send_message(call.message.chat.id, palk, parse_mode='html', reply_markup= button)
                elif call.data == 'button1':
                    bot.answer_callback_query(call.id)
                    bot.send_message(call.message.chat.id,text = "Простите, автор-оладушек и еще не реализовал эту функцию")
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
def button_callback(call):
    actions = {
        'hlep': bulk,
        'souss': souss,
        'vasabi': imvs,
        'palki': palk,        
    }
    fn = actions.get(call.data)
    bot.answer_callback_query(call.id)
    if fn:
        bot.send_message(call.message.chat.id, fn, parse_mode='html', reply_markup=button)
    elif call.data == 'button1':
        bot.send_message(call.message.chat.id,text = "Простите, автор-оладушек и еще не реализовал эту функцию")


И наведите порядок с отступами. Если они такие и есть в вашем коде. то всё плохо. Приводите код на pastebin
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
1.Если используете python версии 3.10 и выше - замените конструкцию if/elif на try - catch.
пример
def do_something() -> None:

   text = """
   a.Первый вариант
   б.Второй вариант
   в.Третий вариант
   """
   print(text)
   input_value = input("Ваш вариант: ")
   
   match input_value:
      case 'а':
         print('Вы выбрали первый вариант')
      case 'б':
         print('Вы выбрали второй вариант')
      case 'в':
         print('Вы выбрали третий вариант')
      case _: # вариант для всех остальных значений
         print('Вы выбрали что-то другое')

if __name__ == '__main__':
   do_something()

2.Вынести все повторяющиеся строки в функцию и передавать в нее необходимые параметры.
(В вашем случае это все то, что в блоках if/elif)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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