我试图创建一个注册函数,该函数将提示用户较少的信息。下面的代码是函数的一部分。我使用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()
不要使用递归。这样就可以了。你的主要问题是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()