女神博客:https://www.cnblogs.com/Eva-J/articles/11168936.html#_label4
练习题
1、请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=[‘alex’, ‘eric’, ‘rain’]
2、查找列表中元素,移除每个元素的空格,并查找以a或A开头并且以c结尾的所有元素。
li = ["alec", " aric", "Alex", "Tony", "rain"tu = ("alec", " aric", "Alex", "Tony", "rain"dic = {'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"}
3、写代码,有如下列表,按照要求实现每一个功能
li=[‘alex’, ‘eric’, ‘rain’]
- 计算列表长度并输出
- 列表中追加元素“seven”,并输出添加后的列表
- 请在列表的第1个位置插入元素“Tony”,并输出添加后的列表
- 请修改列表第2个位置的元素为“Kelly”,并输出修改后的列表
- 请删除列表中的元素“eric”,并输出修改后的列表
- 请删除列表中的第2个元素,并输出删除的元素的值和删除元素后的列表
- 请删除列表中的第3个元素,并输出删除元素后的列表
- 请删除列表中的第2至4个元素,并输出删除元素后的列表
- 请将列表所有的元素反转,并输出反转后的列表
- 请使用for、len、range输出列表的索引
- 请使用enumrate输出列表元素和序号(序号从100开始)
- 请使用for循环输出列表的所有元素
4、写代码,有如下列表,请按照功能要求实现每一个功能
li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]
- 请根据索引输出“Kelly”
- 请使用索引找到’all’元素并将其修改为“ALL”,如:li[0][1][9]…
5、有如下变量,请实现要求的功能
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
- 讲述元组的特性
- 请问tu变量中的第一个元素“alex”是否可被修改?
- 请问tu变量中的”k2”对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素“Seven”
- 请问tu变量中的”k3”对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素“Seven”
6、转换
- 将字符串s = “alex”转换成列表
- 将字符串s = “alex”转换成元祖
- 将列表li = [“alex”, “seven”]转换成元组
- 将元组tu = (‘Alex’, “seven”)转换成列表
- 将列表li = [“alex”, “seven”]转换成字典且字典的key按照10开始向后递增
7、元素分类
有如下值集合[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。
即:{‘k1’:大于66的所有值, ‘k2’:小于66的所有值}。(编程题)
8、在不改变列表数据结构的情况下找最大值li = [1,3,2,7,6,23,41,243,33,85,56]。(编程题)
9、在不改变列表中数据排列结构的前提下,找出以下列表中最接近最大值和最小值的平均值 的数li = [-100,1,3,2,7,6,120,121,140,23,411,99,243,33,85,56]。(编程题)
10、利用for循环和range输出9 * 9乘法表 。(编程题)
11、求100以内的素数和。(编程题)
12、请说明python2 与python3中的默认编码是什么?
13、为什么会出现中文乱码?你能列举出现乱码的情况有哪几种?
14、分别写出在windows和mac上用py2输出中文怎么做?
15、任一个英文的纯文本文件,统计其中的每个单词出现的个数,注意是每个单词。。
# -*- coding:utf-8 -*- # caiqinxiong # 2019/7/14 下午12:02 # 身份运算符 # a = 1 # b = 1 # print(a is b) # print(a is not b) # print(id(a)) # print(id(b)) # list_name = ['caqinxiong','lixiaoxin','somebody','anybody'] # 切片,顾头不顾尾 # print(list_name[1:3:2]) # print(list_name[-3:-1:-1]) # star:end:step # print(list_name[-1:-3:-1]) # star:end:step # print(list_name[::-1]) # 列表反转 # # del lilist_namest # print(lilist_namest) # # list_info = [] # name = input('input your name:') # passwd = input('input your passwd:') # age = input('input your age:') # list_info.append(name) # list_info.append(passwd) # list_info.append(age) # print(list_info) # # n = 0 # name_list = [] # while n<5: # name = input('input your name:') # if name in name_list: # print('名字已存在!') # else: # name_list.append(name) # n +=1 # print(name_list) ''' # 让用户输入用户名和密码 # 只要用户名和密码对上了l中的值,显示登陆成功 # 否则,显示登陆失败 ''' # l = [['alex','222'],['wusir','666'],['周老板','123456']] # name = input('input your name:') # passwd = input('input your passwd:') # for username in l: # if name == l[l.index(username)][0] and passwd == l[l.index(username)][1]: # print('登录成功!') # break # else: # print('登录失败!') # # # a = [['k1',2],['k3',4]] # for k,v in a: # print(k) ########################################################分割线########################################################### ''' 1、请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=[‘alex’, ‘eric’, ‘rain’] ''' # li = ['alex', 'eric', 'rain'] # s = '_' # s = s.join(li) # print(s) # ''' 2、查找列表中元素,移除每个元素的空格,并查找以a或A开头并且以c结尾的所有元素。 li = ["alec", " aric", "Alex", "Tony", "rain"] tu = ("alec", " aric", "Alex", "Tony", "rain") dic = {'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"} ''' # (1)题 # li = ["alec", " aric", "Alex", "Tony", "rain"] # find_list = [] # for i in li: # i = i.strip() # if (i.startswith('a') or i.startswith('A') ) and i.endswith('c') : # find_list.append(i) # print('以a或A开头并且以c结尾的元素为:\n%s' % find_list) # (2)题 # tu = ("alec", " aric", "Alex", "Tony", "rain") # find_list = [] # for i in tu: # i = i.strip() # if (i.startswith('a') or i.startswith('A') ) and i.endswith('c') : # find_list.append(i) # print('以a或A开头并且以c结尾的元素为:\n%s' % find_list) # (3)题 # dic = {'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"} # find_list = [] # # 方法一: # # for key,value in dic.items(): # # value = value.strip() # # if (value.startswith('a') or value.startswith('A')) and value.endswith('c'): # # find_list.append(value) # # print('以a或A开头并且以c结尾的元素为:\n%s' % find_list) # # # 方法二: # for name in dic: # name = dic[name].strip() # if (name.startswith('a') or name.startswith('A')) and name.endswith('c'): # find_list.append(name) # print('以a或A开头并且以c结尾的元素为:\n%s' % find_list) ''' 3、写代码,有如下列表,按照要求实现每一个功能 li=[‘alex’, ‘eric’, ‘rain’] 计算列表长度并输出 列表中追加元素“seven”,并输出添加后的列表 请在列表的第1个位置插入元素“Tony”,并输出添加后的列表 请修改列表第2个位置的元素为“Kelly”,并输出修改后的列表 请删除列表中的元素“eric”,并输出修改后的列表 请删除列表中的第2个元素,并输出删除的元素的值和删除元素后的列表 请删除列表中的第3个元素,并输出删除元素后的列表 请删除列表中的第2至4个元素,并输出删除元素后的列表 请将列表所有的元素反转,并输出反转后的列表 请使用for、len、range输出列表的索引 请使用enumrate输出列表元素和序号(序号从100开始) 请使用for循环输出列表的所有元素 ''' # li = ['alex','eric','rain'] # print('原列表值为: \n%s' % li) # print('列表长度为:%s ' % len(li)) # li.append('seven') # print('列表中追加元素“seven”后:\n%s' % li) # li.insert(0,'Tony') # print('在列表的第1个位置插入元素“Tony”后为:\n',li) # li[1] = 'Kelly' # print('修改列表第2个位置的元素为“Kelly”\n',li) # li.remove('eric') # print('删除列表中的元素“eric”\n',li) # del_name = li.pop(1) # print('删除的元素的值为:\n',del_name) # print('删除列表中的第2个元素后为:\n',li) # li.pop(2) # print('删除列表中的第3个元素后为:\n',li) # li = ['alex','eric','rain','caiqinxiong','lixiaoxin'] # print('原列表值为: \n%s\n' % li) # for i in range(3): # # 循环删除index为1的元素,删3次。 # li.pop(1) # print('删除列表中的第2至4个元素后为:\n',li) # li.reverse() # print('列表所有的元素反转后为:\n',li) # print('使用for、len、range输出列表的索引') # for i in range(len(li)): # print(i,end=' ') # print('请使用enumrate输出列表元素和序号(序号从100开始)') # for k,v in enumerate(li): # print('列表的元素为:', v) # print('从100开始的序号为:',k+100) # # print('请使用for循环输出列表的所有元素') # for i in li: # print(i,end='\t') ''' 4、写代码,有如下列表,请按照功能要求实现每一个功能 li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446] 请根据索引输出“Kelly” 请使用索引找到’all’元素并将其修改为“ALL”,如:li[0][1][9]… ''' # li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446] # print('请根据索引输出“Kelly”') # print(li[2][1][1]) # print('请使用索引找到’all’元素并将其修改为“ALL”') # li[2][2] = 'ALL' # print(li) ''' 5、有如下变量,请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44]) 讲述元组的特性 请问tu变量中的第一个元素“alex”是否可被修改? 请问tu变量中的”k2”对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素“Seven” 请问tu变量中的”k3”对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素“Seven” ''' # 类似list,可查询,遍历元素,切片等,但是不能修改元素的值。不可用删除/增加和修改。 # tu变量中的第一个元素“alex”不可被修改 # tu变量中的”k2”对应的值是list,可以被修改 # tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44]) # print(type(tu[1][2]['k2'])) # tu[1][2]['k2'].append('Seven') # print(tu[1][2]['k2']) # print(tu) # tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44]) # tu变量中的”k3”对应的值是tuple,可以被修改,因为字典的值可以是任意字符。 # print(type(tu[1][2]['k3'])) # tu[1][2]['k3'] = 'Seven' # print(tu[1][2]['k3']) # print(tu) ''' 6、转换 将字符串s = “alex”转换成列表 将字符串s = “alex”转换成元祖 将列表li = [“alex”, “seven”]转换成元组 将元组tu = (‘Alex’, “seven”)转换成列表 将列表li = [“alex”, “seven”]转换成字典且字典的key按照10开始向后递增 ''' # # s = 'alex' # print('将字符串s = “alex”转换成列表') # s = list(s) # print(s) # # print('将字符串s = “alex”转换成元祖') # s = 'alex' # s = tuple(s) # print(s) # # print('将元组tu = (‘Alex’, “seven”)转换成列表') # tu = ('Alex', "seven") # tu = list(tu) # print(tu) # print('将列表li = [“alex”, “seven”]转换成字典且字典的key按照10开始向后递增') # li = ['Alex','seven'] # dic = {} # for i in range(len(li)): # dic[i+10] = li[i] # print(dic) ''' 7、元素分类 有如下值集合[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。 即:{‘k1’:大于66的所有值, ‘k2’:小于66的所有值}。(编程题) ''' # set = [11,22,33,44,55,66,77,88,99,90] # lst1 = [] # lst2 = [] # dic = {} # for i in set: # if i > 66: # lst1.append(i) # elif i < 66: # lst2.append(i) # else: # pass # dic['k1'] = lst1 # dic['k2'] = lst2 # print(dic) ''' 8、在不改变列表数据结构的情况下找最大值li = [1,3,2,7,6,23,41,243,33,85,56]。(编程题) ''' # li = [1,3,2,7,6,23,41,243,33,85,56] # print('该列表中的最大值为:',max(li)) # 方法二 # n =li[0] # for i in li : # if i > n: # n = i # print(n) ''' 9、在不改变列表中数据排列结构的前提下,找出以下列表中最接近最大值和最小值的平均值的数 li = [-100,1,3,2,7,6,120,121,140,23,411,99,243,33,85,56]。(编程题) ''' # import copy # li = [-100,1,3,2,7,6,120,121,140,23,411,99,243,33,85,56] # lst = copy.deepcopy(li) # # 列表中最接近最大值和最小值的平均值 # # 方法一 # average = (max(li)+min(li))/2 # print('列表中最大值和最小值的平均值的数为:',average) # lst.sort() # print(li) # print(lst) # index = int(len(lst)/2) # for i in range(index,len(lst)): # if lst[i] > int(average): # if (lst[i] - int(average)) > (int(average) - lst[i-1]): # num=lst[i-1] # else: # num=print(lst[i]) # print('列表中最接近最大值和最小值的平均值的数为:',num) # break # 方法二 # n = li[0] # m =li[0] # for i in li : # if i > n: # n= i # if i< m: # m =i # i =(n+m)/2 # print(i) ''' 10、利用for循环和range输出9 * 9乘法表 。(编程题) ''' # for i in range(1,10): # for j in range(1,i+1): # print('%s * %s = %s ' % (i,j,i*j),end=' ') # print() ''' 11、求100以内的素数和。(编程题) ''' # num=[] # i=2 # for i in range(2,100): # j=2 # for j in range(2,i): # if(i%j==0): # break # else: # num.append(i) # print(num) # print(sum(num))
作业一
# 1.三次登录
# {'用户名':'密码',...}
# 进阶 :注册
# -*- coding: utf-8 -*- def getUser(): '''获取用户名信息''' user_list = [] try: f = open('user.txt', 'r') users = f.readlines() for user in users: user_list.append(user.split()) except: print("用户信息文件未存在!") user_list = [] return dict(user_list) def login(): '''登录''' user = getUser() name = input("please input your name:") if name in user: for j in range (1,4): password = input("please input your pass:") if password == user[name]: print('登录成功!!!') return True else: print ("password error!!!") num = 3 - j print ("you have %d change!" % num ) else: print ("用户名 %s 不存在!!" % name) reg = input('''请选择: 重新尝试 输入 1 注册新用户 输入 2 退出 输入其他任意字符\n''') if reg == '2': register() elif reg == "1": login() else: print('goodbye!!') return False def register(): '''注册''' user = getUser() for i in range(3): name = input("please input your name:") if name in user: print("用户名已存在!!") continue passwd1 = input("please input your password!") passwd2 = input("please input your password again!") if passwd1 == passwd2: print("注册成功! ") f = open('user.txt','a') f.write(name + ' ' + passwd1 + '\n') f.close() break else: print("输入的密码不一致,请重新输入!") else: print("操作过于频繁,请稍后再试!") if __name__ == '__main__': print('欢迎登录XXX系统!') login()
# -*- coding: utf-8 -*- __author__ = 'caiqinxiong' # 2019/7/17 22:30 # 用户信息 user_info = {'caiqinxiong': 'cai', 'lixiaoxin': '123'} def loggin(user_info): '''登录''' i = 3 while i > 0: i -= 1 username = input('请输入用户名:') if username in user_info: j = 3 while j > 0: j -= 1 password = input('请输入密码:') if password == user_info[username]: print('welcom to old boy!!!') exit(-1) else: print('密码输入有误!') if j == 0: print('您的尝试机会已用完,账号已锁定,请10分钟后重新尝试!') exit(-1) else: print('你还有%s次尝试机会!' % j) else: print('用户名不存在!') if i != 0: print('你还有%s次尝试机会!' % i) else: print('您的尝试机会已用完,是否注册新用户?Y/N') while True: choise = input().strip().upper() if 'Y' == choise: register(user_info) break elif 'N' == choise: print('谢谢使用!') exit(-1) else: print('输入有误!') def register(user_info): '''注册''' i = 3 while i > 0: i -= 1 username = input('请输入用户名:') if username in user_info: print('用户名已存在!') if i != 0: print('请重新输入,你还有%s次尝试机会!' % i) else: print('您的尝试次数已用完!') else: j = 3 while j > 0: j -= 1 password1 = input('请输入密码:') password2 = input('请再次输入密码:') if password1 == password2: print('注册成功,是否登录?Y/N') user_info[username] = password1 while True: choise = input().strip().upper() if 'Y' == choise: loggin(user_info) break elif 'N' == choise: print('谢谢使用!') exit(-1) else: print('输入有误!') else: print('两次输入密码不一致!') if j == 0: print('操作过于频繁,谢谢使用!') exit(-1) else: print('你还有%s次尝试机会!' % j) def menu(): '''首页''' print('欢迎登录oldBoy官网!') print('1、登录') print('2、注册') while True: choise = input('请选择:').strip() if '1' == choise: loggin(user_info) break elif '2' == choise: register(user_info) break else: print('输入有误!') if __name__ == '__main__': menu()
作业二
# 2.三级菜单
最后发现用递归调用函数是解决这个问题的最好方式,代码量少,基本没有bug。
# -*- coding:utf-8 -*- # caiqinxiong # 2019/7/17 下午11:37 menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车战': { '携程': {} } }, '浦东': {}, }, '山东': {}, } if __name__ == '__main__': # 只能回退一层 print('欢迎使用三级菜单小程序!') while True: for name in menu: print(name) choise = input('请选择:').strip() if choise in menu.keys() and menu[choise]: super_dict = menu menu = menu[choise] elif 'B' == choise.upper(): menu = super_dict elif 'Q' == choise.upper(): print('谢谢使用!') exit(-1) elif choise in menu.keys() and menu[choise] == {}: print('已经是最底层!') else: print('输入有误!')
# -*- coding:utf-8 -*- # caiqinxiong # 2019/7/17 下午11:37 menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车战': { '携程': {} } }, '浦东': {}, }, '山东': {}, } # 只能输入两层,然后回退 print('欢迎使用三级菜单小程序!') tmp_dic = menu choise_list = [] n = 1 while True: for name in tmp_dic: print(name) choise = input('请选择:').strip() if choise in tmp_dic.keys() and tmp_dic[choise]: if not choise in choise_list: choise_list.append(choise) #print(choise_list) super_dict = tmp_dic tmp_dic = tmp_dic[choise] elif 'B' == choise.upper(): tmp_dic = super_dict choise_list.pop() if n == 2: tmp_dic = menu n -= 2 n += 1 #print(n) elif 'Q' == choise.upper(): print('谢谢使用!') exit(-1) elif choise in tmp_dic.keys() and tmp_dic[choise] == {}: print('已经是最底层!!') else: print('输入有误!')
# -*- coding:utf-8 -*- # caiqinxiong # 2019/7/17 下午11:37 menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车战': { '携程': {} } }, '浦东': {}, }, '山东': {}, } print('欢迎使用三级菜单小程序!') tmp_dic = menu choise_list = [] n = 1 m = 0 while True: for name in tmp_dic: print(name) choise = input('请选择:').strip() if choise in tmp_dic.keys() and tmp_dic[choise]: if not choise in choise_list: choise_list.append(choise) #print(choise_list) super_dict = tmp_dic tmp_dic = tmp_dic[choise] m += 1 elif 'B' == choise.upper(): tmp_dic = super_dict choise_list.pop() #print(choise_list) if len(choise_list) < 2 and m <= 2: if n == 2: tmp_dic = menu n -= 2 n += 1 m -= 1 else: if n == 2: tmp_dic = menu[choise_list[len(choise_list)-1]] n -= 2 m +=1 elif m == 4: tmp_dic = menu m -= 1 n += 1 elif 'Q' == choise.upper(): print('谢谢使用!') exit(-1) elif choise in tmp_dic.keys() and tmp_dic[choise] == {}: print('已经是最底层!!') else: print('输入有误!')
# -*- coding:utf-8 -*- # caiqinxiong # 2019/7/17 下午11:37 menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车战': { '携程': {} } }, '浦东': {}, }, '山东': {}, } def printDict(menu): '''打印字典''' for i in menu: print(i) def lverlOne(): '''第一层''' #print(11111111) while True: choise = input("请选择:").strip() if choise in menu: printDict(menu[choise]) lverlTwo(choise) break elif 'B' == choise.upper(): print('已经是最上层!') printDict(menu) elif 'Q' == choise.upper(): exit(-1) else: print("输入错误,请重新输入!") def lverlTwo(lverlOne_chise): '''第二层''' #print(22222222) while True: choise = input("请选择:").strip() if choise in menu[lverlOne_chise]: printDict(menu[lverlOne_chise][choise]) lverlThree(lverlOne_chise,choise) break elif 'B' == choise.upper(): printDict(menu) lverlOne() break elif 'Q' == choise.upper(): exit(-1) else: print("输入错误,请重新输入!") def lverlThree(lverlOne_chise,lverlTwo_chise): '''第三层''' #print(3333333) while True: choise = input("请选择:").strip() if choise in menu[lverlOne_chise][lverlTwo_chise]: printDict(menu[lverlOne_chise][lverlTwo_chise][choise]) lverlFour(lverlOne_chise,lverlTwo_chise,choise) elif 'B' == choise.upper(): printDict(menu[lverlOne_chise]) lverlTwo(lverlOne_chise) break elif 'Q' == choise.upper(): exit(-1) else: print("输入错误,请重新输入!") def lverlFour(lverlOne_chise,lverlTwo_chise,lverThree_choise): '''第四层''' #print(4444444) while True: choise = input("请选择:").strip() if choise in menu[lverlOne_chise][lverlTwo_chise][lverThree_choise]: print('已经是最后一层啦!返回上层按b,退出按q!') elif 'B' == choise.upper(): printDict(menu[lverlOne_chise][lverlTwo_chise]) lverlThree(lverlOne_chise,lverlTwo_chise) break elif 'Q' == choise.upper(): exit(-1) else: print("输入错误,请重新输入!") if __name__ == '__main__': print('欢迎使用三级菜单小程序!') printDict(menu) lverlOne()
# -*- coding:utf-8 -*- # caiqinxiong # 2019/7/17 下午11:37 menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车战': { '携程': {} } }, '浦东': {}, }, '山东': {}, } choise_list = [] def threeLevelMenu(menu): while True: # 打印字典 print('~'*20) for name in menu: print(name) choise = input('请选择:').strip() if choise in menu.keys() and menu[choise]: if not choise in choise_list: choise_list.append(choise) #print(menu[choise]) #print(choise_list) threeLevelMenu(menu[choise]) #再次调用函数,相当于循环,调用了几次,就需要几个return才能结束。 elif 'B' == choise.strip().upper(): #print(choise_list) if len(choise_list) == 0: print('~' * 20) print('\033[31;1m已经是最顶层啦!\033[0m') else: print('~' * 20) print('\033[34;1m返回上层啦!\033[0m') choise_list.pop() return choise elif 'Q' == choise.strip().upper(): print('\033[36;5m谢谢使用!\033[5m') exit(-1) else: try: # 处理key值异常 if menu[choise] == {}: print('~' * 20) print('\033[31;1m已经是最底层啦!返回上层按b,退出按q!\033[0m') except: print('输入有误,请重新输入!') if __name__ == '__main__': print('~' * 20) print('\033[36;5m欢迎使用三级菜单小程序!\033[5m') threeLevelMenu(menu)
浙公网安备 33010602011771号