2014-03-31 3 views
2

Это мой первый вопрос, задающий вопрос на этом сайте, так жаль незначительных ошибок.Нужно знать, как петля

Вопрос, который у меня есть, заключается в том, как перевести программу обратно в предыдущую строку. Я буду более конкретным. В первом заявлении я сделал так, чтобы программа закончилась. Я хочу, чтобы он разрешил пользователю повторить попытку ввода имени пользователя. Как мне это сделать?

И если вы не понимаете, пожалуйста, уточните у меня.

usernames = ("Bob","John","Tyler","Thomas","Sanjit", 
      "Super_X","Ronald","Royal_X", "Igor","KoolKid") 
passwords = ("James","Smith","Jones","password","Desai", 
      "asdf123","Roy","King", "Mad_man", "k00lGuy") 

username = raw_input("Enter username") 

if username == usernames[0] or username == usernames[1] or username == usernames[2] or \ 
    username == usernames[3] or username == usernames[4] or username == usernames[5] or \ 
    username == usernames[6] or username == usernames[7] or username == usernames[8] or \ 
    username == usernames[9]: 
    print " " 
else: 
    import sys 
    sys.exit("This is not a valid username") 

password = raw_input("Enter Password:") 

if username == usernames[0] and password == passwords[0] or \ 
    username == usernames[1] and password == passwords[1] or \ 
    username == usernames[2] and password == passwords[2] or \ 
    username == usernames[3] and password == passwords[3] or \ 
    username == usernames[4] and password == passwords[4] or \ 
    username == usernames[5] and password == passwords[6] or \ 
    username == usernames[6] and password == passwords[7] or \ 
    username == usernames[7] and password == passwords[8] or \ 
    username == usernames[9] and password == passwords[9]: 
     print "log in successful" 
else: 
    import sys 
    sys.exit("Username and Password do not match.") 

ответ

2

Вы можете сделать это следующим образом:

username = '' 
while username not in usernames: 
    username = raw_input('Enter username: ') 

Если вы хотите, чтобы дать им определенное количество попыток, вы можете сделать:

username = '' 
for i in range(3): #where 3 is the number of tries 
    if username not in usernames: 
     username = raw_input('Enter username: ') 
    else: 
     break 

, а затем вы можете сделать то же самое для паролей. Надеюсь, это поможет.

+1

И обратите внимание на использование здесь «здесь», что делает именно то, что вы думаете, что это будет делать. Это, по сути, короткий способ написать длинную строку «или», которую вы сделали несколько раз –

0

Во-первых, вы бы лучше использовать dict для хранения имени пользователя и пароля, как это:

credentials = { 
    "Bob": "James", 
    # .... 
} 

Если вы хотите, чтобы позволить пользователю 2 пытается получить право имя пользователя:

for i in xrange(2): 
    username = raw_input('Enter username: ') 
    if username in credentials: 
     break 
else: 
    print 'username not valid' 

В приведенном выше коде используется конструкция for..else в python, чтобы определить, был ли для выхода из цикла использован break. Теперь, диктову стало намного легче проверить правильность пароля:

if password == credentials[username]: 
    print 'login successful' 
Смежные вопросы