Python实现三层菜单操作

#!/usr/bin/env python3
# encoding:utf-8
# __author__: chenwei
# date: 2017-05-25
# blog: http://www.cnblogs.com/weiandlu/

‘‘‘json数据文件格式如下:
{
    ‘北京‘:{
        ‘海淀‘:{
            ‘五道口‘:{
                ‘soho‘:{},
                ‘网易‘:{},
                ‘google‘:{}
            },
            ‘中关村‘:{
                ‘爱奇艺‘:{},
                ‘汽车之家‘:{},
                ‘youku‘:{},
            },
            ‘上地‘:{
                ‘百度‘:{},
            },
        },
        ‘昌平‘:{
            ‘沙河‘:{
                ‘高教园‘:{},
                ‘北航‘:{},
            },
            ‘天通苑‘:{},
            ‘回龙观‘:{},
        },
        ‘朝阳‘:{},
        ‘东城‘:{},
    },
    ‘上海‘:{
        ‘闵行‘:{
            "人民广场":{
                ‘炸鸡店‘:{}
            }
        },
        ‘闸北‘:{
            ‘火车战‘:{
                ‘携程‘:{}
            }
        },
        ‘浦东‘:{},
    },
    ‘山东‘:{},
}
‘‘‘
import json
def read_data():
    with open("administrative_division.json","r",encoding="utf8") as f_read:
        data=json.load(f_read)
        return data

def write_data(data):
    with open("administrative_division.json","w",encoding="utf8") as f_write:
        json.dump(data,f_write)

data = read_data()
current_layer = read_data()
last_layer = [] #在菜单层层深入时记录上一层菜单
layer_count = {‘layer‘:0,‘key‘:[]} #=每进入一层该字典的layer数值增加1,同时将每层选择的城市名append到key的列表中
num_to_menu = {} #将菜单列表打印的序列号与城市名成进行对应
while True:
    print("欢迎使用三级菜单系统".center(50,"#"))
    for i,v in enumerate(current_layer,1):
        print("%s\t%s\t" % (i,v),end=‘‘)
        num_to_menu[i] = v
    print()
    choice=input("请选择对应选项前的字母:\na:添加,d:删除,m:修改,b:返回,q:退出:").strip()
    if choice.isdigit() and int(choice) in num_to_menu:
        last_layer.append(current_layer)
        current_layer = current_layer[num_to_menu[int(choice)]]
        layer_count[‘layer‘] += 1
        layer_count[‘key‘].append(num_to_menu[int(choice)])
        write_data(data)
    elif choice == ‘a‘:
        city=input("请输入城市名称!:").strip()
        if layer_count[‘layer‘] == 1:
            if not data[layer_count[‘key‘][0]]:
                data[layer_count[‘key‘][0]].update({city:{}})
        elif layer_count[‘layer‘] == 2:
            if not data[layer_count[‘key‘][0]][layer_count[‘key‘][1]]:
                data[layer_count[‘key‘][0]][layer_count[‘key‘][1]].update({city:{}})
        elif layer_count[‘layer‘] == 3:
            if not data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]]:
                data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]].update({city:{}})
        elif layer_count[‘layer‘] == 4:
            if not data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]][layer_count[‘key‘][3]]:
                data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]][layer_count[‘key‘][3]].update({city:{}})
        else:
            pass
        current_layer.update({city:{}})
        write_data(data)
    elif choice == ‘d‘:
        city_num=int(input("请输入删除城市序号!").strip())
        layer_count[‘layer‘] += 1
        layer_count[‘key‘].append(num_to_menu[city_num])
        if layer_count[‘layer‘] == 1:
            if not data[layer_count[‘key‘][0]]:
                del data[layer_count[‘key‘][0]]
        elif layer_count[‘layer‘] == 2:
            if not data[layer_count[‘key‘][0]][layer_count[‘key‘][1]]:
                del data[layer_count[‘key‘][0]][layer_count[‘key‘][1]]
        elif layer_count[‘layer‘] == 3:
            if not data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]]:
                del data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]]
        elif layer_count[‘layer‘] == 4:
            if not data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]][layer_count[‘key‘][3]]:
                del data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]][layer_count[‘key‘][3]]
        else:
            pass
        write_data(data)
    elif choice == ‘m‘:
        city_num=int(input("请输入要修改的城市序号!").strip())
        new_name=input("请输入新的城市名称!").strip()
        layer_count[‘layer‘] += 1
        layer_count[‘key‘].append(num_to_menu[city_num])
        if layer_count[‘layer‘] == 1:
            if not data[layer_count[‘key‘][0]]:
                data[new_name]=data[layer_count[‘key‘][0]]
                del data[layer_count[‘key‘][0]]
        elif layer_count[‘layer‘] == 2:
            if not data[layer_count[‘key‘][0]][layer_count[‘key‘][1]]:
                data[layer_count[‘key‘][0]][layer_count[‘key‘][new_name]]=data[layer_count[‘key‘][0]][layer_count[‘key‘][1]]
                del data[layer_count[‘key‘][0]][layer_count[‘key‘][1]]
        elif layer_count[‘layer‘] == 3:
            if not data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]]:
                data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][new_name]]=data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]]
                del data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]]
        elif layer_count[‘layer‘] == 4:
            if not data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]][layer_count[‘key‘][3]]:
                data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]][layer_count[‘key‘][new_name]]=data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]][layer_count[‘key‘][3]]
                del data[layer_count[‘key‘][0]][layer_count[‘key‘][1]][layer_count[‘key‘][2]][layer_count[‘key‘][3]]
        else:
            pass
        write_data(data)
    elif choice == ‘b‘:
        if current_layer != data:
            current_layer = last_layer[-1]
            last_layer.pop()
            layer_count[‘layer‘] -= 1
            layer_count[‘key‘].pop()
            print(layer_count)
            continue
        else:
            print("\033[31;1myou have reach to the top layer!\033[;0m")
    elif choice == ‘q‘:
        exit(1)
    else:
        print("\033[1;31;40m请根据提示进行选择!\033[;0m")

时间: 2024-11-05 12:16:39

Python实现三层菜单操作的相关文章

Python之三层菜单

三层菜单,根据用户所选数字,进入子菜单.一级一级呈现. 1 menu = { 2 'Beijing': { 3 "ChaoYang": { 4 "CBD": ['CICC', 'CCTV'], 5 "JinRongJie": ["CT"], 6 "Wangjing": ["Momo", "ChuiZI"] 7 }, 8 "HaiDian": ['B

Python中的切片操作

Python中的切片操作功能十分强大,通常我们利用切片来进行提取信息,进行相关的操作,下面就是一些切片的列子,一起来看看吧,希望对大家学习python有所帮助. 列如我们从range函数1-100中取7的倍数,函数及结果如下所示: >>> for i in range(1,100)[6::7]: print i 7 14 21 28 35 42 49 56 63 70 77 84 91 98 取一个list或tuple的部分元素是非常常见的操作.比如,一个list如下: >>

Python 3 mysql 库操作

Python 3 mysql 库操作 一.基础相关知识 MySQL数据库基本操作知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student,scholl,class_list,相当于一个具体的文件 记录:1 刘海龙 324245234 22,相当于文件中的一行内容 二.SQL语言简介 SQL(Structured Query Language 即结构化查询语言) SQL语言主要用于存取数据.查询

python 的经常使用时间操作,取得当前时间等

我们先导入必须用到的一个module>>> import time设置一个时间的格式,以下会用到>>>ISOTIMEFORMAT=’%Y-%m-%d %X’看一下当前的时间,和其它非常多语言类似这是从epoch(1970 年 1 月 1 日 00:00:00)開始到当前的秒数.>>> time.time()1180759620.859上面的看不懂,换个格式来看看>>> time.localtime()(2007, 6, 2, 12,

[Python] Python 学习 - 可视化数据操作(一)

Python 学习 - 可视化数据操作(一) GitHub:https://github.com/liqingwen2015/my_data_view 目录 折线图 散点图 随机漫步 骰子点数概率 文件目录 折线图 cube_squares.py import matplotlib.pyplot as plt x_values=list(range(1, 5000)) y_values=[pow(x, 3) for x in x_values] plt.scatter(x_values, y_v

Python学习之--文件操作

Python中对文件操作可以用内置的open()函数 读文件 f=open('/home/test/test.txt','r') # 读模式打开文件 f.read() # 读取文件内容 除了正常的读取文件内容,一个常用的操作是判断文件内容是否为空,如下: if len(f.read())==0: # 如果文件内容为空 xxxx 判断一个文件或者路径是否存在,如下(这里需要在代码中导入os module: import os): file='/home/test/test.txt' dir='/h

python解析xml文件操作的例子

python解析xml文件操作实例,操作XML文件的常见技巧. xml文件内容: <?xml version="1.0" ?> <!--Simple xml document__chapter 8--> <book> <title> sample xml thing </title> <author> <name> <first> ma </first> <last>

Python mongoDB 的简单操作

#!/usr/bin/env python # coding:utf-8 # Filename:mongodb.py from pymongo import MongoClient,ASCENDING,DESCENDING import datetime # connection with mongoclient client=MongoClient() # getting a database db=client.test # getting a collection collection=d

用Python进行SQLite数据库操作

用Python进行SQLite数据库操作 -----转自:http://www.cnblogs.com/yuxc/archive/2011/08/18/2143606.html 简单的介绍 SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身.它是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/L