Изучай документацию, а не "уроки" с ютуба.
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
...
func принимает функцию, которая должна по параметру call (сведения о нажатии кнопки) определить, будет ли данный обработчик обрабатывать это нажатие. Соответственно, функция вида lambda call: True всегда будет отвечать "да, я буду обабатывать!".
При этом бот вызовет первый "согласившийся" обработчик, и ТОЛЬКО его. Как следствие, наличие одного обработчика с func=lambda call: True блокирует все нижележащие обработчики, так как этот "всеядный" обработчик будет брать на себя все нажатия кнопок (независимо от того, понимает ли он их). До остальных обработчиков дело просто не дойдёт.
Чтобы это разрулить, надо прописывать не lambda call: True, а функцию, которая реально будет различать, какой набор кнопок у пользователя, и какая кнопка была нажата. Самый простой способ это сделать - сделать этакую иерархию в строке call.data. Например:
9a.tomorrow
9a.week
9a.today
10a.tomorrow
10a.week
10a.today
Тогда ты сможешь прописать обработчики вида:
@bot.callback_query_handler(func=lambda call: call.data.startswith('10a.'))
def callback_inline_for_10a(call):
... # тут обрабатываем кнопки для 10А
@bot.callback_query_handler(func=lambda call: call.data.startswith('9a.'))
def callback_inline_for_9a(call):
... # тут обрабатываем кнопки для 9А
Ну а создание кнопок, соответственно, будет иметь вид
item1 = types.InlineKeyboardButton("Домашнее задание на завтра", callback_data='10a.tomorrow')