Доступ к диктовке в списке (Python) - PullRequest
0 голосов
/ 09 марта 2020

Вот мой код:

user=[]
new_user={"User_Name" : input("Choose your Username: "),
              "Name" : input("Enter your Name: "),
              "Surname": input("Enter your Surname: "),
              "Password" : input("Choose your password: "),
              "Birthdate" : input("Enter your Birthdate: "),
              "Adress" : input("Enter your adress: "),
              "Activity" : input("What's your favorite Activity?: "),
              }
user.append(new_user)

И я хотел проверить, есть ли в списке введенный пароль, поэтому я выбрал:

password = input("Password: ")
if password in user:
   print("logged in")
else:
   print("log-in failed")

И даже хотя пароль, который я набрал для new_user, и пароль, который я ввел для проверки «if-condition», были равны, он не работал. (У меня всегда получалось «log_in fail».)

Если вам нужна дополнительная информация, чтобы помочь мне, пожалуйста, дайте мне знать.

Ответы [ 5 ]

1 голос
/ 09 марта 2020
users=[]
new_user={"User_Name" : input("Choose your Username: "),
              "Name" : input("Enter your Name: "),
              "Surname": input("Enter your Surname: "),
              "Password" : input("Choose your password: "),
              "Birthdate" : input("Enter your Birthdate: "),
              "Adress" : input("Enter your adress: "),
              "Activity" : input("What's your favorite Activity?: "),
              }
users.append(new_user)

password = input("Password: ")
if password in [user["Password"] for user in users]:
   print("logged in")
else:
   print("log-in failed")

Соответствующая строка: if password in [user["Password"] for user in users]

Полагаю, вам не нужно простое сравнение ==, поскольку вы if .. in ...

0 голосов
/ 09 марта 2020

Условие if не разрешается в True, поскольку вы проверяете, содержится ли строка в списке словарей. Это всегда будет Ложью. Предполагая, что список пользователей в конечном итоге вырастет до 1 элемента. Тогда лучшим подходом будет сделать это:

logged_in = False

for dic in user:
    if dic['Password'] == password:
        logged_in = True

if logged_in:
    print("logged in")
else:
    print("log-in failed")
0 голосов
/ 09 марта 2020

Вот простой пример того, как достичь этого результата:

users=[]
new_user={"User_Name" : input("Choose your Username: "),
          "Name" : input("Enter your Name: "),
          "Surname": input("Enter your Surname: "),
          "Password" : input("Choose your password: "),
          "Birthdate" : input("Enter your Birthdate: "),
          "Adress" : input("Enter your adress: "),
          "Activity" : input("What's your favorite Activity?: "),
          }
users.append(new_user)

print("users list:")
print(users)

def login(password):
    for user in users:
        if password == user['Password']:
            return "logged in"
    return "log-in failed"

print("\tTest using wrong password:")
print(login("a_password"))
print("\nTest using good password:")
print(login("test_password"))

Вывод

users list:
[{'Activity': 'my_activity', 'Surname': 'my_surname', 'User_Name': 'my_username', 'Adress': 'my_address', 'Birthdate': 'my_birthdate', 'Name': 'my_name', 'Password': 'my_password'}]

Test using wrong password:
log-in failed

Test using good password:
logged in

Объяснение
В Чтобы получить доступ к паролю пользователя, вы должны принять во внимание, что здесь вы строите список пользователей.
Если вы хотите лучше понять, что я говорю, визуализируя данные, пожалуйста, внимательно прочитайте результат print(users) в выходные данные.
Для доступа к определенной c пароли пользователя обязательно, поэтому я использую для l oop в функции входа в систему.
Как только у меня есть пользователь (user1, user2, user3 .. .) легко получить доступ к его полю пароля и проверить, соответствует ли он вводу с помощью пользователя ['Password'].

Примечание
Я также предлагаю использовать = = вместо в , поскольку:
"mickey" in "mickey mouse" будет оцениваться как true
"mickey" in "mickey" будет оцениваться как true
"mickey" == "mickey" будет оцениваться как true (должно соответствовать 100%)
"mickey" == "mickey mouse" будет оцениваться как false * 104 1 *

0 голосов
/ 09 марта 2020

Решение будет следующим:

password = input("Password: ")
if password == user[0]["Password"]:
   print("logged in")
else:
   print("log-in failed")

Проверка if password in user просто проверяет, есть ли пароль в словарном ключе (то есть "User_Name", "Name", "Surname", ...)

0 голосов
/ 09 марта 2020

Используйте if password in user[0]["Password"], что дает вам:

password = input("Password: ")
if password in user[0]["Password"]:
   print("logged in")
else:
   print("log-in failed")

РЕДАКТИРОВАТЬ

С пользователем + пароль:

users=[]
user_1={
    "User_Name" : "a",
    "Password" : "aa"
}
users.append(user_1)
user_2={
    "User_Name" : "b",
    "Password" : "bb"
}
users.append(user_2)

username = input("User name: ")
password = input("Password: ")
logged_in = False
for u in users:
    if u["User_Name"] == username and u["Password"] == password:
        print("logged in")
        logged_in = True
if not logged_in:
   print("log-in failed")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...