Телеграм бот не принимает вещественные числа.

Gryandr

Новичок
Пользователь
Июл 20, 2022
3
0
1
Телеграм бот принимает от пользователя данные и делает расчеты по формулам.
Бот работает только с целыми числами.
Как сделать так, чтобы бот принимал целые и вещественные числа?
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)
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
929
207
43
20
Москва
в строках вида
a = int(message.text)
заменить int на float
 

Gryandr

Новичок
Пользователь
Июл 20, 2022
3
0
1
в строках вида
a = int(message.text)
заменить int на float
isdigit не принимает точку, даже если поменять на float. Нашел решение: вводить целым числом но не в метрах 1,1 м, а в сантиметрах 110 см)))
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
929
207
43
20
Москва
isdigit не принимает точку, даже если поменять на float. Нашел решение: вводить целым числом но не в метрах 1,1 м, а в сантиметрах 110 см)))
можно перед проверкой убрать одну точку, тогда еслито был float проверка пройдёт
 

Форум IT Специалистов