Add new file

parent 1cff2394
import telebot
from telebot import types
import re
TOKEN = 'ТОКЕН_ОТ_BOTFATHER'
bot = telebot.TeleBot(TOKEN)
# Приветственное сообщение и справка
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add('Решить уравнение', 'Как это работает?', 'Примеры')
bot.reply_to(message,
"👋 Привет! Я — образовательный бот-решатель линейных уравнений.\n\n"
"Я решаю уравнения вида **ax + b = 0** и объясняю каждое решение шаг за шагом.\n\n"
"Просто отправь уравнение, например:\n"
"`2x + 5 = 0`\n"
"`-3x = 12`\n"
"`0.5x - 1.5 = 0`\n\n"
"Выбери кнопку или пиши уравнение прямо сюда!",
parse_mode='Markdown', reply_markup=markup)
# Обработка кнопок
@bot.message_handler(func=lambda m: m.text == 'Как это работает?')
def how_it_works(message):
bot.reply_to(message,
"🔍 **Как бот решает уравнение ax + b = 0:**\n\n"
"1. Приводим к виду ax + b = 0\n"
"2. Если a ≠ 0 → x = -b / a\n"
"3. Если a = 0 и b = 0 → любое x (бесконечно много решений)\n"
"4. Если a = 0 и b ≠ 0 → решений нет\n\n"
"Бот автоматически распознаёт коэффициенты a и b, даже если они дробные или отрицательные.",
parse_mode='Markdown')
@bot.message_handler(func=lambda m: m.text == 'Примеры')
def examples(message):
bot.reply_to(message,
"📌 **Примеры уравнений, которые я понимаю:**\n\n"
"• 5x + 10 = 0\n"
"• -2x = 8\n"
"• 0.25x - 1.75 = 0\n"
"• 0x + 7 = 0\n"
"• 3x + 0 = 0\n\n"
"Просто скопируй и отправь любое из них!", parse_mode='Markdown')
@bot.message_handler(func=lambda m: m.text == 'Решить уравнение')
def ask_equation(message):
bot.reply_to(message, "Отправь мне линейное уравнение в виде `ax + b = 0` (или просто `ax + b = 0`):")
# Основная логика: распознавание и решение уравнения
@bot.message_handler(func=lambda message: True)
def solve_equation(message):
text = message.text.strip().lower().replace(' ', '')
# Регулярное выражение для парсинга ax + b = 0 (учитывает знаки, дроби, отсутствие коэффициентов)
pattern = r'([+-]?\d*\.?\d*)x([+-]?\d*\.?\d*)?=0'
match = re.search(pattern, text)
if not match:
bot.reply_to(message,
"❌ Не удалось распознать уравнение.\n\n"
"Пришли в формате `ax + b = 0`, например `2x + 5 = 0` или `-3x=12`.\n"
"Используй цифры, точку для десятичных и знаки +/-.",
parse_mode='Markdown')
return
a_str, b_str = match.groups()
# Обработка a (коэффициент при x)
if a_str in ('', '+', '-'):
a = 1.0 if a_str in ('', '+') else -1.0
else:
try:
a = float(a_str)
except ValueError:
a = 1.0
# Обработка b
if b_str is None or b_str == '':
b = 0.0
else:
try:
b = float(b_str)
except ValueError:
b = 0.0
# Образовательный вывод решения
response = f"✅ **Уравнение:** {text}\n\n"
response += f"**Коэффициенты:** a = {a}, b = {b}\n\n"
if abs(a) < 1e-10: # a ≈ 0
if abs(b) < 1e-10:
response += "🔄 **Решение:** любое число x (бесконечно много решений)\n"
response += "Это уравнение вида 0·x + 0 = 0 — тождество."
else:
response += "❌ **Решений нет**\n"
response += "Уравнение вида 0·x + b = 0 при b ≠ 0 противоречиво."
else:
x = -b / a
response += f"**Шаг 1:** Переносим b: ax = -b\n"
response += f"**Шаг 2:** Делим на a: x = -b / a\n"
response += f"**Ответ:** x = {x:.6f} (округлено до 6 знаков)\n\n"
response += "💡 Совет: всегда проверяй подстановкой — подставь x обратно в исходное уравнение."
bot.reply_to(message, response, parse_mode='Markdown')
# Запуск бота
print("Бот запущен...")
bot.infinity_polling()
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment