Python中的简单登录功能
Simple login function in Python
def login():
user = raw_input("Username: ")
passw = raw_input("Password: ")
f = open("users.txt", "r")
for line in f.readlines():
us, pw = line.strip().split("|")
if (user in us) and (passw in pw):
print "Login successful!"
return True
print "Wrong username/password"
return False
def menu():
#here's a menu that the user can access if he logged in.
def main():
login()
log = login()
if log == True:
menu()
而 users.txt 是:
john22|1234
max2|2211
jack6|1551
问题是,当我 运行 程序并输入正确的用户名和密码时,它会打印出 "Login successful!" 但它不会继续到 menu()。相反,它再次显示 "Username: " 和 "Password: "。但是,当我再次输入正确的用户名和密码(与 users.txt 相同或不同的一对)时,它进入 menu() 并且一切正常。
所以我的猜测是,出于某种原因,您必须输入正确的信息两次,而我不希望这样。
我到处搜索,但我无法弄清楚为什么会这样...
您调用 login()
函数两次。只有第二个使用 return 值,因此您可以删除第一个调用
def main():
login() # <--- Remove this one
log = login()
您可能希望考虑使用的是 getpass
。在您的密码字段中使用此选项而不是 raw_input
将阻止密码显示在屏幕上。
import getpass
...
def login():
...
passw = getpass.getpass("Password: ")
其余代码的行为相同,但在控制台上,输出如下所示:
Username: max2
Password:
Login successful!
请注意 "Password:" 行是空的,尽管输入了有效密码
这里的问题是您在 main
中调用了两次 login()
。要修复您的错误,只需删除第一个调用,因为甚至没有使用 return 。另外,我不确定它是否有意但是:
if (user in us) and (passw in pw):
将匹配 ('user', 'pass') 即使 (us, pw) 是 ('username', 'password')。请改用 ==
运算符。
至少,你应该考虑改变:
us, pw = line.strip().split("|")
收件人:
us, pw = line.strip().split("|", 1)
只分割一次,否则密码不能包含|
问题是调用了两个 login() 实例。
以下代码将重复登录直到正确为止:
def login():
user = raw_input("Username: ")
passw = raw_input("Password: ")
f = open("users.txt", "r")
for line in f.readlines():
us, pw = line.strip().split("|")
if (user in us) and (passw in pw):
print "Login successful!"
return True
print "Wrong username/password"
return False
def menu():
#here's a menu that the user can access if he logged in.
def main():
global True
while True:
True = True
log = login()
if log == True:
menu()
True = False
main()
def login():
user = raw_input("Username: ")
passw = raw_input("Password: ")
f = open("users.txt", "r")
for line in f.readlines():
us, pw = line.strip().split("|")
if (user in us) and (passw in pw):
print "Login successful!"
return True
print "Wrong username/password"
return False
def menu():
#here's a menu that the user can access if he logged in.
def main():
login()
log = login()
if log == True:
menu()
而 users.txt 是:
john22|1234
max2|2211
jack6|1551
问题是,当我 运行 程序并输入正确的用户名和密码时,它会打印出 "Login successful!" 但它不会继续到 menu()。相反,它再次显示 "Username: " 和 "Password: "。但是,当我再次输入正确的用户名和密码(与 users.txt 相同或不同的一对)时,它进入 menu() 并且一切正常。 所以我的猜测是,出于某种原因,您必须输入正确的信息两次,而我不希望这样。 我到处搜索,但我无法弄清楚为什么会这样...
您调用 login()
函数两次。只有第二个使用 return 值,因此您可以删除第一个调用
def main():
login() # <--- Remove this one
log = login()
您可能希望考虑使用的是 getpass
。在您的密码字段中使用此选项而不是 raw_input
将阻止密码显示在屏幕上。
import getpass
...
def login():
...
passw = getpass.getpass("Password: ")
其余代码的行为相同,但在控制台上,输出如下所示:
Username: max2
Password:
Login successful!
请注意 "Password:" 行是空的,尽管输入了有效密码
这里的问题是您在 main
中调用了两次 login()
。要修复您的错误,只需删除第一个调用,因为甚至没有使用 return 。另外,我不确定它是否有意但是:
if (user in us) and (passw in pw):
将匹配 ('user', 'pass') 即使 (us, pw) 是 ('username', 'password')。请改用 ==
运算符。
至少,你应该考虑改变:
us, pw = line.strip().split("|")
收件人:
us, pw = line.strip().split("|", 1)
只分割一次,否则密码不能包含|
问题是调用了两个 login() 实例。 以下代码将重复登录直到正确为止:
def login():
user = raw_input("Username: ")
passw = raw_input("Password: ")
f = open("users.txt", "r")
for line in f.readlines():
us, pw = line.strip().split("|")
if (user in us) and (passw in pw):
print "Login successful!"
return True
print "Wrong username/password"
return False
def menu():
#here's a menu that the user can access if he logged in.
def main():
global True
while True:
True = True
log = login()
if log == True:
menu()
True = False
main()