虽然在python类中循环
我想在我的类中包含用户输入的正则表达式检查。我想要一个场景,用户在输入有效的电子邮件地址之前不能继续输入他们的名字。目前的代码我没有按预期工作。虽然在python类中循环
我想一个while循环是为了这里,但我很努力在这个类中实现。任何援助非常感谢。所有的
class test:
def __init__(self):
self.email = input("Enter your email: ")
email_check = re.search(r'[\w.-][email protected][\w.-]+.\w+', self.email)
if email_check:
print ('email valid')
else:
print ('email not valid')
self.email = input("Enter your email: ")
sys.exit(0)
self.name = input("Enter your name: ")
首先 - 你不应该实施任何这类活动纳入__init__
方法,作为一个旨在为对象字段初始化首位。考虑专门的'check_email'方法,或者任何最适用的名称。现在
,关于你的情况:
class test:
def __init(self):
# whatever initialization applies
pass
def init_emails():
emails = []
proceed = True
# if you really in need of do/while loop
while proceed:
email = self.input_email()
# your logic for input
if email is not None:
emails.append(email)
# invalid input or cancel
else:
proceed = False
return input
def input_email(self):
value = input('Enter your email:')
# TODO: validate/check input
return proper_value
你可以不喜欢这样。
while True:
self.email = input ("Enter email:")
if valid_email:
break
替换valid_email
与您确认的电子邮件地址的方式。
您可能也有兴趣Python check for valid email address?验证电子邮件地址的方法。
谢谢。这正是我期待的。 – jebjeb
class test:
def __init__(self):
self.email = self.get_name()
def get_name(self) :
while True:
x = input("Enter your email: ")
if (re.search(r'[\w.-][email protected][\w.-]+.\w+', x)) :
return x
该脚本的功能与描述的一样,最后打印名称和电子邮件。如果您需要使用python2.7,请使用raw_input
而不是input
。我用for i in range
而不是while True
来避免无限循环。
#!/usr/bin/env python3
import re
import sys
class Test(object):
def __init__(self):
self.email = None
self.name = None
def get_email(self):
for i in range(3):
email = input('Enter your email: ')
if re.search('[\w.-][email protected][\w.-]+.\w+', email):
return email
print('Too many failed attempts!')
sys.exit(1)
def get_name(self):
for i in range(3):
name = input('Enter your name: ')
if name:
return name
print('Too many failed attempts!')
sys.exit(1)
def initialize(self):
self.email = self.get_email()
self.name = self.get_name()
print('"{}" <{}>'.format(self.name, self.email))
if __name__ == '__main__':
t = Test()
t.initialize()
而不是输入,尝试使用raw_input。像这样:
self.email = raw_input("Enter your email:")
不会有错误了。 希望这有助于。
在Python 3中,'input'相当于Python 2的'raw_input'(请参阅https://www.python.org/dev/peps/pep-3111/)。根据原始代码中打印函数(而不是语句)的用法,我会假定OP使用Python 3。 – mgwilliams
我第二个评论,这不属于'__init__'或可能甚至在一个类中。用户交互应该可能发生在类之外,除非它是专门实现用户交互的类。如果它发现自己填充了无效数据,那么你的类可能应该“抛出”一个错误。 – tripleee