Python:匹配用户名和密码;如果密码不正确则提示输入密码;
我正在尝试创建一个登录名。
我不知道如何创建/导入用户名和密码库;我目前正在研究寻找答案,但无论如何都问了。
将用户名与密码进行匹配(部分解决;需要添加多个具有匹配密码的用户名)。
如果密码不正确,如何创建循环?如果输入的密码不正确,则需要再次提示用户输入密码。
如何将循环限制为一定次数的密码尝试。
以下是我尝试过的:
def check_password(user, password):
""" Return True if the user/pass combo is valid and False otherwise. """
# Code to lookup users and passwords goes here. Since the question
# was only about how to do a while loop, we have hardcoded usernames
# and passwords.
return user == "pi" and password == "123"
def login():
""" Prompt for username and password, repeatedly until it works.
Return True only if successful.
"""
try:
while True:
username = raw_input('username:')
password = raw_input('password:')
if check_password(username, password):
break
else:
print "Please try again"
print "Access granted"
return True
except:
return False
用于测试:login()
。
这修复了由于使用 return
而不是 print
导致密码错误时缺少循环提示的问题;和 if
而不是 while
。
def login():
#create login that knows all available user names and match to password ; if password is incorect returns try again and propmts for password again#
username = raw_input('username:')
if username !='pi':
#here is where I would need to import library of users and only accept those usernames; needs to be like 'pi' or 'bob' or 'tim'etc.
print'user not found'
username = raw_input('username')
password = raw_input('password:')
#how to match password with user? store in library ?
while password != '123':
print 'please try again' # You have to change the 'return' to 'print' here
password = raw_input('password')
return 'access granted'
#basically need to create loop saying 'try again' and prompting for password again; maybe smarter to ask limited number of
#times before returning 'you have reached limit of attempts#
if password == '123':
#again matching of passwords and users is required somehow
return 'access granted'
>>> login()
username:wronguser
user not found
usernamepi
password:wrongpass
please try again
password123
'access granted'
>>>
感谢 Merigrim,更新之前的第一次尝试:
def login():
# Create login that knows all available user names and match to password;
# if password is incorect returns try again and propmts for password again#
username = raw_input('username:')
if username !='pi':
# Here is where I would need to import library of users and only
# accept those usernames; needs to be like 'pi' or 'bob' or 'tim'etc.
return 'user not found'
password = raw_input('password:')
# How to match password with user? store in library?
if password != '123':
return 'please try again'
password = raw_input('password:')
if password != '123':
return 'please try again'
# Basically need to create loop saying 'try again' and prompting
# for password again; maybe smarter to ask limited number of
# times before returning 'you have reached limit of attempts
elif password == '123':
# Again matching of passwords and users is required somehow
return 'access granted'
这是它当前的工作原理:
>>> login()
username:pi
password:123
'access granted'
>>> login()
username:pi
password:wrongpass
'please try again'
我需要创建循环以再次提示输入密码。
I am trying to create a login.
I am not sure how to create/import a library of usernames and passwords; I am researching to find an answer at the moment but asked either way.
Match usernames with passwords (partially solved; need to add multiple usernames with matching passwords).
How to create a loop if password is incorrect? If incorrect password is entered the user needs to be prompted again to enter the password.
How to limit loop to certain number of attempts for password.
Below is what I have tried:
def check_password(user, password):
""" Return True if the user/pass combo is valid and False otherwise. """
# Code to lookup users and passwords goes here. Since the question
# was only about how to do a while loop, we have hardcoded usernames
# and passwords.
return user == "pi" and password == "123"
def login():
""" Prompt for username and password, repeatedly until it works.
Return True only if successful.
"""
try:
while True:
username = raw_input('username:')
password = raw_input('password:')
if check_password(username, password):
break
else:
print "Please try again"
print "Access granted"
return True
except:
return False
For testing: login()
.
This fixed lack of loop prompting if wrong password due to using return
instead of print
; and if
instead of while
.
def login():
#create login that knows all available user names and match to password ; if password is incorect returns try again and propmts for password again#
username = raw_input('username:')
if username !='pi':
#here is where I would need to import library of users and only accept those usernames; needs to be like 'pi' or 'bob' or 'tim'etc.
print'user not found'
username = raw_input('username')
password = raw_input('password:')
#how to match password with user? store in library ?
while password != '123':
print 'please try again' # You have to change the 'return' to 'print' here
password = raw_input('password')
return 'access granted'
#basically need to create loop saying 'try again' and prompting for password again; maybe smarter to ask limited number of
#times before returning 'you have reached limit of attempts#
if password == '123':
#again matching of passwords and users is required somehow
return 'access granted'
>>> login()
username:wronguser
user not found
usernamepi
password:wrongpass
please try again
password123
'access granted'
>>>
First attempt before updating thanks to Merigrim:
def login():
# Create login that knows all available user names and match to password;
# if password is incorect returns try again and propmts for password again#
username = raw_input('username:')
if username !='pi':
# Here is where I would need to import library of users and only
# accept those usernames; needs to be like 'pi' or 'bob' or 'tim'etc.
return 'user not found'
password = raw_input('password:')
# How to match password with user? store in library?
if password != '123':
return 'please try again'
password = raw_input('password:')
if password != '123':
return 'please try again'
# Basically need to create loop saying 'try again' and prompting
# for password again; maybe smarter to ask limited number of
# times before returning 'you have reached limit of attempts
elif password == '123':
# Again matching of passwords and users is required somehow
return 'access granted'
Here is how it currently works:
>>> login()
username:pi
password:123
'access granted'
>>> login()
username:pi
password:wrongpass
'please try again'
I need to create loop to prompt again for password.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您想要的是 while 语句。
不要像这样嵌套 if 语句:
您可以这样做:
这将继续提示用户输入密码,直到输入正确的密码。如果您想更熟悉 while 语句,我建议您查看一些教程,例如这个< /a>.
请注意,如果您返回某些内容,该函数将在那里退出,因此永远不会提示用户输入密码。在上面的代码中,我将返回更改为打印语句。
What you want is the while statement.
Instead of nesting if-statements like this:
You can do this:
This will continue prompting the user for a password until the right password is entered. If you want to become more familiar with the while statement, I suggest checking out some tutorials, like this one.
Please note that if you return something the function will exit there, so the user will never be prompted for a password. In the code above I changed the return to a print statement instead.
这是另一个解决方案,其中提取了用户名和密码,并提供了一个异常处理程序,以防有人试图中止输入。
另外,仅供参考,最好将用户名和密码放在一起,以免黑客知道什么是有效用户名,什么不是有效用户名。
Here's another solution with the user name and password factored out, and an exception handler in case someone tries to abort the input.
Also, FYI it is best to take the user and password together so as not to let crackers know what is and is not a valid username.