Найти - Пользователи
Полная версия: Как поставить количество попыток на введения пароля?
Начало » Python для новичков » Как поставить количество попыток на введения пароля?
1 2 3
RomaNewbie
Вот код, хочу чтобы было 4 попытки,как сделать эти попытки?
    t = input("Введите пароль:")
    if t!="Rose":
        response = ""
        while response!= "Rose":
            response = input("Неправильный пароль\n")
Lestoroer
y = 0
while y < 4:
    t = input("Введите пароль:")
    y +=1
    if t!="Rose":
        print('Неправильный пароль, осталось попыток :', 4-y)
    else:
        print('Пароль верный, вход выполнен')
        break
Shaman
for t in reversed(range(4)):
    p = input("Введите пароль:")
    if p == "Rose":
        print('Пароль верный, вход выполнен')
        break
    print('Неправильный пароль, осталось попыток :', t)
Я бы так это написал.
py.user.next
>>> t = 4
>>> while True:
...     p = input('Enter password: ')
...     if p == 'password':
...         print('Ok')
...         break
...     t -= 1
...     if t > 0:
...         print('Left', t)
...     else:
...         print('Exhausted')
...         break
... 
Enter password: a
Left 3
Enter password: b
Left 2
Enter password: c
Left 1
Enter password: password
Ok
>>>
Shaman
А это вот так
for t in reversed(range(4)):
    p = input('Enter password: ')
    if p == 'password':
        print('Ok')
        break
    if t > 0:
        print('Left', t)
else:
    print('Exhausted')
или так (не люблю управляющие переменные дёргать в десяти местах)
t = 4
while t:
    p = input('Enter password: ')
    if p == 'password':
        print('Ok')
        break
    t -= 1
    if t > 0:
        print('Left', t)
else:
    print('Exhausted')
py.user.next
Shaman
А это вот так
Не, ты добавь теперь ввод имени пользователя ещё в этом же цикле. Сразу увидишь, как всё сломается.
Shaman
Почему что-то должно сломаться, если проверка как была единственной, так единственной и остаётся?
for t in reversed(range(4)):
    n = input('Enter name: ')
    p = input('Enter password: ')
    if n == 'vasya' and p == 'password':
        print('Ok')
        break
    if t > 0:
        print('Left', t)
else:
    print('Exhausted')
py.user.next
Имя пользователя нужно один раз ввести, а потом пароль к уже введённому имени подбирать ограниченное число попыток. Если имя ввели пустое, то запросить его заново. Я, например, могу continue поставить без проблем на пустом имени.
Shaman
При таком подходе имя вводится где-то за пределами цикла ввода пароля, чтобы не мешать килограммы с конфетами.
py.user.next
Shaman
При таком подходе имя вводится где-то за пределами цикла ввода пароля
Так, а вот если надо паузу сделать после неправильных попыток, а не выход из цикла. (Во FreeBSD такое в консоли: если неправильно вводишь несколько раз, то увеличивается пауза между неправильными вводами и становится всё дольше и дольше.) Мне вот, например, надо всего лишь break заменить на sleep().

>>> import time
>>> 
>>> t = 4
>>> while True:
...     p = input('Enter password: ')
...     if p == 'password':
...         print('Ok')
...         break
...     t -= 1
...     if t > 0:
...         print('Left', t)
...     else:
...         print('Exhausted')
...         time.sleep(5)
... 
Enter password: a
Left 3
Enter password: b
Left 2
Enter password: c
Left 1
Enter password: d
Exhausted
Enter password: a
Exhausted
Enter password: b
Exhausted
Enter password: password
Ok
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB