chiefkieff
chiefkieff

Reputation: 1

I get AssertionError: True is not false what may be wrong with my code?

def signup(user_accounts, log_in, username, password):
    '''
    This function allows users to sign up.
    If both username and password meet the requirements:
    - Updates the username and the corresponding password in the user_accounts dictionary.
    - Updates the log_in dictionary, setting the value to False.
    - Returns True.

    If the username and password fail to meet any one of the following requirements, returns False.
    - The username already exists in the user_accounts.
    - The password must be at least 8 characters.
    - The password must contain at least one lowercase character.
    - The password must contain at least one uppercase character.
    - The password must contain at least one number.
    - The username & password cannot be the same.

    For example:
    - Calling signup(user_accounts, log_in, "Brandon", "123abcABCD") will return False
    - Calling signup(user_accounts, log_in, "BrandonK", "123ABCD") will return False
    - Calling signup(user_accounts, log_in, "BrandonK","abcdABCD") will return False
    - Calling signup(user_accounts, log_in, "BrandonK", "123aABCD") will return True. Then calling
    signup(user_accounts, log_in, "BrandonK", "123aABCD") again will return False.

    Hint: Think about defining and using a separate valid(password) function that checks the validity of a given password.
    This will also come in handy when writing the change_password() function.
    '''

    # your code here
    if(username==password):
        return False
    else:
        if (username in user_accounts):
            return True
        else:
            if valid(password)==True:
                user_accounts[username]=password
                log_in[username]=False
            else:
                return False
import re

def valid(password):

    if(len(password)>=8):
        regex = ("^(?=.*[a-z])(?=." +
                "[A-Z])(?=.\\d)")
        p = re.compile(regex)
        if (re.search(p, password)):
            return True
        else:
            return False

Upvotes: 0

Views: 378

Answers (1)

Seraph
Seraph

Reputation: 444

This might achieve what you're trying to accomplish:

def signup(user_accounts, log_in, username, password):
    """Returns True if password is valid"""

    # The username already exists in the user_accounts.
    c1 = username in user_accounts
    # The password must be at least 8 characters.
    c2 = len(password) >= 8
    # The password must contain at least one lowercase character.
    c3 = sum([1 for i in password if i.islower()]) > 0
    # The password must contain at least one uppercase character.
    c4 = sum([1 for i in password if i.isupper()]) > 0
    # The password must contain at least one number.
    c5 = sum([1 for i in password if i.isdigit()]) > 0
    # The username & password cannot be the same
    c6 = username != password

    is_valid_password = all([c1, c2, c3, c4, c5, c6])
    return is_valid_password
``

Upvotes: 1

Related Questions