需要帮助定义列表而不更改其已有的值

问题描述 投票:0回答:2

[好吧,我是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
2个回答
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

1
投票

只需将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.')
© www.soinside.com 2019 - 2024. All rights reserved.