Чтобы упростить код, я внес некоторые изменения, не влияющие на результат.
def login():
username = "test"
password = "test"
database=open('database.txt')
for line in database.readlines():
usr, pas = line.strip().split("-")
if (username in usr) and (password in pas):
print ("welcome")
return True
print ("error")
return False
login()
Чтобы проверить полный результат метода чтения строк, я распечатал списки, считанные из файла.
def login():
username = "test"
password = "test"
database=open('database.txt')
print (database.readlines())
for line in database.readlines():
print (line)
usr, pas = line.strip().split("-")
print (usr,pas)
if (username in usr) and (password in pas):
print ("welcome")
return True
print ("error")
return False
login()
Выход:
['abc-123 \n', 'test-test \n', 'user-pass']
Следовательно, ошибка связана не с тем, что database.readlines() не работала, а с кодами после print (database.readlines()).
И database.readlines() становится []!
Это связано с тем, что файловый курсор указывал на конец файла после того, как мы впервые назначаем метод readlines. Поэтому мы не можем читать больше символов, пока не изменим файловый курсор на начало файла.
И ваша проблема заключается в возвращении после каждого завершения предложения if-case! После изменения отступа предложения return false, который будет назначен, если имя пользователя и пароль не совпадают, проблема будет решена!
Теперь мы просто модифицируем код:
def login():
username = "test"
password = "test"
database=open('database.txt')
print (database.readlines())
print (database.readlines())
for line in database.readlines():
print (line)
usr, pas = line.strip().split("-")
print (usr,pas)
if (username in usr) and (password in pas):
print ("welcome")
return True
print ("error")
return False
login()
person
Saige Zhang
schedule
05.08.2018
return True
из конструкцииif
. Также используйте генераторы для чтения из файла, так как это более эффективно! - person Swadhikar   schedule 05.08.2018