Проблема в том, что в функции calc вы не преобразовываете входные данные в числа. Вместо этого вы сохраняете введенное пользователем значение как строку. Попробуйте преобразовать введенные значения в числа с помощью int() перед сохранением их в переменные num1 и num2, как в примере ниже:
@bot.message_handler(commands=["calc"])
def calc(message):
bot.send_message(message.chat.id, "1 число: ")
bot.register_next_step_handler(message, numa1)
def numa1(message):
global num1
num1 = int(message.text)
bot.send_message(message.chat.id, "2 число: ")
bot.register_next_step_handler(message, numa2)
def numa2(message):
global num2
num2 = int(message.text)
bot.send_message(message.chat.id, "Выберите операцию: сложение, вычитание, деление или умножение")
bot.register_next_step_handler(message, action)
def action(message):
global ans
if message.text == 'сложение':
ans = num1 + num2
elif message.text == 'вычитание':
ans = num1 - num2
elif message.text == 'деление':
ans = num1 / num2
elif message.text == 'умножение':
ans = num1 * num2
else:
ans = "Некорректная операция"
bot.send_message(message.chat.id, f"Ответ: {ans}")
Сделал ИИ (
https://habab.ru/pomoshchnik-v-napisanie-koda-na-python/ )