所以我试图在Python中创建登录和注册程序,我已经做过注册部分,但是现在我在尝试登录部分。 以及一个简单的简单数据库,使用类来存储数据。 有两个文件: 一个用于数据库和注册和登录程序,注册和登录程序读取数据库。
这是当前的登录代码:
username = input("Enter your username: ")
if username == "(acc_info." + username + ".username)":
print("Valid username")
但这当然没有用
,acc.info
是数据库
这是数据库
class Accounts:
def __init__(self, username, pw, is_admin):
self.username = username
self.pw = pw
self.is_admin = is_admin
def full_info(self):
return '{} {} {}'.format(self.username, self.pw, self.is_admin)
admin = Accounts('admin', '5555', True)
我希望输入username
的用户名类似于admin
,当我按Enter时,它将运行(acc_info.admin.username)
,输出为admin
,如果输入为与输出相同,它将把我发送到密码的下一部分,但是如果我知道如何使用用户名,我也可以执行密码部分。
,但是现在输出为(acc.info.admin.username)
程序检查输入(admin
)是否与(acc.info.admin.username)
相同。它不起作用,因为输出(acc.info.admin.username)
应该运行并给我输出admin
答案 0 :(得分:0)
支票if username == "(acc_info." + username + ".username)"
永远不会通过。这是在询问用户输入的字符串是否与连接“(acc_info。”,用户输入的内容和“ .username)”时得到的字符串相同。因此,例如,如果用户键入“ bob
”,它将比较字符串“ bob”和“((acc_info.bob.username)””。这两个字符串明显不同。
我尚不完全清楚您的“数据库”和“(acc_info ...”如何适合您要执行的操作。但这是一个进行登录和检查的有效示例:
class Accounts:
def __init__(self, username, pw, is_admin):
self.username = username
self.pw = pw
self.is_admin = is_admin
def full_info(self):
return '{} {} {}'.format(self.username, self.pw, self.is_admin)
def __eq__(self, other):
return (self.username == other.username and self.pw == other.pw)
def check_account(entered, account_list):
for account in account_list:
if entered == account:
return account
return False
accounts = [ Accounts('admin', '5555', True),
Accounts('bob', '1234', False),
Accounts('jill', '4321', False),
Accounts('hacker', '123', False)]
entered_username = input("Enter your username: ")
entered_password = input("and your password: ")
entered_account = Accounts(entered_username, entered_password, None)
matched_account = check_account(entered_account, accounts)
if matched_account:
print("Welcome, %s" % matched_account.username)
if matched_account.is_admin:
print("And I see you're an actual admin! Wow!")
else:
print("Invalid username/password.")
当然,这不是我在现实生活中使用的完整方法(例如,其中一些步骤不仅不安全,而且不是最节省内存的)。但同样,它至少看起来符合您的要求。