• 路飞学城-Python开发-第二章


    '''
    数据结构:
    
    menu = {
        '北京':{
            '海淀':{
                '五道口':{
                    'soho':{},
                    '网易':{},
                    'google':{}
                },
                '中关村':{
                    '爱奇艺':{},
                    '汽车之家':{},
                    'youku':{},
                },
                '上地':{
                    '百度':{},
                },
            },
            '昌平':{
                '沙河':{
                    '老男孩':{},
                    '北航':{},
                },
                '天通苑':{},
                '回龙观':{},
            },
            '朝阳':{},
            '东城':{},
        },
        '上海':{
            '闵行':{
                "人民广场":{
                    '炸鸡店':{}
                }
            },
            '闸北':{
                '火车战':{
                    '携程':{}
                }
            },
            '浦东':{},
        },
        '山东':{},
    }
    
    需求:
    可依次选择进入各子菜单
    可从任意一层往回退到上一层
    可从任意一层退出程序
    所需新知识点:列表、字典
    '''
    # 1.只用一个while循环,且整体代码量少于15行按完成需求/条—25分
    # 2.只用一个while循环,且整体代码量多于15行需求全部完成给90分
    # 3.其他情况按完成需求/条—20分
    
    menu = {
        '北京':{
            '海淀':{
                '五道口':{
                    'soho':{},
                    '网易':{},
                    'google':{}
                },
                '中关村':{
                    '爱奇艺':{},
                    '汽车之家':{},
                    'youku':{},
                },
                '上地':{
                    '百度':{},
                },
            },
            '昌平':{
                '沙河':{
                    '老男孩':{},
                    '北航':{},
                },
                '天通苑':{},
                '回龙观':{},
            },
            '朝阳':{},
            '东城':{},
        },
        '上海':{
            '闵行':{
                "人民广场":{
                    '炸鸡店':{}
                }
            },
            '闸北':{
                '火车战':{
                    '携程':{}
                }
            },
            '浦东':{},
        },
        '山东':{},
    }
    new_menu = menu
    menu_list = []
    while True:
        print('Here is Ur menu')
        for k in new_menu:print(k)
        order = input('please input your order(choice or B(b) or Q(q))>>>').strip()
        if order not in new_menu and order.lower()!= 'q' and order.lower()!= 'b':continue
        if order in new_menu:
            menu_list.append(new_menu)
            new_menu = new_menu[order]
        if order.lower() == 'q':break
        if order.lower() == 'b'and len(menu_list)!=0:
            new_menu = menu_list.pop()
        else:print('It is already the top!')
    三级菜单

     1.程序是数据和算法的结合(名词是数据,动词是算法)

    2.尽量少的处理文件或者操作数据库

    3.数据结构设计的好坏,直接影响了算法的实现复杂度

    4.应不断的优化自己的代码,阅读他人的优秀的思路

    ##################################################################

    #文件操作的其他方法

    ##############################################################################
    #文件的内置操作函数
    # 1.closed 查看文件是否是关闭的状态,输出为布尔值,关闭的为True,未关闭的为False
    # 2.encoding表示编码的形式,函数方法打开的编码形式
    # print(f.encoding)
    # cp936
    #************************************************************************
    #不知道文件编码是什么形式的情况下,还是要写文件或读文件的信息,处理办法:
    #用拉丁文的方式打开文件latin-1
    # f = open('test','r+',encoding='latin-1')#尽可能多的保留数据
    # data = f.read()
    # print(data)
    # f.write('aaaaaaaa')
    #文件的编码获取的是系统的默认编码
    # f = open('test','r+',encoding='UTF-8')
    # f.flush()#刷新,使用这个命令就会保存文件
    # f.isatty()#终端设备
    # print(f.tell())
    # f.readline()
    # f.readline()
    # print(f.tell())#光标的当前位置
    #newline=''就是不要python自带的屏蔽参数
    #文件内光标的移动:除了read()代表读取3个字符,其余的文件内光标的移动都是以字节为单位,如seek、tell、read
    # f.seek(3)
    # print(f.read())
    # 456
    # 789
    # opqsdasdnagaaaaaaaaaaaaaaaa
    # print(f.read(5))
    # 123
    # 4
    # f.truncate(10)#文件截断,属于文件的切割写操作
    # print(f.truncate(10))
    #####################################################################
    # f = open('test','rb')
    # print(f.tell())
    # f.seek(10)
    # print(f.tell())
    # f.seek(3)
    # print(f.tell())
    #seek的移动光标默认是从0的位置开始移动
    #############################################################
    #seek的几种用法
    #1.必须为'rb'模式才可以使用
    #参数1为接指定上一次光标后的位置
    #参数2为倒序,从结尾开始的光标,前面的顺序必须为负数的形式
    # print(f.tell())
    # f.seek(-1,2)
    # print(f.tell())
    # f.seek(3,1)
    # print(f.tell())
    #################################################################################################################
    #高端玩法:打开大文件的最后一行
    # f = open('test','rb')
    # for i in f:
    # offs = -5#偏移量需要自己估计,最后一行大约有多少个字节
    # while True:#做一个死循环
    # f.seek(offs,2)
    # rows = f.readlines()#从当前光标位置开始读取一行的所有内容
    # if len(rows) > 1:#如果文件读取的行数超过1行,则打印最后一行
    # print('文件的最后一行是%s'%(rows[-1].decode('UTF-8')))
    # break
    # offs*=2
    # 文件的最后一行是+---------------------------------------------------------------------------+
    #***************************************************************************************************************#
    # 什么是递归?
    # 函数自己调用自己的方法就是递归
    # 什么是迭代?
    # 可以被for循环遍历的,每次循环得到的结果都是上一次的结果得出的
    # 什么是迭代器协议?
    # 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,
    # 以终止迭代(只能往后不能往前退)
    # 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个_iter_()方法)
    # 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环、sum、min、max函数等)使用迭代器协议访问对象
    # l = [1,2,3,4]
    # for i in l:
    # print(i)
    ######################Python的for循环机制##########################################################
    # for循环的本质:循环所有的对象,全都是使用迭代器协议
    #(字符串、列表、元祖、字典、集合、文件对象)这些都不是可迭代对象,只不过在for循环式,调用了内部的_iter_方法,变成了可迭代对象
    # 然后for循环调用可迭代对象的_next_方法去取值,而且for循环会捕捉Stoplteration异常,以终止迭代
    # l = [1,2,3,4]
    # for i in l: #1.先执行_iter_(),再执行next方法
    # print(i) #捕捉了异常,不再迭代
    # l = [1,2,3,4]
    # iter = l.__iter__()#遵循迭代器协议,生成可迭代对象
    # print(iter.__next__())
    # print(iter.__next__())
    # print(iter.__next__())
    # print(iter.__next__())
    # l = [1,2,3,4]
    # index = 0
    # while index<len(l):
    # print(l[index])
    # index+=1
    # 1
    # 2
    # 3
    # 4
    Win a contest, win a challenge
  • 相关阅读:
    Sublime Text 3 3126 注册码
    修改bootstrap 的全局样式,bootstrap 3.0 是由html5和CSS 3组成的
    mysql-sql高级应用
    MySQL 主键冲突,无法插入数据
    jquery加载页面的方法(页面加载完成就执行)
    Jquery怎么获取select选中项 自定义属性的值
    使用Yii2中dropdownlist实现地区三级联动的例子
    Yii2中省市三级联动(栏目联动)
    [HNOI2009] 梦幻布丁
    [CJOJ2410]数列操作d
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/9211168.html
Copyright © 2020-2023  润新知