Let me offer a bit of editing.

First, using the condition count != 3 is perhaps risky. A mistake or a change in logic in the loop body might result in an infinite loop. So instead I suggest

while count < 3...

Second, I'd suggest storing the value 3 in a variable with a name that describes it.

MaxAttempts = 3
while count < MaxAttempts

This suggests that you change the name 'count' to 'attemptcount'.

The variable 'guess' is used only inside the loop, so I suggest removing the assignment outside the loop.

Finally, I'd remove correct_password_given from the loop test, and replace it with a break statement when the correct password is entered.

password = "qwerty"
correct_password_given = False
attemptcount = 0
MaxAttempts = 3
while attemptcount < MaxAttempts:
  guess = raw_input("Enter your password: ")
  guess = str(guess)
  if guess != password:
      print "Access Denied"
      attemptcount = attemptcount + 1
  else:
      print "Password Confirmed"
      correct_password_given = True
      break


Charles Yeomans

On Jul 1, 2009, at 3:58 AM, sato.ph...@gmail.com wrote:

Thank you for all of the help.  With your assistance and help from the
Python Tutor mailing list I was able to come up with the following
code:

password = "qwerty"
correct_password_given = False
guess = "0"
count = 0
while count != 3 and not correct_password_given :
  guess = raw_input("Enter your password: ")
  guess = str(guess)
  if guess != password:
      print "Access Denied"
      count = count + 1
  else:
      print "Password Confirmed"
      correct_password_given = True


If I understand it correctly, the function will continue to loop until
either the count == 3 or until correct_password_give = True,
satisfying the two conditions of the assignment, which were to lock a
user out after three failed password attempts and to print "Access
Granted" and end the module if the correct password is given.  Am I
understanding this correctly?

Thanks!

On Jul 1, 12:06 am, alex23 <wuwe...@gmail.com> wrote:
On Jul 1, 3:38 pm, "sato.ph...@gmail.com" <sato.ph...@gmail.com>
wrote:

I have been able to make the module quit after entering a password
three times, but can't get it to quit right away after the correct one
is entered.

Not with the code you pasted, you haven't. There's a missing colon on
line 7 & line 9 isn't indented properly. It's always best if we're
referring to the same source when trying to help with a problem.

The problem you're having, though, has to do with the while loop and
the fact that it's only checking one condition: has the 'count'
counter been incremented to 3. What you need to do is _also_ check for
the success condition:

is_confirmed = False
while count != 3 or is_confirmed:
  guess = raw_input("Enter your password: ")
  guess = str(guess)
  if guess != password:
    print "Access Denied"
    count = count + 1
  else:
    print "Password Confirmed"
    is_confirmed = True

This also provides you with a nice boolean that shows whether or not
the password was confirmed, which may be useful for latter code.

However, whenever you want to loop a set number of times, it's usually
better to use a 'for' loop instead:

PASSWORD = 'qwerty'
MAXRETRY = 3
for attempt in xrange(MAXRETRY):
  guess = str(raw_input('Enter your password: '))
  is_complete = guess == PASSWORD
  if is_complete:
    print 'Password confirmed'
    break # this exits the for loop
  else:
    print 'Access denied: attempt %s of %s' % (attempt+1, MAXRETRY)

This saves you from the burden of creating, incrementing & testing
your own counter.

If there's anything here that isn't clear, please don't hesitate to
ask.

--


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to