Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Define variable in while loop

Tags:

python

I going through a python course and am stuck at trying to use a while loop properly in my code

My code is supposed to check a password if it has min length =6 and max length =14, it will also check if the password only has numbers or letters. If it has a combination of both its supposed to print "strong password" if it only has numbers or letters it will print "weak password".

MIN_PASSWORD_LENGTH = 6

MAX_PASSWORD_LENGTH = 14


while password_length >= MIN_PASSWORD_LENGTH or password_length <= MAX_PASSWORD_LENGTH:

password_length = len(password)

password = input("Enter your password: ")


if password.isalpha():

    print("Your password is weak!")

elif password.isnumeric():

    print("Your password is weak!")

else:

    print("Your password is strong!")


print("Number of characters used in password: ", password_length,"the min length expected is: ",MIN_PASSWORD_LENGTH,
"the max length is: ", MAX_PASSWORD_LENGTH)

When I run my code, it comes with error message: 'name password_length is not defined'. I am not sure what to do? Is my code even correct? Am I supposed to put the password_length outside the while loop?

like image 482
user3699543 Avatar asked Nov 21 '25 10:11

user3699543


2 Answers

You have, more or less, the right idea. It's just that you need to assign a value to password_length outside your loop.

Think about this: when your code is run, the interpreter hits the while loop and attempts to make a comparison involving password_length. However, at that point password_length doesn't exist yet, since the first time it gets a value is inside the loop. Therefore, you should initialise it to a sensible value, such as 0, before entering the loop.

Two supplementary points:

  1. You're calculating the password length of the previous password, so if you enter a too-short/long password and then an acceptable one, the length printed will be of the unacceptable one.

  2. In general, prefer f-strings or str.format calls to string concatenation, so, for your print, this might be better:

print(f'Number of characters used in password: {password_length}; '
       'the min length expected is {MIN_PASSWORD_LENGTH} and the '
       'max length expected is {MAX_PASSWORD_LENGTH}.')
like image 83
gmds Avatar answered Nov 23 '25 02:11

gmds


Immediately before the while loop, initialize with something like "password_length = MAX_PASSWORD_LENGTH" or else the while loop cannot start. The first line inside the while loop is "password_length = len(password)", which will set the value of password_length correctly, but the while loop needs something to start with so that you can reach that point.

like image 21
James Phillips Avatar answered Nov 23 '25 02:11

James Phillips