python三级菜单_python三级菜单

本文展示了如何使用Python编写一个三级菜单交互系统。该系统允许用户在不同级别的菜单中选择,支持返回上一级菜单和退出程序的功能。通过字典、列表和循环等基本编程概念实现。
摘要由CSDN通过智能技术生成

需求:编写三级菜单

1.菜单需求:

一级菜单:            北京                                  山西

二级菜单:    朝阳                昌平               长治           大同

三级菜单:三里屯    工体       沙河  西二旗       潞城  黎城     阳高县  左云县

2.任何一级都可以输入b返回上一级,输入q退出。

3.知识涵盖字典、列表、for循环、while循环、字符串格式化

流程图:

python代码#!/bin/bash/env python

#python3.X

#定义三级菜单字典zone

zone = {

'北京':{

'朝阳':['三里屯','工体' ],

'昌平':['沙河','西二旗' ]

},

'山西':{

'长治':['潞城', '黎城' ],

'大同':['阳高县','左云县']

}

}

#定义省级列表

province_list = list(zone.keys())

#打印省级列表循环

while True:

print("欢迎光临省级列表".center(20,'-'))

#循环省级列表

for i in province_list:

#打印省级列表序号和省级名称

print(province_list.index(i)+1,i)

#提示输入

p1 = input("请选择序号:例:1  [输入q:退出]")

#判断输入的是否全是数字

if p1.isdigit():

#如果输入的是数字,用int进行强制转换成×××

p1 = int(p1)

#如果p1 大于0或者小于等于省级列表的参数数量

if p1 >0 and p1 <= len(province_list):

#求出省级名称

province_name = province_list[p1-1]

#求出省级下边的市级列表

city_list = list(zone[province_name].keys())

#打印市级列表循环

while True:

print("欢迎光临市级列表".center(20, '-'))

#循环市级列表

for c in city_list:

#打印市级列表序号和市级列表名称

print(city_list.index(c)+1,c)

#提示输入

c1 = input("请选择序号:例:1 [输入b:返回上一级][输入q:退出]")

#判断是否输入的是数字

if c1.isdigit():

c1 = int(c1)

#如果输入的序号在市级列表序列之内,打印列表,不在,告知不在。

if c1 >0 and c1 <= len(city_list):

#求出市级列表的名称

city_name = city_list[c1-1]

#求出市级下边的县级列表:

county_list = list(zone[province_name][city_name])

#县级列表循环

while True:

print("欢迎光临县级列表".center(20,"-"))

#循环县级列表

for c2 in county_list:

#打印县级列表

print(county_list.index(c2)+1,c2)

#提示输入

c2 = input("请输入相应符号:[输入b:返回上一级][输入q:退出]")

#如果输入是b 退出这个循环

if c2 == "b":

break

#如果输入的是q 退出整个循环

elif c2 == "q":

#exit() 代表退出整个循环

exit()

#如果输入的不是b、q 就提示重新输入

else:

print("\033[31m输入错误,Please re-enter!\033[0m")

else:

print("\n输入的序号%d不在此列表中!Please RE-enter!\n"%c1)

#如果输入的是b 退出这个循环

elif c1 == "b":

break

#如果输入的是q 退出整个程序

elif c1 == "q":

exit()

#如果输入的不是数字、b 、q 那么提示 重新输入

else:

print("\033[31m输入错误,Please re-enter!\033[0m")

else:

print("\n输入的%d不在此列表中!Please RE-enter!\n"%p1)

#如果不是数字,看是否是 字母q

elif p1 == "q":

#如果是q 执行exit()退出整个程序

exit()

#如果输入的不是数字和q,提示重新输入

else:

print("\033[31m输入错误,Please re-enter!\033[0m")

三级菜单优化版:#!/bin/bash/env python

# _*_ coding:utf-8 _*_

# python version: 3.x

# author: 506554897

'''

作业:三级菜单

数据结构:

menu = {

'北京':{

'海淀':{

'五道口':{

'soho':{},

'网易':{},

'google':{}

},

'中关村':{

'爱奇艺':{},

'汽车之家':{},

'优酷':{},

}

},

'上海':{

}

}

需求:

可依次选择进入各子菜单

可从任意一层往回退到上一层

可从任意一层退出程序

'''

# 三级菜单

menu = {

'北京': {

'海淀': {

'五道口': {

'soho': {},

'网易': {},

'google': {}

},

'中关村': {

'爱奇艺': {},

'汽车之家': {},

'youku': {},

},

'上地': {

'百度': {},

'腾讯': {}

},

},

'昌平': {

'沙河': {

'老男孩': {},

'北航': {},

},

'天通苑': {

'链家地产': {},

'天兰尾货': {}

},

'回龙观': {

'H3C': {},

'积水潭医院': {}

},

},

},

'上海': {

'闵行': {

"人民广场": {

'炸鸡店': {}

}

},

'闸北': {

'火车战': {

'携程': {}

}

},

}

}

# 定义全局变量

temp_menu_list = []         # 临时菜单列表(动态的)

current_menu_dic = menu     # 当前的菜单字典

count = 1       # 用于计算循环三层列表是否在 首层

# 进入菜单循环

while True:

print("欢迎光临旅游之城".center(38, "-"))

# 循环打印菜单列表

for i in current_menu_dic:

print(i)

# 判断菜单列表是否在 首层

if count == 1:

user_change = input("请选择城市名称; 输入q退出:").strip()   # 菜单在首层,不打印返回b

else:

user_change = input("请选择城市名称; 输入q退出; 输入b返回上一级:").strip()

# 判断用户选择的是否在菜单列表中

if user_change in current_menu_dic:

if len(current_menu_dic[user_change]) > 0:  # 判断菜单字典的 key值 有无value,无value说明到底层了

temp_menu_list.insert(0, current_menu_dic)      # 将当前的菜单字典,加入到临时菜单列表,用于返回菜单使用

current_menu_dic = current_menu_dic[user_change]    # 将用户选择后的菜单字典赋值给当前的菜单字典

count += 1

else:

print("\033[31m已经是最底层了!\033[0m")    # 当前菜单字典的key值 无value 就打印已经是底层了

# 当用户已经到达首层,还在输入b返回上一级,就告诉用户这已经是首层了

elif user_change == "b" and count == 1:

print("\033[31m已经是最首层了!\033[0m")

# 当用户输入b 返回上一级菜单

elif user_change == "b":

current_menu_dic = temp_menu_list[0]    # 将上一级菜单字典 赋值给当前菜单字典,作为新的菜单

temp_menu_list.pop(0)       # 在临时菜单列表中删除上一次循环change后的当前菜单字典

count -= 1

elif user_change == "q":

print("谢谢光临旅游之城".center(38, "*"))

exit()

else:

print("\033[31m输入错误 请重新输入!\033[0m")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值