python类中的while循环

python类中的while循环,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我试图在我的类中加入一个用户输入的正则表达式检查。我想要一个场景,用户在输入有效的电子邮件地址之前不能继续输入自己的姓名。我当前的代码没有按预期工作 我想这里应该有一个while循环,但在这个类中我很难实现它。非常感谢您的帮助 class test: def __init__(self): self.email = input("Enter your email: ") email_check = re.search(r'[\w.-]+@[\w.-]+.\w+',

我试图在我的类中加入一个用户输入的正则表达式检查。我想要一个场景,用户在输入有效的电子邮件地址之前不能继续输入自己的姓名。我当前的代码没有按预期工作

我想这里应该有一个while循环,但在这个类中我很难实现它。非常感谢您的帮助

class test:  
 def __init__(self):     
    self.email = input("Enter your email: ")
    email_check = re.search(r'[\w.-]+@[\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:  ")        

首先-您不应该在
\uuuuu init\uuuuu
方法中实现任何此类活动,因为其中一个活动首先用于对象字段初始化。考虑专用的“检查电子邮件”方法,或者任何名称都适用。

现在,关于你的情况:

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
用您验证电子邮件地址的方式替代有效的电子邮件

   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.-]+@[\w.-]+.\w+', x)) :
                return x

您可能还对验证电子邮件地址的方法感兴趣。

此脚本的功能如所述,最后打印名称和电子邮件。如果需要使用python2.7,请使用
raw\u input
而不是
input
。我对范围内的I使用了
,而不是
,而为True
,以避免无休止的循环

   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.-]+@[\w.-]+.\w+', x)) :
                return x
#!/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.-]+@[\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()
#/usr/bin/env蟒蛇3
进口稀土
导入系统
类别测试(对象):
定义初始化(自):
self.email=无
self.name=None
def get_电子邮件(自我):
对于范围(3)中的i:
电子邮件=输入('输入您的电子邮件:')
如果重新搜索('[\w.-]+@[\w.-]+.\w+',电子邮件):
返回电子邮件
打印('尝试失败次数太多!')
系统出口(1)
def get_名称(自身):
对于范围(3)中的i:
name=input('输入您的姓名:')
如果名称:
返回名称
打印('尝试失败次数太多!')
系统出口(1)
def初始化(自):
self.email=self.get_email()
self.name=self.get_name()
打印(“{}”格式(self.name,self.email))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
t=测试()
t、 初始化()

尝试使用原始输入代替输入。像这样:

self.email = raw_input("Enter your email:")
不会再有错误了。
希望这有帮助。

谢谢。这正是我要找的。我支持这样的评论,即这不属于
\uuuu init\uuuu
,甚至可能根本不属于类。用户交互可能发生在类之外,除非它是实现用户交互的特定类。如果类发现自己填充了无效数据,则可能会引发一个错误。在Python3中,“input”相当于Python2的
原始输入(请参阅)。根据原始代码中print函数(而不是语句)的用法,我假设OP使用的是python3。