我正试图让python完整读取我的.txt文件,以便确定用户名/密码的有效性...但是它似乎只读取第一行,而忽略其余行。 .txt上只有第一个用户名/密码将授予访问权限。
def login():
username = textentry.get()
password = textentry2.get()
database=open('database.txt')
for line in database.readlines():
usr, pas = line.strip().split("-")
if (username in usr) and (password in pas):
credentialcheck.insert(END, "welcome")
return True
credentialcheck.insert(END, "username or password incorrect")
return False
这一切都经过了:
def accessgranted():
credentialcheck.delete(0.0, END)
userandpass=login()
if userandpass == True: quit()
.txt文件:
abc-123
test-test
user-pass
答案 0 :(得分:1)
因为您要返回“ if”语句的每个分支。在if条件中返回True似乎还可以,但是请从循环中删除另一个return语句。如果循环结束而文件中的任何条目均未返回True,则表示输入的凭据无效。然后您可以返回False。
答案 1 :(得分:0)
如果第一行不匹配,则通过立即返回False来短路循环。取消缩进这些行,以便在循环完成后调用它。 in
检查也不正确,我可以使用用户名= ab和pw = 1成功登录,尽管这不是完整的用户名或密码。
def login():
username = textentry.get()
password = textentry2.get()
database=open('database.txt')
for line in database.readlines():
usr, pas = line.strip().split("-")
if (username == usr) and (password == pas):
credentialcheck.insert(END, "welcome")
return True
credentialcheck.insert(END, "username or password incorrect")
return False
答案 2 :(得分:0)
为了简化代码,我做了一些修改而不影响结果。
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()无法正常工作,是因为打印后的代码(database.readlines())。
>database.readlines()成为 [] !
这是因为在第一次分配readlines方法之后,文件光标指向文件的末尾。因此,除非将文件光标更改为文件的开头,否则我们将无法再读取任何字符。
您的问题是每次if-case语句结束后返回的结果!修改您的返回假句子的缩进后,如果用户名和密码无法匹配,则将分配该缩进,问题将得到解决!
现在我们只需修改代码:
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()