Нужна помощь в определении списка без изменения значения, которое у него уже есть - PullRequest
0 голосов
/ 23 февраля 2020

Хорошо, я довольно новичок в python, и я пытался выяснить, могу ли я создать простую систему входа / регистрации, которая просто использует имена пользователей и пароли. Я добавил это в начале кода, чтобы не приходилось вручную перезапускать его каждый раз, когда я хочу что-то протестировать:

loop = True
while loop == True:

, затем я создал два списка с именами accountUsernames и accountPasswords с парой случайных имен пользователей и паролей. Идея заключалась в том, что у каждой учетной записи будут одинаковые индексы паролей и имен пользователей, и код будет проверять, имеют ли имя пользователя и пароль, введенные пользователем при входе в систему, одинаковые индексы. Когда я начал писать код системы регистрации, я понял, что застрял. Я использовал функцию добавления, чтобы добавить имя пользователя и пароль, которые пользователь ввел в ранее упомянутые списки, но когда он это сделал, код вернул бы l oop к началу, потому что все было закончено, то есть списки также будут изменил свое прежнее состояние. Мне было интересно, есть ли способ, которым я мог бы определить эти списки в начале, не давая им никаких значений или изменяя значения, которые он уже имеет по сравнению с предыдущим l oop. Вот полный код:

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. Кроме того, извините, если я переоценил проблему. Буду очень признателен за вашу помощь.

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Просто поместите списки accountUsernames и accountPasswords вне l oop, например:

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.')
1 голос
/ 23 февраля 2020

Я не совсем понимаю вопрос, но почему бы вам не определить accountUsernames и accountPasswords до запуска l oop, например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...