zoukankan      html  css  js  c++  java
  • 【练习】字典的循环遍历:实现多层级节点存取

    关键点:字典、列表、集合等可变类型,若将一个可变类型赋给变量A和B,通过B改变了该可变类型内部的元素,指向该可变类型内存地址的变量A的值一样会跟着改变(因A、B同时指向了一个内存地址)

    >>> a={"AB":"ab","CD":"cd"}
    >>> b=a
    >>> id(a)
    33380536
    >>> id(b)
    33380536
    >>>
    >>> b["AB"]="efg"
    >>> b
    {'AB': 'efg', 'CD': 'cd'}
    >>> a
    {'AB': 'efg', 'CD': 'cd'}
    >>> id(a)
    33380536
    >>> id(b)
    33380536
    >>>

    题目:利用字典实现多层级节点的增加、查询功能,并且通过pickle序列化的方式保存为文件。

     1 import pickle
     2 import os
     3 import time
     4 
     5 if os.path.isfile('db.pk1'):
     6     print("载入数据库,请稍候…………")
     7     time.sleep(2)
     8     f = open("db.pk1", "rb")
     9     db = pickle.load(f)
    10     f.close()
    11     print("数据库加载完毕。")
    12     path = []
    13     while True:
    14         tmp = db
    15         if path:
    16             for item in path:
    17                 if item in list(tmp.keys()):
    18                     tmp = tmp[item]
    19                 else:
    20                     print("无此节点,请重新输入")
    21         print("当前节点下的子节点为:", list(tmp.keys()))
    22 
    23         choice = input("请选择:1、查看节点	2、添加节点	3、返回上级	4、退出
    >>>>>")
    24         if choice == "1":
    25             n = input("请输入节点名称>>>")
    26             path.append(n)
    27 
    28         elif choice == "2":
    29             name = input("请输入节点名称:")
    30             tmp[name] = {}
    31         elif choice == "3":
    32             if path:
    33                 path.pop()
    34             else:
    35                 print("已经是根节点,无法返回。")
    36         elif choice == "4":
    37             print("保存数据库,请稍等……")
    38             time.sleep(2)
    39             f = open("db.pk1", "wb")
    40             pickle.dump(db, f, True)
    41             print("保存成功,程序退出。")
    42             break
    43         else:
    44             print("输入错误请重新输入")
    45 elif not os.path.isfile('db.pk1'):
    46     choice1 = input("数据库不存在,是否初始化数据库:Y\N
    >>>")
    47     if choice1.lower() == "y":
    48         db = {}
    49         time.sleep(2)
    50         f = open("db.pk1", "wb")
    51         pickle.dump(db, f, True)
    52         f.close()
    53         print("初始化成功。")
    54         
    55     elif choice1.lower() == "n":
    56         print("无法初始化数据库,程序退出。")
  • 相关阅读:
    vue 基础
    Bootstrap 基础
    FormatMessage函数
    CreateProcess中的部分参数理解
    关于远程线程的调用
    利用服务枚举进程
    FindQQByProcess
    寻找kernel32.dll的地址
    ShellCode的几种调用方法
    操作系统版本
  • 原文地址:https://www.cnblogs.com/morries123/p/8630677.html
Copyright © 2011-2022 走看看