我正在開始我的第一個專案(密碼管理器)。到目前為止,我所做的是讓用戶可以輸入是要創建新密碼還是要查找密碼。如果他們選擇輸入密碼,密碼的帳戶/用途和實際密碼將被保存到字典中。例如,目的可以是“yahoo”,密碼是“example”。然后將該詞典寫在文本檔案中。如果用戶決定查找密碼,他們所要做的就是輸入密碼的帳戶。到目前為止,一切正常,除了當我輸入另一個密碼和帳戶時,它會覆寫預先存在的密碼和帳戶,而不是將新密碼添加到字典中。
import json
passwords = {
}
prompt = "If you want to make a new password, type 'Make password'."
prompt = "\nIf you want to look for a password, type 'Look for password'.\n"
answer = input(prompt)
def password_list(account_name, password_name):
passwords[account_name] = password_name
answer = answer.upper()
found = 0 # used to see whether account for password can be found
if answer == "MAKE PASSWORD":
account_name = input("What use is this password for? ")
account_name = account_name.upper()
password_name = input("What is the password? ")
password_list(account_name, password_name) # purpose and password saved to dict
with open("passwords.txt", 'w ') as f:
f.write(json.dumps(passwords))
print("Your password was saved!") # dictionary gets saved to text file
elif answer == "LOOK FOR PASSWORD":
with open("passwords.txt", "r") as f:
passwords = json.loads(f.read()) # text file gets opened to read
if not passwords: # if the list is empty...
print("Sorry but there are no passwords available. Make a new one!")
elif passwords: #if the list isn't empty...
search_account = input("What account is this password for? ")
search_account = search_account.upper()
for name in passwords.keys(): # list of accounts get searched
if search_account == name: #if an account is in the dictionary
print(f"The password is '{passwords.get(name)}'.")
found = 1
break
if found != 1:
print("Sorry, we can't find such name.")
uj5u.com熱心網友回復:
很酷的專案。
這是因為每次啟動腳本時都會強制密碼 dic 為空。所以當你添加密碼時,它會被添加到一個新的空 dic 中,然后你用這個空 dic new_password 覆寫檔案。
撰寫代碼時,請考慮每次運行時最可能的結果:檔案存在。如果沒有,那就創建它。
這就是我在load_passwords()函式中演示的內容。
另外,我向您建議一種更 Pythonic(和有效)的方法來搜索 O(1) 而不是 O(n) 中的字典鍵。
import json
prompt = "If you want to make a new password, type 'Make password'."
prompt = "\nIf you want to look for a password, type 'Look for password'.\n"
answer = input(prompt).upper()
def load_passwords():
try:
with open("passwords.txt", "r") as f:
passwords = json.loads(f.read()) # text file gets opened to read
return passwords
except FileNotFoundError:
print("Sorry but there are no passwords available. Make a new one!")
return {}
def password_list(account_name, password_name):
passwords = load_passwords()
passwords[account_name] = password_name
return passwords
if answer == "MAKE PASSWORD":
account_name = input("What use is this password for? ").upper()
password_name = input("What is the password? ")
passwords = password_list(account_name, password_name) # purpose and password saved to dict
with open("passwords.txt", 'w ') as f:
f.write(json.dumps(passwords))
print("Your password was saved!") # dictionary gets saved to text file
elif answer == "LOOK FOR PASSWORD":
passwords = load_passwords()
if passwords: #if the list isn't empty...
search_account = input("What account is this password for? ").upper()
# this is much better
if search_account in passwords:
print(f"The password is '{passwords.get(search_account)}'.")
else:
print("Sorry, we can't find such name.")
注意:在保存到檔案之前,請務必加密您的密碼。
uj5u.com熱心網友回復:
“如果你的 json 檔案在那里,你可能應該通過讀取你的 json 檔案來初始化你的密碼串列。否則,當你運行 MAKE PASSWORD 時,它會將新密碼添加到一個空的 dict 并覆寫現有的密碼檔案,該檔案之前可能有密碼.” – 羅姆
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368170.html
