需要实现的功能是:
三级菜单
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. 数据结构---栈C语言实现

    #include <stdio.h> #include <stdlib.h> #define uchar unsigned char #define uint unsigned ...

  2. 大数据项目中的Oracle查询优化

    今天发现自己之前写的一些SQL查询在执行效率方面非常不理想,于是尝试做了些改进. 需求为查询国地税表和税源表中,国税有而税源没有的条目数,之前的查询如下: SELECT COUNT(NAME) FRO ...

  3. struts 开发流程

  4. ssh优缺点

    面试归来 技术面试官叫我谈谈 ssh优缺点 平时用起来倒是挺顺手..但是从来没有系统的总结过..导致很多点会都没有说出来.. 这次我认真总结了一下... 常说的好处 开源 常说的坏处 配置文件过大我就 ...

  5. Delphi 项目总结

    Delphi 项目总结 随着项目的失败,这些天一直在总结失败的原因,到底是为什么?     一.技术层面         1.少用指针类型,多用类.             虽然指针类型能有效的节约内 ...

  6. IDEA: 遇到问题Error during artifact deployment. See server log for details解决方法

    1.检查tomcat是否配置正确. 2.检查配置文件是否配置正确,web.xml.等. 3. 4.

  7. Android开发之深入理解Android 7.0系统权限更改相关文档

    http://www.cnblogs.com/dazhao/p/6547811.html 摘要: Android 6.0之后的版本增加了运行时权限,应用程序在执行每个需要系统权限的功能时,需要添加权限 ...

  8. 移动 Web 的用户界面设计

    http://www.ibm.com/developerworks/cn/mobile/wa-interface/index.html 简介 在创新者试图探索新的可能性的同时,新兴技术也在经历快速变化 ...

  9. php插入mysql中文数据出现乱码

    $con = mysqli_connect(DB_HOST, DB_USER, DB_PWD, $dbname) or die('数据库连接失败'); mysqli_set_charset($con, ...

  10. Ocelot中文文档-架构图

    Ocelot 针对的是,使用.net运行微服务和面向服务架构,并且需要一个统一的入口来访问他们系统的人群. 特别是,我想要与IdentityServer和令牌轻松集成. Ocelot是一组有特定顺序的 ...