如果为True:更新,如果为False:restart

时间:2014-08-25 16:00:34

标签: python loops iteration user-registration

import getpass

class UserRegistration(object):

    def __init__(self):
        pass

    def register(self):
        register = self.register
        self.username_and_password = {}
        username = raw_input("Choose Username> ")
        password = getpass.getpass("Choose Password> ")
        confirm_password = getpass.getpass("Confirm Password> ")
        if password == confirm_password:
            self.username_and_password[username] = password
        else:
            print "Passwords didn't match"
            return register

go = UserRegistration()
go.register()

提示用户输入用户名和密码的简单程序

如果密码不匹配,我希望它重启过程并提示用户再次输入密码

目前,它会打印字符串,但不会重新启动该过程。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

再次调用该方法:

   else:
        print "Passwords didn't match"
        self.register()

def register(self):是该类的一种方法,因此您可以使用self.register调用它,不需要使用register = self.register

如果您只想提示输入密码并在dict中存储多个实例详细信息:

class UserRegistration(object):
    username_and_password = {}
    def __init__(self):
        self.username = ""
    def register_name(self):
        self.username = raw_input("Choose Username> ")
        self.register_pass()

    def register_pass(self):
        password = getpass.getpass("Choose Password> ")
        confirm_password = getpass.getpass("Confirm Password> ")
        if password == confirm_password:
            self.username_and_password[self.username] = password
        else:
            print "Passwords didn't match"
            self.register_pass()

你也可以使用while循环:

class UserRegistration(object):
    username_and_password = {}
    def __init__(self):
        self.username = ""
    def register_name(self):
        while True:
            self.username = raw_input("Choose Username> ")
            if self.username in self.username_and_password:
                print "Username taken, please try again"
                continue
            else:
                return self.register_pass()

    def register_pass(self):
        while True:
            password = getpass.getpass("Choose Password> ")
            confirm_password = getpass.getpass("Confirm Password> ")
            if password == confirm_password:
                self.username_and_password[self.username] = password
                return
            else:
                print "Passwords didn't match"
                continue

答案 1 :(得分:1)

您需要调用self.register(),并且调用register()会执行此操作,但从长远来看,这种方式无法获得回报。 (虽然你真正需要的只是一个循环。递归将导致你的类在堆栈上的无意义副本。)

这里有什么问题表明需要阐述一个非常基本的Python概念:

Python名称不执行或调用。只有运算符这样做,并且它们通过调用某个对象的命名方法来实现。因此,如果您正在使用导致执行的属性,则为括号或点。函数,甚至方法或属性都是对象。说'返回寄存器'表示'返回表示执行此操作的对象的对象,而不是“调用此函数并返回结果”。

此外,由于人们很难将方法而不是函数视为对象,因此将self.register分配给另一个变量是很奇怪的。使用局部变量(特别是同名变量)引用绑定的东西通常是一种创建错误的方法,除非你做的事情非常华丽。