Найти - Пользователи
Полная версия: Как сделать количество попыток?
Начало » Python для экспертов » Как сделать количество попыток?
1
EpicMandM
Например мне нужно ввести пароль 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: (Вот тут должно писать остаток попыток) ”))
terabayt
 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))
Master_Sergius
Ещё можно воспользоваться готовыми решениями, типа такого декоратора:
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: ')
terabayt
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: ')
py.user.next
  
>>> 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
>>>
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