@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
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 (то бишь не равным нулю)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы