обновленный словарь не может распознать вновь добавленный ключ при повторном запуске программы - PullRequest
0 голосов
/ 21 октября 2018

Я создаю программу, которая выдаст пароль для любой учетной записи, которая уже есть в словаре, и, если ее нет, она попросит пользователя ввести пароль, чтобы ее можно было сохранить для дальнейшего использования.

Хотя программа обновляет словарь (последняя печать в другом подтверждает это), но когда я снова запускаю программу, она не распознает учетную запись, которую я только что добавил.

password = {
    'a': 'password of a',
    'b': 'password of b',
    'c': 'password of c'
}

inp = input("Enter the username ")

if inp in password:
    print("your password is ",password[inp])

else:
   print("your account is not present\n")
   new_password = input("Enter the password for ")
   password.update({inp : new_password})
   print("Hopefully the list is updated ",password)

для отл.если мой inp = d, он скажет мне, что учетной записи нет, а затем запросит ввод, он показывает, что словарь обновлен

{'a': 'a ka password', 'b': 'b ka password', 'c': 'c ka password', 'd': 'password of d'}

, но в следующий раз, когда я запускаю программу, он не может распознать.

Enter the username d
your account is not present

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Это потому, что ваш словарь с учетными записями находится в памяти только во время работы программы.Как только он заканчивается, словарь исчезает и создается с нуля, когда вы снова запускаете программу.Вам нужно сохранить его на диск, чтобы сохранить ваши обновления, и один из подходов будет использовать pickle:

init_accounts.py

import pickle

password = {
    'a': 'password of a',
    'b': 'password of b',
    'c': 'password of c'
}

# SAVE THE DATA
with open("data.pickle", "wb") as file:
    pickle.dump(password, file, pickle.HIGHEST_PROTOCOL)

add_account.py

import pickle

# LOAD THE DATA
with open("data.pickle", "rb") as file:
    password = pickle.load(file)

inp = input("Enter the username ")

if inp in password:
    print("your password is ", password[inp])

else:
    print("your account is not present\n")
    new_password = input("Enter the password for ")
    password.update({inp : new_password})

    # SAVE THE DATA
    with open("data.pickle", "wb") as file:
        pickle.dump(password, file, pickle.HIGHEST_PROTOCOL)

    print("Hopefully the list is updated ", password)
0 голосов
/ 21 октября 2018

Если я что-то упустил, вы не можете хранить данные таким образом.Как только вы закончите скрипт / закроете программу, пользовательский ввод будет потерян.Одним из способов хранения данных будет сохранение словаря в другом файле, чтение и запись в него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...