Basic question from pure beginner

sato.photo at gmail.com sato.photo at gmail.com
Wed Jul 1 03:58:27 EDT 2009


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... at gmail.com> wrote:
> 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