Basic question from pure beginner

alex23 wuwei23 at gmail.com
Wed Jul 1 03:06:38 EDT 2009


On Jul 1, 3:38 pm, "sato.ph... at gmail.com" <sato.ph... at 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.



More information about the Python-list mailing list