Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
intellektyalnye-technologii-e-learning
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Буряков Иван Олегович
intellektyalnye-technologii-e-learning
Commits
cd757e48
Commit
cd757e48
authored
Mar 23, 2026
by
Буряков Иван Олегович
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add new file
parent
1cff2394
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
111 additions
and
0 deletions
+111
-0
equation_bot.py
equation_bot.py
+111
-0
No files found.
equation_bot.py
0 → 100644
View file @
cd757e48
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment