Задать вопрос
  • Как вывести итерированый словарь в сообщении в телеграме?

    Gryandr
    @Gryandr Автор вопроса
    serhiops, Всё просто))) недостаточно знаний, поэтому обратился за помощью.
    Спасибо за подсказку. Может это и неправильный способ, но если сделать...
    out = iter(today.items())
    и почистить строку методом replace от лишних символов, получится желаемый вид.
  • Как вывести итерированый словарь в сообщении в телеграме?

    Gryandr
    @Gryandr Автор вопроса
    Вы имели в виду так?
    today = {"Фаза 2": 20, "Фаза 1": 10, "Фаза 3": 30, "Фаза 4": 40}
    
    out = iter(today)
    a = next(out)
    b = next(out)
    c = next(out)
    d = next(out)
    print(a, b, c, d)

    но итерируются только ключи((( нужны значения
  • Бот не считает формулу. Как исправить?

    Gryandr
    @Gryandr Автор вопроса
    Алан Гибизов, понял))) Спасибо за помощь и терпение!
  • Бот не считает формулу. Как исправить?

    Gryandr
    @Gryandr Автор вопроса
    Спасибо за вашу помощь! Использовал ваше решение и бот заработал, считает. Но образовалась пролемка)))
    Бот принимает только целые числа потому что задано isdigital
    Пробовал заменить на isfloat из модуля fastnumbers ... не получилось

    @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 = round(h / 3 * (4000 + square + y))
                level = round(v / 15000 * 100)
                await bot.send_message(message.from_user.id,
                                       str(f"БАССЕЙН №1 \U0001F536\n"
                                           f"Количество: " + str(v) + " м3\n"
                                           f"Глубина: " + str(h) + " м\n"
                                           f"Наполнение: " + str(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, "Попробуй еще...")
  • Бот не считает формулу. Как исправить?

    Gryandr
    @Gryandr Автор вопроса
    Не ругайте сильно. Пробовал разные варианты.
    Можно упростить и забрать у пользователя право выбора, попросив ввести данные двух бассейнов через пробел и задать числа так:
    def lakes(message):
        a, b = message.text.split()
        b1 = int(a)
        b2 = int(b)

    Но хотелось бы сохранить кнопки и если пользователь выберет Бассейн №1, принять его значение для формулы.