Почему код пропускает неправильные варианты и добавляет их в бд?
Бот проверяет сообщение от пользователя, ищет там группу из списка, перебирая каждую в списке test_list
. Если в сообщении от пользователя есть группа из списка, то он создает в базе данных database.db
запись с сообщение и группой. Если группа не указана в сообщении, то должно пропускаться, но в моем случае он создает записи со всеми группами, даже если группа не указана. Как решить эту проблему?
Код:
for event in longpool.listen():
if event.type == VkEventType.MESSAGE_NEW:
if event.to_me:
msg = event.text.lower()
id = event.user_id
send_some_msg(id, 'привет')
test_list = ['40ТЕСТ8381', '41ТЕСТ8381', '42ТЕСТ8381', '43ТЕСТ8381', '44ТЕСТ8381', '45ТЕСТ8381', '46ТЕСТ8381', '47ТЕСТ8381']
# checking if string contains list element
for i in test_list:
if msg.find(i) != 1:
conn = sqlite3.connect('database.db', check_same_thread=False)
cur = conn.cursor()
cur.execute('INSERT INTO adverts (message, study_group) VALUES (?, ?)', (msg, i))
conn.commit()
cur.close()
conn.close()
else:
print('-')
print(msg)
Ответы (1 шт):
Автор решения: evgen_dev
→ Ссылка
Метод string.find(needle) возвращает -1, в случае, если подстрока не найдена.
txt = "Hello, welcome to my world."
x = txt.find("text")
print(x) #-1
Вы же сравниваете результат с положительной единицей и условие всегда будет True, когда подстрока не найдена (или найдена в позиции 1).
Т.е. правильно будет так:
if msg.find(i) != -1:
conn = sqlite3.connect('database.db', check_same_thread=False)
cur = conn.cursor()
cur.execute('INSERT INTO adverts (message, study_group) VALUES (?, ?)', (msg, i))
conn.commit()
cur.close()
conn.close()
else:
print('-')