Python:匹配用户名和密码;如果密码不正确则提示输入密码;

发布于 2024-11-28 08:14:20 字数 3823 浏览 4 评论 0原文

我正在尝试创建一个登录名。

我不知道如何创建/导入用户名和密码库;我目前正在研究寻找答案,但无论如何都问了。

  • 将用户名与密码进行匹配(部分解决;需要添加多个具有匹配密码的用户名)。

  • 如果密码不正确,如何创建循环?如果输入的密码不正确,则需要再次提示用户输入密码。

如何将循环限制为一定次数的密码尝试。

以下是我尝试过的:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蒲公英的约定 2024-12-05 08:14:20

您想要的是 while 语句。

不要像这样嵌套 if 语句:

if password != '123':
    return 'please try again'
    password = raw_input('password:')
    if password != '123':
        return 'please try again'
elif password == '123':
    return 'access granted'

您可以这样做:

while password != '123':
    print 'please try again' # You have to change the 'return' to 'print' here
    password = raw_input('password:')
return 'access granted'

这将继续提示用户输入密码,直到输入正确的密码。如果您想更熟悉 while 语句,我建议您查看一些教程,例如这个< /a>.
请注意,如果您返回某些内容,该函数将在那里退出,因此永远不会提示用户输入密码。在上面的代码中,我将返回更改为打印语句。

What you want is the while statement.

Instead of nesting if-statements like this:

if password != '123':
    return 'please try again'
    password = raw_input('password:')
    if password != '123':
        return 'please try again'
elif password == '123':
    return 'access granted'

You can do this:

while password != '123':
    print 'please try again' # You have to change the 'return' to 'print' here
    password = raw_input('password:')
return 'access granted'

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.

夏末的微笑 2024-12-05 08:14:20

这是另一个解决方案,其中提取了用户名和密码,并提供了一个异常处理程序,以防有人试图中止输入。

另外,仅供参考,最好将用户名和密码放在一起,以免黑客知道什么是有效用户名,什么不是有效用户名。

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()

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.

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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文