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