【问题标题】:Need help defining a list without changing the value it already has需要帮助定义列表而不更改它已有的值
【发布时间】:2020-02-22 22:51:28
【问题描述】:

好的,我对 python 还很陌生,我想看看我是否可以制作一个只使用用户名和密码的简单登录/注册系统。我在代码的开头添加了这个,所以每次我想测试某些东西时都不必手动重新启动它:

loop = True
while loop == True:

然后,我创建了两个名为“accountUsernames”和“accountPasswords”的列表,其中只有几个随机用户名和密码。这个想法是每个帐户的密码和用户名索引都相同,并且代码将检查用户在登录时输入的用户名和密码是否具有相同的索引。当我开始编写寄存器系统的代码时,我意识到我有点卡住了。我正在使用附加功能将用户输入的用户名和密码添加到前面提到的列表中,但是当它这样做时,代码将循环回到开头,因为它已经结束,这意味着列表也将更改为他们的以前的状态。我想知道是否有一种方法可以在开始时定义这些列表而不给它们任何值,或者更改它从前一个循环中已有的值。完整代码如下:

loop = True
while loop == True:
    accountUsernames = ['a', '1']
    accountPasswords = ['b', '2']
    lr = input('Would you like to login or register?\n')
    if lr.lower() == 'login':
        loginUsername = input('Please enter your username.\n')
        loginPassword = input('Please enter your password.\n')
        if loginUsername in accountUsernames:
            loginIndex = accountUsernames.index(loginUsername)
            if accountPasswords[loginIndex] == loginPassword:
                print('You have successfully logged in!')
            else:
                print('Invalid username or password. Please try again.')
        else:
            print('Invalid username or password. Please try again.')
    elif lr.lower() == 'register':
        registerUsername = str(input('Please enter a username.\n'))
        registerPassword = str(input('Please enter a password.\n'))
        registerPasswordConfirmation = str(input('Please confirm your password.\n'))
        if registerUsername in accountUsernames:
            print('That username is already taken. Please try again.')
        elif registerPassword != registerPasswordConfirmation:
            print('These passwords do not match. Please try again.')
        else:
            accountUsernames.append(registerUsername)
            accountPasswords.append(registerPassword)
            print('You have successfully registered! You can now log in.')

我知道它可能有很多明显的问题,但正如我所说,我对 python 还很陌生。另外,对不起,如果我过度/解释了这个问题。非常感谢您的帮助。

【问题讨论】:

  • 我永远不会期望我的密码会以纯文本形式保存很长时间,即使是在内存中也是如此。任何实现与存储密码信息以进行验证有关的任何人,请散列密码。

标签: python arrays python-3.x list defined


【解决方案1】:

我不太明白这个问题,但是你为什么不在循环开始之前定义accountUsernamesaccountPasswords,像这样:

accountUsernames=[]
accountPasswords=[]
while loop:
   #insert loop code here

您应该实施的另一个建议是使用字典而不是拥有两个列表。

userData={}
def addUser(username, password):
    global userData
    userData[username]=password

def checkUser(username,password):
    global userData
    if username in userData:
        if password==userData[username]:
            return True
    return False

loop=True
while loop:
    #insert code

【讨论】:

    【解决方案2】:

    只需将 accountUsernamesaccountPasswords 列表放在循环之外,如下所示:

    accountUsernames = ['a', '1']
    accountPasswords = ['b', '2']
    loop = True
    while loop == True:
        lr = input('Would you like to login or register?\n')
        if lr.lower() == 'login':
            loginUsername = input('Please enter your username.\n')
            loginPassword = input('Please enter your password.\n')
            if loginUsername in accountUsernames:
                loginIndex = accountUsernames.index(loginUsername)
                if accountPasswords[loginIndex] == loginPassword:
                    print('You have successfully logged in!')
                else:
                    print('Invalid username or password. Please try again.')
            else:
                print('Invalid username or password. Please try again.')
        elif lr.lower() == 'register':
            registerUsername = str(input('Please enter a username.\n'))
            registerPassword = str(input('Please enter a password.\n'))
            registerPasswordConfirmation = str(input('Please confirm your password.\n'))
            if registerUsername in accountUsernames:
                print('That username is already taken. Please try again.')
            elif registerPassword != registerPasswordConfirmation:
                print('These passwords do not match. Please try again.')
            else:
                accountUsernames.append(registerUsername)
                accountPasswords.append(registerPassword)
                print('You have successfully registered! You can now log in.')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 2020-12-31
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      相关资源
      最近更新 更多