выйти из двух циклов, не нарушая операторов if после него в python - PullRequest
0 голосов
/ 14 июля 2020

Я создаю простую программу входа в систему. Он запрашивает у вас имя пользователя, а затем пароль. Если вы введете правильный пароль, вы в системе, иначе вы получите доброжелательный запрос на повторение пароля. вот код:

while True:
    turns= 5
    turns= turns-1
    print ("Username")
    L_username= input ("")
    print ("Authorising...")
    time.sleep(2)
    if(L_username)==("test@test.test"):
        for x in range (5):
            print ("Please enter the password")
            passwordlogin= input("")
            if passwordlogin == ("beta123"):
                print ("Hello, developer.")
                break
            break
            else:
                print ("Incorrect. You have",turns," more turns")

теперь дело в том, что он дает мне сообщение об ошибке: неправильный синтаксис для else: print ("incorrect ... Я знаю, что это означает проблему, потому что я написал два 'перерыва', последний из for l oop ... что означает, что он сломает while True l oop в начале, независимо от того, I go в l oop ... что означает 'else' оператор не входит в l oop (извините, я не лучший объяснитель в этих вещах) ... который дает сообщение об ошибке. Но я не понимаю, как мне исправить эту проблему ... может кто-нибудь помочь?

Надеюсь, вы меня поняли!

Ответы [ 3 ]

1 голос
/ 14 июля 2020

Это можно упростить, используя функцию и return извлекая из нее, как только вы дойдете до этого оператора if.

def func():
    while True:
        turns= 5
        turns= turns-1
        print ("Username")
        L_username= input ("")
        print ("Authorising...")
        time.sleep(2)
        if(L_username)==("test@test.test"):
            for x in range (5):
                print ("Please enter the password")
                passwordlogin= input("")
                if passwordlogin == ("beta123"):
                    print ("Hello, developer.")
                    return
                else:
                    print ("Incorrect. You have",turns," more turns")

Однако, если вы настаиваете на отсутствии функции, вы можете в основном у вас есть флаг в вашем коде, который вы установили в значение true внутри этого блока if. Прежде чем продолжить внешний l oop, вы должны проверить, установлен ли этот флаг на True, если это так, вы можете безопасно сломать.

while True:
    success = False
    turns= 5
    turns= turns-1
    print ("Username")
    L_username= input ("")
    print ("Authorising...")
    time.sleep(2)
    if(L_username)==("test@test.test"):
        for x in range (5):
            print ("Please enter the password")
            passwordlogin= input("")
            if passwordlogin == ("beta123"):
                print ("Hello, developer.")
                success = True
                break
            else:
                print ("Incorrect. You have",turns," more turns")
    if success:
        break

Обратите внимание на вложенные циклы и такие интенсивные вложение для того, что по сути является тривиальной проблемой. Пожалуйста, попробуйте использовать в ваших условиях единственное число l oop.

0 голосов
/ 14 июля 2020

Вам нужно поменять местами else и break и изменить отступ разрыва. Если пользователь получает правильное имя пользователя, вы хотите проверить пароль не более 5 раз, а затем выйти

while True:
turns= 5
print ("Username")
L_username= input ("")
print ("Authorising...")
time.sleep(2)
if(L_username)==("test@test.test"):
    for x in range (5):
        print ("Please enter the password")
        passwordlogin= input("")
        if passwordlogin == ("beta123"):
            print ("Hello, developer.")
            break
        else:
            turns -= 1
            print ("Incorrect. You have",turns," more turns")
     break

Итак, в этом случае вы запускаете for l oop, а затем прерываете

0 голосов
/ 14 июля 2020

Ну, я написал твою концепцию по-своему. Надеюсь, это сработает для вас

turns = 5

while turns != 0:
    username = input('Enter Username: ')
    password = input(f'Enter password for {username}: ')

    if username == 'test@test.test' and password == 'beta123':
        print('Hello developer')
        turns = 0    # Breaking while loop if user get access within number of "turns"

    else:
         turns = turns - 1  # Or turns -= 1
         print('Incorrect username or password')
         print(f'You have {turns} turns for gaining access')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...