女神博客:https://www.cnblogs.com/Eva-J/articles/11168936.html#_label4

练习题

1、请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=[‘alex’, ‘eric’, ‘rain’]

2、查找列表中元素,移除每个元素的空格,并查找以a或A开头并且以c结尾的所有元素。

  1. li = ["alec", " aric", "Alex", "Tony", "rain"
  2. tu = ("alec", " aric", "Alex", "Tony", "rain"
  3. 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、写代码,有如下列表,请按照功能要求实现每一个功能

  1. li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]
    • 请根据索引输出“Kelly”
    • 请使用索引找到’all’元素并将其修改为“ALL”,如:li[0][1][9]…

 

5、有如下变量,请实现要求的功能

  1. 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()
登录注册-版本1
# -*- 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

作业二

# 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('输入有误!')
三级菜单-版本1
# -*- 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('输入有误!')
三级菜单-版本2
# -*- 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('输入有误!')
三级菜单-版本3
# -*- 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()
三级菜单-版本4
# -*- 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)
三级菜单-版本5

 

posted on 2019-07-18 23:22  雨之夜&秋  阅读(203)  评论(0)    收藏  举报