如何在一个pickle字典中存储多个条目?

2022-09-28 20:25:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在我的计算机上建立一个允许多组用户名和密码的登录/注册程序。现在只要我注册,它就会覆盖以前的登录。我使用的是python3.4。你知道吗

有什么办法可以阻止吗?你知道吗

我的代码如下:

import os
import pickle
import sys
import time

user_name = 'default'
pass_word = '12345'

login = {'username' : user_name,
         'password' : pass_word}

def cls():
    os.system('cls')
def space():
    print(' ')

def load():
    with open('logins', 'rb') as f:
        login = pickle.load(f)
def save():
    with open('logins', 'wb') as f:
        pickle.dump(login, f)

def MainMenu():
    print('Select an Option.')
    while True:
        print('1) Login')
        print('2) Signup')
        user_input = input('Option #: ')
        if user_input == '1':
            cls()
            login_user()
        elif user_input == '2':
            cls()
            signup_user()
        else:
            cls()
            continue

def signup_user():
    user_chosen_name = input('Username: ')
    login['username'] = user_chosen_name
    user_chosen_password = input('Password: ')
    login['password'] = user_chosen_password
    space()
    cls()
    print('Setup complete. Please login.')
    os.system('pause')
    save()
    cls()
    login_user()

def login_user():
    load()
    while True:
        print('Please Login.')
        space()
        user_input_name = input('Username: ')
        user_input_password = input('Password: ')
        if user_input_name == login['username'] and user_input_password == login['password']:
            space()
            print('Login Successful.')
        else:
            space()
            print('Login Failed. Please Try Again.')
            while True:
                print('1) Try Again.')
                print('2) Main Menu.')
                user_cont = input('Continue?: ')
                if user_cont == '1':
                    cls()
                    break
                elif user_cont == '2':
                    cls()
                    MainMenu() 
                    break

if __name__ == '__main__':
    if os.path.isfile('logins') == False:
        save()
    else: 
        pass
    MainMenu()

Tags: nameimportinputifosdefloginspacepasswordpickleclsprintchosenuser
1条回答
网友
1楼 ·

下面是两个关于登录/密码数据模型的建议。你知道吗

  1. 用字典,这可能是最简单的方法;我建议用这个。你知道吗

    # init with default
    passwords = {user_name: pass_word} 
    
    # password look-up
    if login in passwords:
        print passwords[login]
    else:
        print 'User', login, 'is not registered'
    
    # password set or update
    password[login] = new_password       
    
  2. 夫妻名单或字典名单。 这可能更接近您当前的解决方案,但我不建议这样做。 我只显示初始化将是什么。你知道吗

    # list of couples
    logins = [(user_name, pass_word)]
    
    # list of dictionaries
    logins = [{'username' : user_name,
               'password' : pass_word}]
    

热门问题