如何在一个泡菜词典中存储多个项目?

时间:2015-08-31 14:18:00

标签: python python-3.x pickle

我目前正在尝试在我的计算机上创建一个允许多组用户名和密码的登录/注册程序。现在,只要我注册,它就会覆盖之前的登录信息。我使用的是Python 3.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()

1 个答案:

答案 0 :(得分:0)

以下是登录/密码数据模型的两个建议。

  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}]