2016-03-18 4 views
-1

Soo я имею эту проблему, что цикл в то время как раз не сломаться:пока цикл не будет ломаться, питон

print 'Enter your chosen email below!' 
def valid_email(mail): 
    email = mail[-len('@gmail.com'):len(mail)] 
    failled = mail[0:-len('@gmail.com')] 
    condition = True 
    while condition: 
     for a in mail: 
      if a == ' ': 
       print 'Try again' 
       condition = False 

     if email == '@gmail.com': 
      print 'You have succesfully logged in our website!' 
      break 
     else: 
      print 'Did you mean ' + failled + 'gmail.com' 
     break 

print valid_email('[email protected] l.com') 

я получить выход:

Enter your chosen email below! 
Try again 
Did you mean [email protected] 

я ожидал:

Enter your chosen email below! 
Try again 

Спасибо за ваше время!

+3

Ваш цикл будет прерываться только при проверке состояния, которое находится в начале каждой итерации. Поскольку вы устанавливаете 'condition = False' в середине цикла, код под ним все еще выполняется –

+0

Вам либо нужно« ломать »вместо' condition = False', либо проверить 'if condition == True', а затем выполнить if check – karthikr

+0

break dosen't работает для меня, если оператор работает просто отлично, но у меня все еще есть проблема с пониманием того, как работает мой текущий код deosent. – L1palas

ответ

0

https://docs.python.org/2/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops

«Заявление перерыв, как и в C, вспыхивает наименьшего ограждающих для или во время цикла.»

Вы выходите из цикла for, а не цикла while. Я думаю, что это делает то, что вы хотите:

print 'Enter your chosen email below!' 
def valid_email(mail): 
    email = mail[-len('@gmail.com'):len(mail)] 
    failled = mail[0:-len('@gmail.com')] 

    if ' ' in mail: 
     print 'Try again' 

    if email == '@gmail.com': 
     print 'You have succesfully logged in our website!' 
    else: 
     print 'Did you mean ' + failled + 'gmail.com' 

print valid_email('[email protected] l.com') 
0

Если вы только пытаетесь удалить пробелы, то я рекомендую использовать str.replace (»», „“) (где ул = адрес электронной почты)

+0

Я хочу, чтобы пользователь записывал неверный адрес, появляется ошибка.: P – L1palas

0

Попробуйте использовать in вместо для цикла:

if ' ' in email: 
    break 

Когда вы нарушаете цикл for, вы нарушаете этот цикл, а не цикл while.

Смежные вопросы