三级菜单的增删改-2018.2.22(下)

百度了一下三级菜单增删改的代码,要我说呢,这个代码要我自己写呢,估计几天也写不出来,这个代码写的,怎么说呢,非常巧妙,然后呢

我把他的代码拷贝下来自己看了一遍然后修改了一遍 算是比他原来的要更加好一点了吧(当然是我认为了)还有就是现在感觉他里面有些代码我看不懂

它的用处,也不知道是真的没用,还是我真的没看懂,这是一个问题,不管了吧 反正算是修改好了,好了 .

他的代码:

f_read = open(‘menu_file‘,‘r‘,encoding=‘utf8‘)
#读取menu_file文件中的字符串,转换成字典类型数据并以对象接收
with f_read as f_read:
    geography_menu = eval(f_read.read().strip())
#测试读取数据是否为字典
# print(type(geography_menu))
# print(geography_menu[‘华中‘][‘湖北‘])
#定义一个动态字典来进行多级选择,并初始化为geography_menu
dynamic_dict = geography_menu
#定义一个用户列表来接收dynamic_dict的父字典的键,以便用户选择返回上级
dynamic_dict_super = []
#增删改查还没有保存在文件中
while True:
    print(‘欢迎使用‘.center(50,‘*‘))
    for i in dynamic_dict:
        print(‘>>>‘,i)
    user_choice = input(‘请输入选择:输入你要查询的地区省市或新增[add]、修改[revise]、删除[delete]、返回上一级[q]‘).strip()
    #print(dynamic_dict)#测试当前屋为什么类型
    #查询
    if user_choice in dynamic_dict:
        dynamic_dict_super.append(dynamic_dict)
        if type(dynamic_dict) == list:
            print(‘你选择的城市为:‘,user_choice)
            break
        else:
            dynamic_dict = dynamic_dict[user_choice]
    #新增
    elif user_choice == ‘add‘:
        user_add = input(‘请输入你要添加的省市区:‘).strip()
        if user_add in dynamic_dict:
            print(‘此项已存在,请重新输入:‘)
        else:
            if type(dynamic_dict) == list:
                dynamic_dict.append(user_add)#当类型为list时,需要判断
            else:
                dynamic_dict[user_add] = {}
            continue
    #修改
    elif user_choice == ‘revise‘:
        user_revise = input(‘请输入你要修改的省市区:‘).strip()
        if user_revise in dynamic_dict:
            user_revise_after = input(‘修改为:‘).strip()
            print(type(dynamic_dict))
            if type(dynamic_dict) == list:#当类型为list时,需要判断
                dynamic_dict[dynamic_dict.index(user_revise)] = user_revise_after
            else:
                dynamic_dict[user_revise_after] = dynamic_dict[user_revise]
                del dynamic_dict[user_revise]
            continue
        else:
            print(‘此项不存在,请重新输入:‘)
    #删除
    elif user_choice == ‘delete‘:
        user_delete = input(‘请输入你要删除的省市区:‘).strip()
        if user_delete in dynamic_dict:
            dynamic_dict_super.append(dynamic_dict)
            if type(dynamic_dict) == list:#当类型为list时,需要判断
                del dynamic_dict[dynamic_dict.index(user_delete)]
            else:
                del dynamic_dict[user_delete]
            continue
        else:
            print(‘此项不存在,请重新输入:‘)
    #返回上一级或退出
    elif user_choice == ‘q‘:
        if dynamic_dict_super:
            dynamic_dict = dynamic_dict_super.pop()
        else:
            print(‘目前为最上级菜单,输入q后为退出系统!‘)
            break
    else:
        print("输入非法,请重新输入选择!")
if type(dynamic_dict) != list:
    with open(‘menu_file‘,‘w‘,encoding=‘utf8‘) as f:
        f.write(str(dynamic_dict))

  我的代码(其实不算我的吧,哈哈哈):

#_author_:"Bushii"
#data:2018/2/22

#这个系统有一个缺点,就是不能直接退出,如果直接退出的话,将会缺失文件内容,这是很难受的
#这里是读取txt文本的内容,并将字符串转化为字典的过程.第一步:
with open(‘menu_file‘,‘r‘,encoding=‘utf8‘) as f_read:
    dynamic_dict = eval(f_read.read().strip())
#定义另外一个列表用来接收原列表中有用的信息
dynamic_dict_super = []

while True:
    print(‘欢迎使用不识i查询系统‘.center(50,‘*‘))
    #这里的t变量用来输出一个序号,使之更加美观,for循环则用来输出字典中的键.
    t=1
    for i in dynamic_dict:
        print(t,i)
        t+=1
    user_choice = input(‘请输入选择:输入你要查询的地区省市或新增[add]、修改[revise]、删除[delete]、返回上一级[b]‘).strip()
    #查询
    if user_choice in dynamic_dict:#如果用户的选择在当前字典中,就将当前列表存入一个新的列表dynamic_dict_super中去
        dynamic_dict_super.append(dynamic_dict)
        #这里就比较牛批了,如果dynamic_dict的类型是列表的话,那么打印你选择的城市是某某,否则,将dynamic_dict = dynamic_dict[user_choice]
        #无论有多少层,都可以无限进行下去.
        if type(dynamic_dict) == list:
            print(‘你选择的城市为:‘,user_choice)
            break
        else:
            dynamic_dict = dynamic_dict[user_choice]#反正这个用的就很巧妙
    #新增
    elif user_choice == ‘add‘:
        user_add = input(‘请输入你要添加的省市区:‘).strip()#一般来说,strip的作用是可以优化用户输入过程中的错误,用户输入的空格和换行符可以识别并删除掉
        if user_add in dynamic_dict:
            print(‘此项已存在,请重新输入:‘)
        else:
            #这里要分为两种情况,如果是字典的话 用后一种,如果是列表的话用前一种方法增加元素
            if type(dynamic_dict) == list:
                dynamic_dict.append(user_add)#tip:[]这个表示的是列表,{}这个表示的是字典
            else:
                dynamic_dict[user_add] = {}#这里还有一个漏洞啊,这样一直添加的话,就无法出现你选择的城市为这样的结果了
            #continue,实践证明,这个continue是没有什么用处的.
    #修改
    elif user_choice == ‘revise‘:
        user_revise = input(‘请输入你要修改的省市区:‘).strip()
        if user_revise in dynamic_dict:
            user_revise_after = input(‘修改为:‘).strip()
            #print(type(dynamic_dict))
            if type(dynamic_dict) == list:#又是需要判断是不是列表的,因为列表和字典改变内容的方式是不一样的
                dynamic_dict[dynamic_dict.index(user_revise)] = user_revise_after#列表可以用index索引定位到元素
            else:
                dynamic_dict[user_revise_after] = dynamic_dict[user_revise]#实质是创建一个和原来字典一样的字典,然后删除原来的字典就行了
                del dynamic_dict[user_revise]
            #continue
        else:
            print(‘此项不存在,请重新输入‘)
    #删除
    elif user_choice == ‘delete‘:
        user_delete = input(‘请输入你要删除的省市区:‘).strip()
        if user_delete in dynamic_dict:
            dynamic_dict_super.append(dynamic_dict)
            if type(dynamic_dict) == list:#还是需要判断是不是列表,列表和字典删除的方法不一样,但都是使用del
                del dynamic_dict[dynamic_dict.index(user_delete)]
            else:
                del dynamic_dict[user_delete]
            #continue
        else:
            print(‘此项不存在,请重新输入:‘)
    #返回上一级或退出
    elif user_choice == ‘b‘:
        #如果自己创建的这个列表为空.那么退出这个列表,如果这个列表不为空,那么就将最后一个元素删除并返回到dynamic_dict这个列表上
        if dynamic_dict_super:
            dynamic_dict = dynamic_dict_super.pop()#其中pop无参数的时候是删除列表最后一个,然后将删除的元素返回到dynamic_dict这个列表
        else:
            print(‘目前为最上级菜单,输入b后为退出系统!‘)
            break
    else:
        print("输入非法,请重新输入选择!")

#这三行代码很重要啊,这三行代码拿来保存改变的内容,没有这三行内容的话,改变的内容第二次打开还是原来的内容
#这几行代码有点看不懂啊,直接翻译一下好了,如果dynamic_dict它的类型不是列表,就以w的方式打开文件,而且把dynamic_dict的内容转化为字符串后存进去.
if type(dynamic_dict) != list:#哦,如果没有这句的话,后果是很严重的,当你选择了一个城市之后,前面的所有内容将会被删除
    with open(‘menu_file‘,‘w‘,encoding=‘utf8‘) as f:
        f.write(str(dynamic_dict))

  用一句励志的话来结尾吧:为了不让生活留下遗憾和后悔,我们应该尽可能抓住一切改变生活的机会。

现在自学到了老男孩python教程的第九天.可是第九天到第十二天讲的是ubuntu的一些命令,听得有些迷糊,也有点不想听

还是直接跳过这部分吧,先看别的好了

还有alex老师的鸡汤感觉还是挺有用的.

好了,感觉有点累啊,虽然今天并没有看多久教程啊.

原文地址:https://www.cnblogs.com/bushii/p/8459925.html

时间: 2024-10-06 13:29:23

三级菜单的增删改-2018.2.22(下)的相关文章

三级菜单的增删改-2018.2.22(上)

1.首先把字典内容存到txt文档里面 2.读取txt文本内容以及用eval将文本转化为字典 3.可以看出来昨天写的三级菜单并不适用今天要使用的增删改 #_author_:"Bushii" #data:2018/2/21 menu= { '山东' : { '青岛' : ['四方','黄岛','崂山','李沧','城阳'], '济南' : ['历城','槐荫','高新','长青','章丘'], '烟台' : ['龙口','莱山','牟平','蓬莱','招远'] }, '江苏' : { '苏

MVC+Bootstrap 企业通用框架搭建--左侧导航菜单的实现--导航菜单的增删改查(3)

补充上面的点击菜单表信息: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace SqlServer.Entity{ public class Menu_Operation { private int _operation_id; public int Operation_id { get { return

权限组件(8):一级菜单的展示、增删改查和保留原参数

效果图: 一.路由配置 rbac/urls.py from django.urls import re_path from rbac.views import menu urlpatterns = [ ... # 菜单管理 re_path(r'^menu/list/$', menu.menu_list, name='menu_list'), re_path(r'^menu/add/$', menu.menu_add, name='menu_add'), re_path(r'^menu/edit/

DOM访问HTML元素的方式,DOM访问表单控件的常用属性和方法,DOM访问列表框、下拉菜单的常用属性,DOM访问表格子元素的常用属性和方法,DOM对HTML元素的增删改操作

DOM访问HTML元素的方式 为了动态地修改HTML元素,须先访问HTML元素.DOM主要提供了两种方式来访问HTML元素: 根据ID访问HTML元素:通过document对象调用getElementById()方法来查找具有唯一id属性值的元素. 利用节点关系访问HTML元素.常用的属性和方法如下: parentNode 返回当前节点的父节点 previousSibling 返回当前节点的前一个兄弟节点 nextSibling 返回当前节点的后一个兄弟节点 childNodes 返回当前节点的

3.22数据库基础知识:①数据类型②基本规则③数据库基本操作,增删改库,表

数据库:①数据类型②基本规则③数据库基本操作,增删改库,表 DATABASE 数据库Relational Database 关系型数据库column 列 row行Primary Key 主键 Foreign Key 外键DBMS 数据库管理系统 Database Management SystemRDBNS 关系型数据库管理系统SQL Structured Query Language 结构化查询语言SQL 分为:DDL DQL DML DCL 一.数据类型:1.整数型:INT BIGINT2.

字符格式化输入,对个人信息的输入输出操作,对列表和元组的增删改查和一些基本的方法。

昨日内容回顾: 注释的使用:""      ‘’     # 在python中双,单引号的意义是一样的 全注释 :ctrl + ? 例如:"hello,it's me!" 缩进 本节内容的简介: 集成开发环境(IDE): VIM #经典linux下的文本编辑器 Emacs # linux文本编辑器,比Vim更容易 Eclipse #JAVA IDE,支持 python.c.c++等 Visual Studio # 微软开发的IDE notepad++ sublime

day1作业--三级菜单

作业概述: 写一个三级菜单 实现如下功能: (1)可依次选择进入各子菜单 (2)在每一级按“b”都可以返回上一级,按“q"都可以退出 流程图: readme: 简介: three_menu.py是显示三级菜单的程序主要功能: 显示一级(区域).二级(省).三级菜单(市.区),三级菜单再选泽可以显示市区的人口和面积(为了节省时间,随意指定的),在任意级都可以返回上一级,或者退出 三级菜单和市区的人口和面积用字典表示: China_map={ '华北':{'北京':['东城','西城','朝阳','

增删改查的数据访问

一.查看数据 自然要用到造连接了,连接到数据库,然后写sql语句,执行sql语句,昨天学到的数据访问的过程 输出一张表的,用到的就是表的标签了,首先是输出一行的的内容,也就是表中的字段名的一行.例如: 1 2 3 4 5 6 7 8 9 <table width="100%" height="100%" border="1px" cellpadding="0" cellspacing="0">

easyui datagrid 增删改查示例

查询JSP页面 1 <!doctype html> 2 <%@include file="/internet/common.jsp"%> 3 <!-- 新样式右侧菜单共用CSS和部分JS:在页面最前 --> 4 <%@include file="/ChangeFbrole/pageMain/Common_RightMenu.jsp"%> 5 <html> 6 <head> 7 <meta