Форум сайта python.su
Например мне нужно ввести пароль 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)
Офлайн
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))
Отредактировано terabayt (Авг. 16, 2016 19:16:45)
Офлайн
Ещё можно воспользоваться готовыми решениями, типа такого декоратора:
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: ')
Отредактировано Master_Sergius (Авг. 16, 2016 20:57:48)
Офлайн
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: ')
Отредактировано terabayt (Авг. 16, 2016 21:43:13)
Офлайн
>>> 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)
Офлайн