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