#python #loops #for-loop #while-loop
Вопрос:
Я пытался создать функцию регистрации, которая будет запрашивать информацию о нескольких пользователях. Приведенный ниже код является частичной частью функции. Я использую цикл while, чтобы предотвратить любой недопустимый ввод или конкретный ввод для выполнения другой задачи. Как только проверка ввода завершена, я использовал цикл for для проверки наличия зарегистрированной электронной почты. Однако я использую рекурсивную функцию, когда регистрируемое электронное письмо было зарегистрировано, есть ли способ избежать повторной функции и вместо этого поместить цикл for в цикл while ?
user = [['a','a.gmail.com'],['b','b.gmail.com'],['c','c.gmail.com']]
def signup():
print(" Enter '0' to return mainpage")
emailAddress = input("Please enter your email address : ")
while True:
if emailAddress == '0':
print('mainpage returned')
signup()
elif emailAddress == '':
emailAddress = input("Please enter your email address : ")
else:
break
# check if email address is registered or not
for item in user:
if emailAddress == item[1]:
print("This Email address has been registered")
signup()
else:
print("email registering:",emailAddress)
signup()
Комментарии:
1. Вы вообще не должны повторяться. Всегда
break
выходите в самый нижний блокsignup()
.for item in user
должно быть внутриwhile
цикла, где находится текущийbreak
оператор.2. Могу ли я узнать, когда следует выполнить рекурсию функции и когда продолжать использовать итерацию ?
3. Не повторяйтесь. Период. Выйдите из
while
цикла, когда ваши условия будут выполнены.
Ответ №1:
Не используйте рекурсию. Что-то вроде этого подойдет. Ваша главная проблема for
-это петля.
user = [['a','a.gmail.com'],['b','b.gmail.com'],['c','c.gmail.com']]
def signup():
emailAddress = None
#---
while True:
print(" Enter '0' to return mainpage")
desiredEmailAddress = input("Please enter your email address : ")
if desiredEmailAddress == '0':
print('Ok, will return to mainpage')
break # <---- BREAK OUT OF THE WHILE LOOP
elif desiredEmailAddress == '':
pass # let the while-loop iterate again
else:
# check if email address is registered or not
emailIsAlreadyRegistered = False
for item in user:
if desiredEmailAddress == item[1]:
emailIsAlreadyRegistered = True
break # we can break out of the for loop
if emailIsAlreadyRegistered:
print("This Email address has been registered")
pass # let the while-loop iterate again
else:
emailAddress = desiredEmailAddress
break # <---- BREAK OUT OF THE WHILE LOOP
#---
if emailAddress is None:
# User wanted to return to mainpage
return None
else:
print("email registering:", emailAddress)
return emailAddress
signup()