@heshhe

Как улучшить обработчик условий?

Есть один бот, написан с использованием библиотеки vkbottle
Бот по команде выдает массив строк. Количество строк от 0 до +50
На данный момент есть обработчик для 5 строк
Помогите разобраться - можно ли написать условие и вывод таким образом, что бы он зависел от общего кол-ва строк в массиве и что б это не выглядело как +50 elif

@bot.on.message(text=comm)
async def wrapper(ans: Message):
#функция слушает сообщения и отвечает на них, если текст ранее отправленного сообщения входит в 
# список команд comm
	try: 
#подключение к базе 
		conn = sqlite3.connect("DBNAME")
		cursor = conn.cursor()
		cursor.execute("ЗАПРОС ДАННЫХ ИЗ БАЗЫ" )
		data = cursor.fetchall()
		conn.commit()
		conn.close()

		if len(data) == 0:
#Проверка нулевого значения ans - сообщение пользователю, туда можно передавать только str 
			await ans("В базе пока нет таких данных :С")
		else:
#Функции которые забирают из массива нужное кол-во строк 
			def variant_one(v):
#Одну строку, с тремя ее значениями
				return data[v][0]+'\n'+ data[v][1]+' '+ data[v][2] +'\n'+ data[v][3]
			def variant_two(vtw,vtwo):
#Две строки 
				return variant_one(vtw) +'\n\n'+ variant_one(vtwo)
			def variant_three(vt,vto,vtt):
#Три
				return data[vt][0]+'\n'+ data[vt][1]+' '+ data[vt][2] +'\n'+ data[vt][3]+'\n\n'+ \
					  data[vto][0]+'\n'+ data[vto][1]+' '+ data[vto][2] +'\n'+ data[vto][3]+'\n\n'+ \
					  data[vtt][0]+'\n'+ data[vtt][1]+' '+ data[vtt][2] +'\n'+ data[vtt][3] 
#И в зависимости от их  кол-ва в массиве  выводят сообщение с нужным набором
			if len(data) == 1:
				await ans(variant_one(0))
			elif len(data) == 2:
				await ans(variant_two(0,1))
			elif len(data) == 3:
				await ans(variant_three(0,1,2))
			elif len(data) == 4:
				await ans(variant_three(0,1,2)+'\n\n'+ variant_one(3))
			elif len(data) == 5:
				await ans(variant_three(0,1,2)+'\n\n'+ variant_two(3,4))
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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