如何在字符串中添加单词?

时间:2019-01-12 00:17:18

标签: python python-3.x class login

所以我试图在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

1 个答案:

答案 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.")

当然,这不是我在现实生活中使用的完整方法(例如,其中一些步骤不仅不安全,而且不是最节省内存的)。但同样,它至少看起来符合您的要求。