Телеграм бот принимает от пользователя данные и делает расчеты по формулам.
Бот работает только с целыми числами.
Как сделать так, чтобы бот принимал целые и вещественные числа?
Бот работает только с целыми числами.
Как сделать так, чтобы бот принимал целые и вещественные числа?
Python:
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from config import token
from math import sqrt
bot = Bot(token)
dp = Dispatcher(bot)
lake_number = 0
async def on_startup(_):
print('Бот онлайн.')
async def is_digit(string):
if string.isdigit():
return True
else:
try:
float(string)
return True
except ValueError:
return False
'''****КНОПКИ БАССЕЙНОВ***'''
@dp.message_handler(commands=['start', 'help'])
async def command_start(message : types.Message):
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
item1=types.KeyboardButton("Бассейн №1")
item2=types.KeyboardButton("Бассейн №2")
markup.add(item1)
markup.add(item2)
await bot.send_message(message.from_user.id, 'Привет! Какой бассейн меряем?', reply_markup=markup)
@dp.message_handler()
async def lake(message: types.Message):
global lake_number
if message.text == 'Бассейн №1':
await bot.send_message(message.from_user.id, 'Введи растояние до воды №1.')
lake_number = 1
if message.text == 'Бассейн №2':
await bot.send_message(message.from_user.id, 'Введи растояние до воды №2.')
lake_number = 2
if bool(lake_number) and message.text.isdigit():
b = int(message.text)
if lake_number == 1:
c = b * 0.52
square = (95 - c * 2) * (50 - c * 2)
h = (6 - b) * 0.7
y = sqrt(4000 * square)
v = (h / 3 * (4000 + square + y))
level = (v / 15000 * 100)
await bot.send_message(message.from_user.id,
str(f"БАССЕЙН №1 \U0001F536\n"
f"Количество: " + str"{:a}".format(v) + " м3\n"
f"Глубина: " + str"{:b}".format(h) + " м\n"
f"Наполнение: " + str"{:a}".format(level) + " %"))
if lake_number == 2:
h2 = (7 - b) * 0.7
s2 = (90 - (b * 0.52)) * (100 - (b * 0.52)) / 2
n = sqrt(2500 * s2)
s1 = 2500
g = s1 + n + s2
v2 = round((h2 / 3) * g)
level2 = round(v2 / 14000 * 100)
await bot.send_message(message.from_user.id,
str(f"БАССЕЙН №2 \U0001F53A\n"
f"Количество: " + str(v2) + " м3\n"
f"Глубина: " + str(h2) + " м\n"
f"Наполнение: " + str(level2) + " %"))
lake_number = 0
await bot.send_message(message.from_user.id, "Попробуй еще...")
executor.start_polling(dp, on_startup=on_startup)