Home > Software design >  Add a attempt counter to while loop via subtracting variables
Add a attempt counter to while loop via subtracting variables

Time:01-26

I was making a program that uses a while loop and if operators that gives the user 3 attempts to write a password, im trying to add an attempt counter that displays how many attempts you have left by subtracting the variables

I tried using a variable: Attempts_left to give me the number of attempts left by subtracting Max_attempts by Attempt\_ count

super_password = "survive"
attempt = ""
Attempt_count = 0
Max_attempts = 3
Attempts_left = Max_attempts-Attempt_count
Out_of_attempts = False

while super_password != attempt and not(Out_of_attempts):
    if Attempt_count < Max_attempts:
        Attempt_count  = 1
        attempt = input("Enter password, "   str(Attempts_left)   " attempts left: ")


    else:
        Out_of_attempts = True
if Out_of_attempts:
    print("Access denied")
else:
    print("Access granted")

But it would always display: Enter password, 3 attempts left:

CodePudding user response:

Here's an updated version of your code that should work as you intended:

super_password = "survive"
attempt = ""
attempt_count = 0
max_attempts = 3
out_of_attempts = False

while super_password != attempt and not(out_of_attempts):
    attempts_left = max_attempts - attempt_count
    if attempt_count < max_attempts:
        attempt_count  = 1
        attempt = input("Enter password, "   str(attempts_left)   " attempts left: ")

    else:
        out_of_attempts = True
if out_of_attempts:
    print("Access denied")
else:
    print("Access granted")

The issue in your original code is that you were defining the Attempts_left variable before the loop starts, and you were not updating it inside the loop. Therefore, it always remained the same value (3). In the updated version, I moved the definition of attempts_left inside the loop and updated it before each input request. This way, it will be calculated based on the current attempt_count value and will always be accurate.

  • Related