Если True: обновить, если False: перезапустить
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 ответа
Вызовите метод снова:
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
Вам нужно вызвать self.register(), и вызов метода register () сделает это, но таким способом, который в конечном итоге не окупится. (Хотя то, что вам действительно нужно, - это просто цикл. Рекурсия приведет к бессмысленным копиям вашего класса в стеке.)
То, что здесь не так, указывает на необходимость изложить действительно базовую концепцию Python:
Имена Python не делают или не вызывают вещи. Только операторы делают, и они делают это, вызывая именованные методы некоторого объекта. Так что именно круглые скобки или точка, если вы используете свойство, вызывают выполнение. Функции, и даже методы или свойства являются объектами. Сказать "вернуть регистр" означает "вернуть объект, представляющий функцию, которая делает это", а не "вызвать эту функцию и вернуть результат".
Кроме того, поскольку людям трудно думать о методе, а не о функции, как об объекте, присвоение self.register другой переменной является странным. Ссылка на связанные вещи с локальными переменными, особенно с одним и тем же именем, как правило, является способом создания ошибок, если вы не делаете что-то довольно богато.