路飞学城python开发ftp_路飞学城-Python开发-第二章

'''数据结构:

menu = {

'北京':{

'海淀':{

'五道口':{

'soho':{},

'网易':{},

'google':{}

},

'中关村':{

'爱奇艺':{},

'汽车之家':{},

'youku':{},

},

'上地':{

'百度':{},

},

},

'昌平':{

'沙河':{

'老男孩':{},

'北航':{},

},

'天通苑':{},

'回龙观':{},

},

'朝阳':{},

'东城':{},

},

'上海':{

'闵行':{

"人民广场":{

'炸鸡店':{}

}

},

'闸北':{

'火车战':{

'携程':{}

}

},

'浦东':{},

},

'山东':{},

}

需求:

可依次选择进入各子菜单

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

可从任意一层退出程序

所需新知识点:列表、字典'''

#1.只用一个while循环,且整体代码量少于15行按完成需求/条—25分#2.只用一个while循环,且整体代码量多于15行需求全部完成给90分#3.其他情况按完成需求/条—20分

menu={'北京':{'海淀':{'五道口':{'soho':{},'网易':{},'google':{}

},'中关村':{'爱奇艺':{},'汽车之家':{},'youku':{},

},'上地':{'百度':{},

},

},'昌平':{'沙河':{'老男孩':{},'北航':{},

},'天通苑':{},'回龙观':{},

},'朝阳':{},'东城':{},

},'上海':{'闵行':{"人民广场":{'炸鸡店':{}

}

},'闸北':{'火车战':{'携程':{}

}

},'浦东':{},

},'山东':{},

}

new_menu=menu

menu_list=[]whileTrue: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 innew_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

# print(l[index])

# index+=1

# 1

# 2

# 3

# 4

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值