Чек 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.")
Конечно, это не полный подход, который я бы использовал в реальной жизни (например, некоторые из этих шагов не только небезопасны, но и не являются наиболее эффективными с точки зрения памяти). Но опять же, это, по крайней мере, что-то, что соответствует тому, что вы просите.