需要实现的功能是:
三级菜单
1.从文本内读出选项
2.查询每一级的选项,并能对选项进行增/删/改功能
3.每一级可以退出程序或者返回上一层

2018-5-14 更新内容

思路

实现过程中的BUG及解决方案:

1. windowsError [Error 32]

说明:进程无法访问文件,因为另一个程序正在使用此文件。

解决:在对文件进行操作之前 进行关闭文件操作

代码实现:

    FileRead.close()
    FileWrite.close()
    os.remove('city.txt')
    os.renames('city_backup.txt','city.txt')

2 .ValueError: I/O operation on closed file

说明:操作的文件已经关闭

解决:在对文件进行读取内容或者写入内容之前打开文件

代码实现:

    os.remove('city.txt')
    os.renames('city_backup.txt','city.txt')
    FileRead = io.open('city.txt', 'r', encoding='utf8')
    FileWrite = open('city_backup.txt', 'w+')

3.TypeError: expected a string or other character buffer object

说明:数据类型与预定的数据类型不一致

解决:使用eval函数讲读取到的字符串转为字典,写入文件的时候用str函数将字典转为字符串

代码实现:

menu = eval(FileRead.read())
menucopy = str(menu)
FileWrite.write(menucopy)
项目代码

 #coding=utf-8
 #__author:Administrator
 #__time:2018/5/14 17:34
 #__file_name:22222
 import io
 import os
 Operation =['a','b','c','d','q','A','B','C','D','Q']
 FileRead = io.open('city.txt', 'r', encoding='utf8')
 FileWrite = open('city_backup.txt', 'w+')
 menu = eval(FileRead.read())

 def Judge(Province,municipality):                                     #对菜单层级进行判断,返回该级菜单字典
     if (Province == 0)and(municipality == 0): return menu
     elif (Province != 0)and(municipality == 0): return menu[Province]
     else : return menu[Province][municipality]

 def OperationJudge(Province,city,choice):                            #对输入操作,决定下一步动作
     if choice == 'b' and Province !=0 and city !=0 : shi(Province)
     elif choice == 'b' and Province !=0 :shen()
     elif choice == 'q': exit()
     elif choice == 'd':FileDel(Province,city)
     elif choice == 'c':FileChance(Province,city)
     elif choice == 'a':FileAppend(Province,city)

 def FileAppend(Province,municipality):                               #增加项目模块
     MenuAppend = Judge(Province,municipality)
     CityAppend = raw_input("请输入添加的城市\n",)
     MenuAppend[CityAppend]={}
     ExChange(Province,municipality)

 def FileDel(Province,municipality):                                  #删除项目模块
     MenuDel = Judge(Province,municipality)
     CityDel = raw_input("请输入你要删除的城市\n",)
     MenuDel.pop(CityDel)
     ExChange(Province,municipality)

 def FileChance(Province,municipality):                              #改变项目模块
     MenuChance = Judge(Province,municipality)
     CityChance = raw_input("请输入被替换的城市\n",)
     if CityChance in MenuChance : CityChanced = raw_input("请输入替换的城市\n",)
     MenuChance[CityChanced] = MenuChance[CityChance]
     MenuChance.pop(CityChance)
     ExChange(Province,municipality)

 def ExChange(Province,municipality):                                #对改变的项目写入文件当中进行保存
     global FileRead,FileWrite
     menucopy =str(menu)
     FileWrite.write(menucopy)
     FileRead.close()
     FileWrite.close()
     os.remove('city.txt')
     os.renames('city_backup.txt','city.txt')
     FileRead = io.open('city.txt', 'r', encoding='utf8')
     FileWrite = open('city_backup.txt', 'w+')
     if (Province == 0)and(municipality == 0): shen()
     elif (Province != 0)and(municipality == 0): shi(Province)
     else : xian(Province,municipality)

 def shen():                                                         #第一级菜单查找
     for i in menu:print (i)
     Province = raw_input('请输入你选择的省份\n',)
     if Province in Operation : OperationJudge(0,0,Province)
     elif (Province in menu) and menu[Province]!= {}: shi(Province)
     elif Province not in menu :
         print '请输入正确的省份\n'
         shen()
     elif menu[Province] == {} :
         print "该省下面没有市,请添加\n"
         FileAppend(Province,0)
     elif Province == '':
         print '请输入正确的省份\n'
         shen()

 def shi(Province):                                                     #第二级菜单查找
     for i in menu[Province]: print (i)
     city = raw_input('请输入你选择的市或退出程序(Q)或返回上一级菜单(B)\n')
     if city in Operation : OperationJudge(Province,0,city)
     elif (city in menu[Province])and (menu[Province][city]!={}):xian(Province,city)
     elif  city not in menu[Province] :
         print  '请输入正确的市\n'
         shi(Province)
     elif menu[Province][city] == {} :
         print "该市下面没有县或区,请添加\n"
         FileAppend(Province,city)
     elif city == '':
         '请输入正确的市\n'
         shi(Province)

 def xian(Province,city):                                           #第三级菜单查找
     for i in menu[Province][city]: print (i)
     city2 = raw_input('请选择退出(Q)或返回(B)\n')
     if city2 in Operation : OperationJudge(Province,city,city2)
     else:
         print '请输入正确的区或县\n'
         xian(Province,city)

 shen()

2018-5-13

思路

三个操作模块,分别是 增/删/改 功能
三个查询模块,分别对每一级别进行查询

报错信息:
Traceback (most recent call last):
  File "E:/python/day8/three menu.py", line 79, in <module>
    shen()
  File "E:/python/day8/three menu.py", line 37, in shen
    elif city == 'a':FileAppend(menu)
  File "E:/python/day8/three menu.py", line 17, in FileAppend
    ExChange()
  File "E:/python/day8/three menu.py", line 47, in ExChange
    FileWrite.write(menu)
TypeError: expected a string or other character buffer object

 # -*- coding: UTF-8 -*-
 #__filename:three menu
 #__time:2018/5/13 22:04

 import io
 import os

 FileRead = io.open('city','r',encoding='utf8')
 FileWrite= open('city_backup','w+')
 menu = eval(FileRead.read())

 def FileAppend(MenuAppend):

     CityAppend = raw_input("请输入添加的城市",)
     MenuAppend['CityAppend']={}
     ExChange()

 def FileDel(MenuDel):
     CityDel = raw_input("请输入你要删除的城市",)
     MenuDel.pop('CityDel')
     ExChange()

 def FileChance(MenuChance):
     CityChance = raw_input("请输入被替换的城市",)
     if CityChance in MenuChance : CityChanced = raw_input("请输入替换的城市",)
     MenuChance['CityChanced'] = MenuChance['CityChance']
     MenuChance.pop('CityChance')
     ExChange()

 def shen():
     for i in menu:print (i)
     city = raw_input('请输入你选择的省份',)
     if city == 'q': exit()
     elif city == 'd':FileDel(menu)
     elif city == 'c':FileChance(menu)
     elif city == 'a':FileAppend(menu)
     elif (city in menu) and (menu[city]!=0): shi(city)
     elif menu[city]==0 :
         print "该省下面没有市,请添加"
         FileAppend(menu[city])
     else:
         print '请输入正确的省份'
         shen()

 def ExChange():
     FileWrite.write(menu)
     FileRead.close()
     FileWrite.close()
     os.remove('FileRead')
     os.renames('FileWrite','FileRead')

 def shi(city):
     for i in menu[city]: print (i)
     city1 = raw_input('请输入你选择的市或退出程序(Q)或返回上一级菜单(B)').strip()
     if city1 == 'b':shen()
     elif city1 == 'q':exit()
     elif city1 == 'd':FileDel(menu[city])
     elif city1 == 'c':FileChance(menu[city])
     elif city1 == 'a':FileAppend(menu[city])
     elif (city1 in menu[city])and (menu[city][city1]!=0):xian(city,city1)
     elif menu[city][city1]==0 : FileAppend( menu[city][city1])
     else:
         '请输入正确的市'
         shi(city)

 def xian(city,city1):
     for i in menu[city][city1]: print (i)
     city2 = raw_input('请选择退出(Q)或返回(B) ')
     if city2 == 'b': shi(city)
     elif city2 == 'q': exit()
     elif city2 == 'd':FileDel(menu[city][city1])
     elif city2 == 'c':FileChance(menu[city][city1])
     elif city2 == 'a':FileAppend(menu[city][city1])
     else:
         '请输入正确的区或县'
         xian(city, city1)

 shen()

Python 三级菜单 增强版的更多相关文章

  1. python三级菜单实例(傻瓜版和进阶版)

    程序: python三级菜单 要求: : 1.打印省.市.县三级菜单 2.可返回上一级 3.可随时退出程序 方案一:傻瓜版(其实傻瓜版考察的主要是思路!思路清楚了,那才不是傻瓜!O(∩_∩)O哈哈~) ...

  2. python(5)- 简单练习:python三级菜单优化

    python三级菜单优化,菜鸟版链接:http://www.cnblogs.com/xuyaping/p/6648170.html menu = { '北京':{ '海淀':{ '五道口':{ 'so ...

  3. Python学习-------------------三级菜单简单版

    题目: 多级菜单         1.三级菜单         2.可依次选择进入的各子菜单         3.所需新知识点:列表.字典 ReadMe: 这个做循环,比较绕脑子 点开运行即可 Min ...

  4. python三级菜单的实现

    一.作业要求 1.使用字典实现三级菜单功能 2.直接输入前面数字进入下一级菜单 3.按B返回上一级,按Q退出 二.需要知识点 1.if循环 2.for循环,enumerate的用法 3.while循环 ...

  5. python 三级菜单 while循环三次,湖北省市-县-街道的选择,3个while的循环 -day2

    python编写一个三级while的循环菜单 1.定义字典,字典里面嵌套字典,内嵌字典的值为列表. 思路: 湖北省的市:字典中的定义3个字典,用于存储{序列-键:市名} shiqu_dir = {} ...

  6. [terry笔记]python三级菜单

    把三级菜单输出,选择后逐层显示,”b“返回上一级菜单. menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村': ...

  7. python三级菜单

    #-*- coding:utf-8 -*-#Author:gxli #一级菜单项def menu(): #遍历字典dic一级菜单 print('-----------一级菜单------------- ...

  8. Python 三级菜单与优化(一层循环嵌套)

    优化的思路是使用单层循环嵌套完成三级菜单,这个优化思路我非常喜欢,我喜欢在编程的时候用最少的东西写出同样的效果,通常这样会绕来绕去,但非常有趣!!! 需求: 1.运行程序输出第一级菜单: 2.选择一级 ...

  9. Python——三级菜单

    #三级菜单函数 menu = { '北京':{ 海淀:{ '五道口':{} '中关村':{} '上帝':{} } '昌平':{} '朝阳':{} '东城':{} }, '上海':{} '山东':{} ...

随机推荐

  1. Android的源代码下载教程-android学习之旅(102)

    一.环境准备 1.安装ubuntu系统,或者虚拟机. 2.安装java的sdk 3.安装依赖包 ,命令是:sudo apt-get install flex bison gperf libsdl-de ...

  2. Python list 两个不等长列表交叉合并

    遇到一个需求,需要对两个长度不一定相等的列表进行交叉合并.像拉拉链一样(两边的拉链不一定相等). 如: a = [1, 3, 5] b = [2, 4, 6, 8] 需将a, b 合并为 c c = ...

  3. 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework

    前言 一直以来写的博文都是比较温婉型的博文,今天这篇博文算是一篇批判性博文,有问题欢迎探讨,如标题,你到底会不会用EntityFramework啊. 你到底会不会用EntityFramework啊 面 ...

  4. vs工具

    首页 精选版块 论坛帮助 论坛牛人 论坛地图 专家问答 CSDN > CSDN论坛 > .NET技术 > 非技术区 返回列表 管理菜单 结帖 发帖 回复 关注 [推荐] Visual ...

  5. 2MySQL Server 系统架构

    2.2MySQL Server 系统架构 总的来说,MySQL 可以看成是二层架构,第一层我们通常叫做SQL Layer,在MySQL 数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限 ...

  6. unity零基础开始学习做游戏(一)为了实现你的游戏,你需要提前做的准备工作

    -------小基原创,转载请给我一个面子 正所谓,工欲善其事,必现准备好电脑.接下来跟着小基一步一步来搭建你的开发环境吧 1.下载安装unity 上面的那个是破解软件,下面是unity5.5.6的安 ...

  7. [转]用python 10min手写一个简易的实时内存监控系统

    简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...

  8. ecshop 修改记录20150710

    ecshop 修改记录20150710 1:去掉头部TITLE部分的ECSHOP演示站 Powered by ecshop 前台部分:在后台商店设置 - 商店标题修改 后者打开includes/lib ...

  9. HTML编码和CSS编码会遇到的问

    http://codeguide.bootcss.com/#html-syntax  参考链接 属性顺序 HTML 属性应当按照以下给出的顺序依次排列,确保代码的易读性. class id, name ...

  10. AUTOSAR ArcticCore重构 - for_each_HOH

    Arctic Core是AUTOSAR的实现,早期版本是开源的. 基本问题 在ARM架构下对CAN driver的实现(arch/arm/arm_cm3/drivers/Can.c)中,有这样一段代码 ...