Learn Regular Expressions by Building a Password Generator - Step 71

Tell us what’s happening:

I understand what I need to type to pass this level but don’t understand why my other methods of trying to pass are considered wrong???

  • print(f’Generated password:{new_password}') why not use an ‘f’ function?
  • new_password = print(‘Generated password:’, generate_password()) why not this way round?

I have an idea that it’s to do with the way you call a function but don’t really know why?

*print(‘Generated password:’,new_password)
I understand that this is the correct way to do it but only because it tells you to do it this way.

Please explain???

Your code so far

import re
import secrets
import string


def generate_password(length=16, nums=1, special_chars=1, uppercase=1, lowercase=1):

    # Define the possible characters for the password
    letters = string.ascii_letters
    digits = string.digits
    symbols = string.punctuation

    # Combine all characters
    all_characters = letters + digits + symbols

    while True:
        password = ''
        # Generate password
        for _ in range(length):
            password += secrets.choice(all_characters)
        
        constraints = [
            (nums, r'\d'),
            (special_chars, fr'[{symbols}]'),
            (uppercase, r'[A-Z]'),
            (lowercase, r'[a-z]')
        ]

        # Check constraints        
        if all(
            constraint <= len(re.findall(pattern, password))
            for constraint, pattern in constraints
        ):
            break
    
    return password
    

# User Editable Region

new_password = generate_password()
print(f'Generated password:{new_password}')

# User Editable Region

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0

Challenge Information:

Learn Regular Expressions by Building a Password Generator - Step 71

You could use an f string to do this, but this lesson and test do not ask for an f string, it asks for two arguments.

You wouldn’t really assign a print call to a variable like this:

new_password = print(‘Generated password:’, generate_password()) 

What would this mean? In any case, the instructions ask:

Modify your print() call 

not to modify the assignment.

1 Like

if you do this the value of new_password is None, because print returns that, it doesn’t have a returned value

2 Likes

ahah I guess it does say do this and not modify the assignment lol. Thanks for the reply.