Задать вопрос
@unknowndeal

Не могу выстроить логику. Как отправить оставшиеся элементы?

Есть массив данных. Нужно отправить его ботом телеграм.
for i in response:
        text += f"{i['id']} | {i['name']} | {i['type']} \n"
        count += 1
        if count == 20:
            await message.answer(text)
            count = 0
            time.sleep(5)
            if count != 20:
                await message.answer(text)
                text = ""

отправляем 20 элементов - очищаем строчку, набираем еще. При описанной мной логике он отправляет сообщения по 20 штук, а если осталось, к примеру, 15 - он их не отправит. Как пофиксить? Не могу додумать...
Если просто добавить else то он не будет дожидаться набирания 20 элементов, а будет отправлять по-одному
  • Вопрос задан
  • 46 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Ну, стоит вынести это
if count != 20:
                await message.answer(text)
                text = ""

из условия, потому что строкой выше count стал равен нулю, нет таких моментов, когда это условие не выполнится.

А вообще, как вариант:

for i in response:
        text += f"{i['id']} | {i['name']} | {i['type']} \n"
        count += 1
        if count == 20:
            await message.answer(text)
            count = 0
            time.sleep(5)
            if count != 20:
                await message.answer(text)
                text = ""

if count != 0:
    await message.answer(text)


Потому что если получилось что кол-во элементов делится на 20 ровно, то count в конце цикла будет равен нулю, в противном случае, если элементов допустим 15, то count останется равным 15 (то бишь не равным нулю)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы