Как избавиться от большего количества переменных в python?
Имею тот такого бота с расписанием для свое группы. Хочу сделать расписание еще для одной группы, но с талкиваюсь с такой проблемой, что нужно делать огромное кол-во переменных. Как можно это упростить/исправить ? Так же вопрос, если сделать расписание для 2 групп. То бот показывал расписание именно для этой группы, тобиж чтобы бот 1 раз спросил группу и запомнил это. буду благодарен за ответ)))
import config
import telebot
from telebot import types
from keyboards import keyboard1, keyboard2, keyboard3
bot = telebot.TeleBot(config.token)
# Инлайн клавиатура рассписания
keyboard4 = types.InlineKeyboardMarkup()
item1 = types.InlineKeyboardButton(text="Следующая неделя", callback_data="SV_31__PN_p") # Неделя ПН Над чертой
keyboard4.add(item1)
keyboard5 = types.InlineKeyboardMarkup()
item1 = types.InlineKeyboardButton(text="Следующая неделя", callback_data="SV_31__PN_n") # Неделя ПН Под чертой
keyboard5.add(item1)
keyboard6 = types.InlineKeyboardMarkup()
item1 = types.InlineKeyboardButton(text="Следующая неделя", callback_data="SV_31__VT_p") # Неделя ВТ Над чертой
keyboard6.add(item1)
keyboard7 = types.InlineKeyboardMarkup()
item1 = types.InlineKeyboardButton(text="Следующая неделя", callback_data="SV_31__VT_n") # Неделя ВТ Под чертой
keyboard7.add(item1)
keyboard8 = types.InlineKeyboardMarkup()
item1 = types.InlineKeyboardButton(text="Следующая неделя", callback_data="SV_31__SR_p") # Неделя СР Над чертой
keyboard8.add(item1)
keyboard9 = types.InlineKeyboardMarkup()
item1 = types.InlineKeyboardButton(text="Следующая неделя", callback_data="SV_31__SR_n") # Неделя СР Под чертой
keyboard9.add(item1)
keyboard10 = types.InlineKeyboardMarkup()
item1 = types.InlineKeyboardButton(text="Следующая неделя", callback_data="SV_31__CT_p") # Неделя ЧТ Над чертой
keyboard10.add(item1)
keyboard11 = types.InlineKeyboardMarkup()
item1 = types.InlineKeyboardButton(text="Следующая неделя", callback_data="SV_31__CT_n") # Неделя ЧТ Под чертой
keyboard11.add(item1)
keyboard12 = types.InlineKeyboardMarkup()
item1 = types.InlineKeyboardButton(text="Следующая неделя", callback_data="SV_31__PT_p") # Неделя ПТ Над чертой
keyboard12.add(item1)
keyboard13 = types.InlineKeyboardMarkup()
item1 = types.InlineKeyboardButton(text="Следующая неделя", callback_data="SV_31__PT_n") # Неделя ПТ Под чертой
keyboard13.add(item1)
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id, 'Альфа версия BSUT Helper. Разработчик @mikitos59', reply_markup=keyboard1)
@bot.message_handler(regexp='Расписание ?')
def send_text(message):
bot.send_message(message.chat.id, 'Здесь будет отображаться расписание занятий', reply_markup=keyboard3)
# Расписание занятий
@bot.message_handler(regexp='ПН')
def send_text(message):
bot.send_message(message.chat.id, SV_31__PN_n, reply_markup=keyboard4, parse_mode = 'Markdown')
@bot.message_handler(regexp='ВТ')
def send_text(message):
bot.send_message(message.chat.id, SV_31__VT_n, reply_markup=keyboard6, parse_mode = 'Markdown')
@bot.message_handler(regexp='СР')
def send_text(message):
bot.send_message(message.chat.id, SV_31__SR_n, reply_markup=keyboard8, parse_mode = 'Markdown')
@bot.message_handler(regexp='ЧТ')
def send_text(message):
bot.send_message(message.chat.id, SV_31__CT_n, reply_markup=keyboard10, parse_mode = 'Markdown')
@bot.message_handler(regexp='ПТ')
def send_text(message):
bot.send_message(message.chat.id, SV_31__PT_n, reply_markup=keyboard12, parse_mode = 'Markdown')
@bot.callback_query_handler(func=lambda call: True)
def answer(call):
if call.data == 'SV_31__PN_p':
bot.send_message(call.message.chat.id, SV_31__PN_p, reply_markup=keyboard5, parse_mode = 'Markdown')
elif call.data == 'SV_31__PN_n':
bot.send_message(call.message.chat.id, SV_31__PN_n, reply_markup=keyboard4, parse_mode = 'Markdown')
elif call.data == 'SV_31__VT_p':
bot.send_message(call.message.chat.id, SV_31__VT_p, reply_markup=keyboard7, parse_mode = 'Markdown')
elif call.data == 'SV_31__VT_n':
bot.send_message(call.message.chat.id, SV_31__VT_n, reply_markup=keyboard6, parse_mode = 'Markdown')
elif call.data == 'SV_31__SR_p':
bot.send_message(call.message.chat.id, SV_31__SR_p, reply_markup=keyboard9, parse_mode = 'Markdown')
elif call.data == 'SV_31__SR_n':
bot.send_message(call.message.chat.id, SV_31__SR_n, reply_markup=keyboard8, parse_mode = 'Markdown')
elif call.data == 'SV_31__CT_p':
bot.send_message(call.message.chat.id, SV_31__CT_p, reply_markup=keyboard11, parse_mode = 'Markdown')
elif call.data == 'SV_31__CT_n':
bot.send_message(call.message.chat.id, SV_31__CT_n, reply_markup=keyboard10, parse_mode = 'Markdown')
elif call.data == 'SV_31__PT_p':
bot.send_message(call.message.chat.id, SV_31__PT_p, reply_markup=keyboard13, parse_mode = 'Markdown')
elif call.data == 'SV_31__PT_n':
bot.send_message(call.message.chat.id, SV_31__PT_n, reply_markup=keyboard12, parse_mode = 'Markdown')
# Расписание СВ-31
SV_31__PN_n = 'Понедельник (Над чертой) \n\n1⃣ - \n\n2⃣ *ФИЗИЧЕСКАЯ КУЛЬТУРА* _(9:45-11:20)_ \n\n3⃣ - \n\n4⃣ ЛЕК 103 *СТРОИТЕЛЬНАЯ МЕХАНИКА*, Леоненко Д.В. (14:00-15:30) \n\n5️⃣(1)-, \n\n (2)ЛАБ *ХИМИЯ*, Самусева Л.В. (15:40-17:15)'
SV_31__PN_p = 'Понедельник (Под чертой) \n\n1⃣ - \n\n2⃣ *ФИЗИЧЕСКАЯ КУЛЬТУРА* _(9:45-11:20)_ \n\n3⃣ - \n\n4⃣ ЛЕК 103 *СТРОИТЕЛЬНАЯ МЕХАНИКА*, Леоненко Д.В. (14:00-15:30) \n\n5️⃣(1)ЛАБ 454 *ВОДОПОДГОТОВКА*, Горелая О.Н. (15:40-17:15), \n\n (2)-'
SV_31__VT_n = 'Вторник (Над чертой) \n\n1⃣ ЛЕК 103 **СТРОИТЕЛЬНАЯ МЕХАНИКА**, Леоненко Д.В. _(8:00-9:30)_ \n\n2⃣ ЛЕК 317 **ВОДОПОДГОТОВКА**, Горелая О.Н. (9:45-11:20) \n\n3⃣ ПЗ 153 *СТРОИТЕЛЬНАЯ МЕХАНИКА*, Яровая А.В. (11:30-13:05) \n\n4⃣ - \n\n5️⃣ЛЕК 655 *СМЕТНОЕ ДЕЛО*, ЗАХАРЕНКО З.Н. (15:40-17:15)'
SV_31__VT_p = 'Вторник (Под чертой) \n\n1⃣ ПЗ 452 **ХИМИЯ* ВОДЫ И МИКРОБИОЛОГИЯ*, Самусева Л.В. _(8:00-9:30)_ \n\n2⃣ ЛЕК 317 **ВОДОПОДГОТОВКА**, Горелая О.Н. (9:45-11:20) \n\n3⃣ ПЗ 153 *СТРОИТЕЛЬНАЯ МЕХАНИКА*, Яровая А.В. (11:30-13:05) \n\n4⃣ - \n\n5.ПЗ 134 *СМЕТНОЕ ДЕЛО*, ЗАХАРЕНКО З.Н. (15:40-17:15)'
SV_31__SR_n = 'Среда (Над чертой) \n\n1⃣ ЛЕК 1418 *ТОСВ*, Новикова О.К. _(8:00-9:30)_ \n\n2⃣ ПЗ 153 *ТОСВ*, Новикова О.К. (9:45-11:20) \n\n3⃣ ПЗ 561 *ВОДОПОДГОТОВКА*, Горелая О.Н. (11:30-13:05) \n\n4⃣ ВОЕННАЯ ПОДГОТОВКА \n\n5️⃣ВОЕННАЯ ПОДГОТОВКА'
SV_31__SR_p = 'Среда (Под чертой) \n\n1⃣ ЛЕК 1418 *ТОСВ*, Новикова О.К. _(8:00-9:30)_ \n\n2⃣ ПЗ 134 *ТОСВ*, Новикова О.К. (9:45-11:20) \n\n3⃣ ПЗ 561 *ВОДОПОДГОТОВКА*, Горелая О.Н. (11:30-13:05) \n\n4⃣ ВОЕННАЯ ПОДГОТОВКА \n\n5️⃣ВОЕННАЯ ПОДГОТОВКА'
SV_31__CT_n = 'Четверг (Над чертой) \n\n1⃣ (1) ЛАБ 155 *ЗАЩИТА НАСЕЛЕНИЯ ОТ ЧС*, Липская М.Н., \n\n (2) ЛАБ 154 *ВОДОПОДГОТОВКА*, Горелая О.Н. _(8:00-9:30)_ \n\n2⃣ ФИЗИЧЕСКАЯ КУЛЬТУРА (9:45-11:20) \n\n3⃣ ЛЕК 170 *ХИМИЯ*, Кудина Е.Ф. (11:30-13:05) \n\n4.ВОЕННАЯ ПОДГОТОВКА \n\n5️⃣ВОЕННАЯ ПОДГОТОВКА'
SV_31__CT_p = 'Четверг (Под чертой) \n\n1⃣ ЛЕК 266 **ВОДОПОДГОТОВКА**, Горелая О.Н. _(8:00-9:30)_\n\n2⃣ ФИЗИЧЕСКАЯ КУЛЬТУРА (9:45-11:20)\n\n3.(1)ЛАБ 452 *ХИМИЯ* ВОДЫ И МИКРОБИОЛОГИЯ, Самусева Л.В. \n (2)ЛАБ 155 ЗАЩИТА НАСЕЛЕНИЯ ОТ ЧС, Проневич И.И. (11:30-13:05) \n\n4⃣ ВОЕННАЯ ПОДГОТОВКА \n\n5️⃣ВОЕННАЯ ПОДГОТОВКА'
SV_31__PT_n = 'Пятница (Над чертой) \n\n1⃣ (1)ЛАБ 569 *ИНФОРМАЦИОННОЕ МОДЕЛИРОВАНИЕ*, Калашник Е.Г. \n (2)ЛАБ 552 ИНФОРМАЦИОННОЕ МОДЕЛИРОВАНИЕ, Шкурина Е.В. _(8:00-9:30)_ \n\n2⃣ ПЗ 289 ВОДОЗАБОРНЫЕ СООРУЖЕНИЯ, Вострова Р.Н. (9:45-11:20) \n\n3⃣ ПЗ 1313 БЕЛОРУССКИЙ ЯЗЫК, Курлович В.В. (11:30-13:05)'
SV_31__PT_p = 'Пятница (Под чертой) \n\n1⃣ (1)ЛАБ 569 *ИНФОРМАЦИОННОЕ МОДЕЛИРОВАНИЕ*, Калашник Е.Г. \n (2)ЛАБ 552 ИНФОРМАЦИОННОЕ МОДЕЛИРОВАНИЕ, Шкурина Е.В. _(8:00-9:30)_ \n\n2⃣ ПЗ 289 ВОДОЗАБОРНЫЕ СООРУЖЕНИЯ, Вострова Р.Н. (9:45-11:20) \n\n3⃣ ПЗ 1313 БЕЛОРУССКИЙ ЯЗЫК, Курлович В.В. (11:30-13:05)'
bot.polling(none_stop=True)
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Для начала уберите дублирование кода, например, там где создаются клавиатуры.
Если сделать функцию, что по одной кнопке вернет клавиатуру:
def create_one_button(**kwargs) -> types.InlineKeyboardMarkup:
button = types.InlineKeyboardButton(**kwargs)
keyboard = types.InlineKeyboardMarkup()
keyboard.add(button)
return keyboard
keyboard4 = create_one_button(text="Следующая неделя", callback_data="SV_31__PN_p") # Неделя ПН Над чертой
keyboard5 = create_one_button(text="Следующая неделя", callback_data="SV_31__PN_n") # Неделя ПН Под чертой
keyboard6 = create_one_button(text="Следующая неделя", callback_data="SV_31__VT_p") # Неделя ВТ Над чертой
keyboard7 = create_one_button(text="Следующая неделя", callback_data="SV_31__VT_n") # Неделя ВТ Под чертой
keyboard8 = create_one_button(text="Следующая неделя", callback_data="SV_31__SR_p") # Неделя СР Над чертой
keyboard9 = create_one_button(text="Следующая неделя", callback_data="SV_31__SR_n") # Неделя СР Под чертой
keyboard10 = create_one_button(text="Следующая неделя", callback_data="SV_31__CT_p") # Неделя ЧТ Над чертой
keyboard11 = create_one_button(text="Следующая неделя", callback_data="SV_31__CT_n") # Неделя ЧТ Под чертой
keyboard12 = create_one_button(text="Следующая неделя", callback_data="SV_31__PT_p") # Неделя ПТ Над чертой
keyboard13 = create_one_button(text="Следующая неделя", callback_data="SV_31__PT_n") # Неделя ПТ Под чертой
Далее можно сгруппировать данные для упрощения кода в answer:
SCHEDULE_SV_31 = {
'SV_31__PN_n': (SV_31__PN_n, keyboard4),
'SV_31__PN_p': (SV_31__PN_p, keyboard5),
'SV_31__VT_n': (SV_31__VT_n, keyboard6),
'SV_31__VT_p': (SV_31__VT_p, keyboard7),
'SV_31__SR_n': (SV_31__SR_n, keyboard8),
'SV_31__SR_p': (SV_31__SR_p, keyboard9),
'SV_31__CT_n': (SV_31__CT_n, keyboard10),
'SV_31__CT_p': (SV_31__CT_p, keyboard11),
'SV_31__PT_n': (SV_31__PT_n, keyboard12),
'SV_31__PT_p': (SV_31__PT_p, keyboard13),
}
...
@bot.callback_query_handler(func=lambda call: True)
def answer(call):
if call.data not in SCHEDULE_SV_31:
return
text, reply_markup = SCHEDULE_SV_31[call.data]
bot.send_message(call.message.chat.id, text, reply_markup=reply_markup, parse_mode='Markdown')