"is" - неправильный способ сравнения строк в Python.
Замените эту строку:
if x is usernames[i] and y is passwords[i]:
на
if x == usernames[i] and y == passwords[i]:
И вы должны получитьмимо текущего неправильного поведения (хотя дизайн имеет достаточно проблем, у вас могут быть другие проблемы)
что? Да.Оператор is
просто приводит к True
, когда оба операнда являются одним и тем же объектом.Если в теле программы есть строка, жестко запрограммированная, существует специфическая для реализации оптимизация, которая интернализует строку, и есть вероятность, что она даст True
по сравнению с использованием is
- но чтение затем из базы данныхне будет вызывать такое поведение.
Оператор ==
, с другой стороны, сравнивает фактическое содержимое строки и является правильным способом сравнения строк или любых других объектов на равенство.
другие вопросы? Много.Чтобы начать с того факта, что вы читаете все содержимое базы данных в двух несвязанных с поиском, некоррелированных структурах памяти, и с этого момента прибегайте к методу поиска, который действительно очень «ручной» по сравнению с поиском в Python или SQLite.и сравните возможности.
То есть вы вводите все логины и пароли БД в два отдельных списка.Вы можете просто выполнить запрос по логину внутри login_check
.Если запрос не дал результатов, у вас неверный логин.Если он возвращает один результат, вы продолжаете сравнивать пароль в той же строке.Это достаточно очевидный дизайн для этого приложения.
Изучение безопасности с самого начала Итак, вы изучаете больше вещей и создаете приложения, которые имеют пользовательский интерфейс и работают с базами данных - не нужноне заботиться о безопасности и неприкосновенности частной жизни с правильного пути с сегодняшнего дня: если вы запишите простой пароль в свою базу данных, если она будет просочиться, это станет серьезной неудачей для вас и бременем для всех ваших пользователей - (потому что они могутиспользовать те же пароли в другом месте), поэтому всякий раз, когда вы сохраняете пароль, не торопитесь хранить его с использованием одностороннего криптографического алгоритма, при сравнении паролей вы запускаете тот же односторонний алгоритм для введенного пароля и сравниваете его.значение с тем, что хранится в БД.Если неудачная покупка забирает ваши данные из БД, нет способа вернуть зашифрованные пароли обратно в открытый текст.В Python есть хорошие односторонние криптоалгоритмы в модуле stdlib hashlib
.Взгляни туда.