Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 16, 2016 19:01:11

EpicMandM
Зарегистрирован: 2016-08-16
Сообщения: 4
Репутация: +  2  -
Профиль   Отправить e-mail  

Как сделать количество попыток?

Например мне нужно ввести пароль 3 раза я использую for attemps_left in range(3):, потом идёт ввод с клавиатуры, сравнение с числом в памяти, и если пароль не правильный всё это повторяется 3 раза и если пользователь не ввёл правильный пароль программа пишет : Access is denied и я хочу чтоб изменялось количество попыток. 3 , 2 , 1
for attemps_left in range(3):
a = (input(“pls enter password: (Вот тут должно писать остаток попыток) ”))

Отредактировано EpicMandM (Авг. 16, 2016 19:12:39)

Офлайн

#2 Авг. 16, 2016 19:15:43

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как сделать количество попыток?

 for attemps_left in range(3 ,0, -1):
    a = input("text: ({}) ".format(attemps_left))
или
 for attemps_left in range(3):
    a = input("text: (%d) " % (3 - attemps_left))



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Авг. 16, 2016 19:16:45)

Офлайн

#3 Авг. 16, 2016 20:42:39

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Как сделать количество попыток?

Ещё можно воспользоваться готовыми решениями, типа такого декоратора:
https://pypi.python.org/pypi/retrying

Ну или вот даже самому можно сделать примитивный декоратор:

  
def retry(number):
    def wrap(f, number=number):
        def wrapped_f(*args, number=number):
            if not f(*args):
                number -= 1
                if number <= 0:
                    print('Sorry, you lose all attempts')
                    return False
                print('Try again. %d tries left' % (number,))
                wrapped_f(*args, number=number)
        return wrapped_f
    return wrap
 
CORRECT_INPUT = 'abc'
 
@retry(3)
def get_input(prompt):
    user_input = input(prompt)
    return user_input == CORRECT_INPUT
 
get_input('Enter password: ')



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Авг. 16, 2016 20:57:48)

Офлайн

#4 Авг. 16, 2016 21:42:57

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как сделать количество попыток?

Master_Sergius

 def retry(number):
    def wrap(f, number=number):
        def wrapped_f(*args, number=number):
            if not f(*args):
                number -= 1
                if number <= 0:
                    print('Sorry, you lose all attempts')
                    return False
                print('Try again. %d tries left' % (number,))
                wrapped_f(*args, number=number)
        return wrapped_f
    return wrap
CORRECT_INPUT = 'abc'
@retry(1234)
def get_input(prompt):
    return 1 == 0
get_input('Enter password: ')



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Авг. 16, 2016 21:43:13)

Офлайн

#5 Авг. 17, 2016 02:12:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Как сделать количество попыток?

  
>>> def prompt(answer, tries, inp_str='Enter: ', left_fmt='Left {}'):
...     for i in range(tries):
...         s = input(inp_str)
...         if s == answer:
...             return True
...         left = tries - i - 1
...         if left > 0:
...             print(left_fmt.format(left))
...     return False
... 
>>> res = prompt('z', 3)
Enter: x
Left 2
Enter: y
Left 1
Enter: z
>>> res
True
>>>



Отредактировано py.user.next (Авг. 17, 2016 02:14:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version