Я пытаюсь сделать простую страницу входа, используя информацию, хранящуюся в словаре. Каждый раз, когда я ввожу правильную комбинацию имени пользователя и пароля, она прибегает к выражению else - «извините, учетные данные не найдены в базе данных». Что я делаю неправильно?

acc={"t":"000", "b":"123", "r":"456"}
p=input ("enter account name :")
pp=input ("enter account password :")
if p==dict.keys(acc) and pp==dict.values(acc):
 print ("access granted")
else:
 print ("sorry credentials not found in database")
-1
Toni Ramirez 4 Июл 2019 в 21:26

3 ответа

Лучший ответ

Метод keys и values возвращает последовательности ключей и значений всех соответственно. Ни один из них не будет равен одному ключу или значению.

if p in acc and pp == acc[p]:
    print("access granted")
else:
    print("sorry credentials not found in database")

Тангенциально, dict.keys(acc) является довольно неестественным способом написания acc.keys() (и аналогично для acc.values()).

1
chepner 4 Июл 2019 в 18:33

Проверьте возвращаемое значение dict.keys(acc).

>>> acc = {"t":"000", "b":"123", "r":"456"}
>>> P = input ("enter account name : ")
Tiddles
>>> p
'Tiddles'
>>> dict.keys(acc)
dict_keys(['t', 'b', 'r'])
>>> p == dict.keys(acc)
False

Это всегда будет ложным?

Вы, вероятно, хотите что-то вроде этого:

>>> acc = {"username": "Tiddles", "password": "12345"}
>>> p = input("enter account name: ")
Tiddles
>>> acc['username'] == p
True
-1
James Welchman 4 Июл 2019 в 18:33

dict.keys(acc) (так же, как acc.keys()) дает вам список всех ключей словаря. Одно имя входа никогда не равно списку. Вам нужно проверить, находится ли имя пользователя P в словаре и соответствует ли его значение сохраненному паролю:

if acc.get(P, None) == Pp:

Кстати, и P, и Pp являются плохими идентификаторами.

0
DYZ 4 Июл 2019 в 18:29