''' 数据结构: 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