Вы неправильно использовали оператор or
.
if username or password != lines[0] or lines[1] or lines[2]or lines[3]or
lines[4] or lines[5]:
Эта строка не выполняется так, как вы ожидали.
В Python 3.7документация or
,
следующие значения интерпретируются как ложные: False, None, числовой ноль всех типов и пустые строки и контейнеры (включая строки, кортежи, списки, словари, наборы и морозенцы).Все остальные значения интерпретируются как истина.
Таким образом, непустая строка всегда интерпретируется как True
, что означает, что ваша целевая строка может быть упрощена при предполагаемых условиях (имя пользователя и пароль не являютсяпуст, а файл "bob.txt" содержит не менее 6 непустых строк в начале):
if True or True != True or True or True or True or
True or True:
, которые становятся всегда истинными.И это именно то, чего вы не ожидали.
Для вашей ситуации вы можете попробовать ключевое слово not in
:
if username not in lines[0:5] and password not in lines[0:5]:
Лучше использовать dict
для создания пары имя пользователя-пароль.