Мой вывод показывает только неправильно, хотя это правильно - PullRequest
0 голосов
/ 10 июня 2018

Я не понимаю, почему он отображает только неправильно, он отображает только последнюю строку, когда работал, когда он использовал имя пользователя и пароль в сценарии?

def login():

 for username in range(3):
   username = input("Enter your username:")
   password = input("Enter your password:")


   d="dev luhar"
   k="kyle patel"
   s="shiv borhara"

   f=open("bob.txt")
   lines=f.readlines()

   if username == lines[0] and password == lines[1]:
        print("welcome to soar valley",d)
        break

   if username == lines[2] and password ==lines[3]:
        print("welcome to soar valley",s)
        break

   if username == lines[4] and password ==lines[5]:
        print("welcome to soar valley",k)
        break

   if username or password != lines[0] or lines[1] or lines[2]or lines[3]or
   lines[4] or lines[5]:
        print("wrong try again")


login()

1 Ответ

0 голосов
/ 10 июня 2018

Вы неправильно использовали оператор 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 для создания пары имя пользователя-пароль.

...