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()
提示用户输入用户名和密码的简单程序
如果密码不匹配,我希望它重启过程并提示用户再次输入密码
目前,它会打印字符串,但不会重新启动该过程。
有什么想法吗?
答案 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分配给另一个变量是很奇怪的。使用局部变量(特别是同名变量)引用绑定的东西通常是一种创建错误的方法,除非你做的事情非常华丽。