while循环在python类中

时间:2016-10-11 02:49:24

标签: 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+', 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:  ")        

5 个答案:

答案 0 :(得分:1)

你可以这样做。

while True:
    self.email = input ("Enter email:")
    if valid_email:
        break

用您验证电子邮件地址的方式替换valid_email

您可能还会对Python check for valid email address?感兴趣的方法来验证电子邮件地址。

答案 1 :(得分:0)

首先 - 你不应该在__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

答案 2 :(得分:0)

   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

答案 3 :(得分:0)

此脚本的功能如上所述,最后打印名称和电子邮件。如果您需要使用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.-]+@[\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()

答案 4 :(得分:0)

尝试使用raw_input而不是输入。像这样:

self.email = raw_input("Enter your email:")

不再有错误了。 希望这会有所帮助。