登录示例-使用用户输入访问类实例



希望可以得到一些帮助与建立用户列表的一个例子,然后使用输入进行登录尝试。问题是当输入有效的用户名时,该用户名被视为字符串而不是类user,因此在尝试检查密码时出现错误。

代码如下:

class User():
def __init__(self, first_name, last_name, username, password, status=True):
self.first_name = first_name
self.last_name = last_name
self.password = password
self.name = first_name.title() + " " + last_name.title()              
users = [ ]
def add_user():
new_username = input("Choose a Username: ")    
while new_username in users:
new_username = input("Username already in use; choose a different username: ")
password = ""
while len(password) != 4:
password = input("Choose a 4 character password: ")
first_name = input("First name? ")
last_name = input("Last name? ")
username = User(first_name, last_name, new_username, password)
print("Welcome " + username.name)
users.append(new_username)
print(users)
more = input("Add another user? (Y/N) ").lower()
if more != ("n" or "no"):
add_user()
def login():
username_entry = ""
while username_entry not in users:
username_entry = input("Username? ")
if User(username_entry).status == False:
print("Account locked")
else:
password_count = 0
password_entry = ""
if password_count < 4:
while password_entry != username_entry.password:
password_entry = input("Password? ")
password_entry += 1
print("Login details accepted. Welcome " + username_entry.name)
else:
print("Login attempts exceeded.  Contact customer support for assistance.")
username_entry.status=False
more = input("Login user? (Y/N) ").lower()
if more != ("n" or "no"):
login()
add_user()
login() 

您应该使用字典来存储用户并按用户名对其进行索引。我在下面对你的代码执行了一些修复,但这里是一个简短的更改/修复列表:

  • 添加status属性到User
  • users更改为按用户名索引的字典
  • 更改了对User对象的引用,使其更加一致
  • 修复了你的密码检查器中的一个错误,无论你在
  • 输入了多少次尝试,都不会让你被锁定。
class User():
def __init__(self, first_name, last_name, username, password, status=True):
self.first_name = first_name
self.last_name = last_name
self.password = password
self.name = first_name.title() + " " + last_name.title()
self.status = status
users = {}
def add_user():
while True:
new_username = input("Choose a Username: ")    
while new_username in users:
new_username = input("Username already in use; choose a different username: ")
password = ""
while len(password) != 4:
password = input("Choose a 4 character password: ")
first_name = input("First name? ")
last_name = input("Last name? ")
user = User(first_name, last_name, new_username, password)
print("Welcome " + user.name)
users[new_username] = user
print(users)
more = input("Add another user? (Y/N) ").lower()
if more in ("n", "no"):
break
def login():
while True:
username_entry = ""
while username_entry not in users:
username_entry = input("Username? ")
user = users[username_entry]
if user.status == False:
print("Account locked")
else:
password_count = 0
password_entry = ""
while True:
if password_count >= 3:
print("Login attempts exceeded.  Contact customer support for assistance.")
user.status=False
break
password_entry = input("Password? ")
password_count += 1
if password_entry == user.password:
print("Login details accepted. Welcome " + user.name)
break
more = input("Login user? (Y/N) ").lower()
if more in ("n", "no"):
break
add_user()
login() 

在您的情况下,您应该认为您的问题是面向对象的。用户你的类应该有用户名状态属性。当您想保留用户名列表时,您应该在列表中添加用户对象,而不仅仅是用户名。此外,当您触及任何用户的用户名或其他属性(状态等)时,您应该将这些操作置于用户对象之上。当你的项目成长起来时,这些方法对你来说更容易。

我对你的代码做了一些修改,并在修改的行上做了注释。

class User():
def __init__(self, first_name, last_name, username, password, status=True):
self.first_name = first_name
self.last_name = last_name
self.password = password
self.name = first_name.title() + " " + last_name.title()
# Assign attributes to object...
self.status = status
self.username = username
users = [ ]
def add_user():
new_username = input("Choose a Username: ")    
while new_username in users:
new_username = input("Username already in use; choose a different username: ")
password = ""
while len(password) != 4:
password = input("Choose a 4 character password: ")
first_name = input("First name? ")
last_name = input("Last name? ")
user = User(first_name, last_name, new_username, password)
print("Welcome " + user.name)
# You should append user object not new_username!
users.append(user)
print(user.username)
more = input("Add another user? (Y/N) ").lower()
if more != ("n" or "no"):
add_user()
def login():
username_entry = ""
while username_entry not in (user.username for user in users):
username_entry = input("Username? ")
# Finding user adding existing before...
for user in users:
# Control username...
if(user.username == username_entry):
# Then control username locked or not?...
if user.status == False:
print("Account locked")
else:
password_count = 0
password_entry = ""
if password_count < 4:
while password_entry != user.password:
password_entry = input("Password? ")
# Increase count not entry!
password_count += 1
print("Login details accepted. Welcome " + user.name)
else:
print("Login attempts exceeded.  Contact customer support for assistance.")
user.status=False
break
more = input("Login user? (Y/N) ").lower()
if more != ("n" or "no"):
login()
add_user()
login() 

最新更新