声明式编程:
1、将names = ['egon','alex_sb','wupeiqi','yuanhu']中的名字全部大写
names = ['egon','alex_sb','wupeiqi','yuanhu'] names = map(lambda x:x.upper(),names) print(list(names)) #['EGON', 'ALEX_SB', 'WUPEIQI', 'YUANHU']
2、将names = ['egon','alex_sb','wupeiqi','yuanhu']中的名字全部大写
names = ['egon','alex_sb','wupeiqi','yuanhu'] res = filter(lambda name:not name.endswith('sb'),names) print(list(res)) #['egon', 'wupeiqi', 'yuanhu']
3、求文件a.txt中最长的行的长度,(长度以字符个数计算,需要使用max函数)
f = open(r'a.txt','rt',encoding='utf-8') res = len(max(f,key=lambda x:len(x))) print(res) f.close() #30
4、求a.txt文件中字符的个数,思考在第一次后的n次求和中sum求和的结果都为0,(需要使用sum函数)
f = open(r'a.txt','rt',encoding='utf-8') res = sum(map(lambda x:len(x),f)) print(res) #90
5、思考题
with open(r'a.txt','r',encoding='utf-8') as f: g = (len(line) for line in f) print(sum(g)) #为何出错
求sum(g)的时候,文件已经关闭,没有办法是文件迭代生成想要的内容,可以改为:
f= open(r'a.txt','r',encoding='utf-8') g = (len(line) for line in f) print(sum(g)) f.close()
6、文件shopping.txt内容如下:
mac,20000,3 lenovo,3000,10 tesla,1000000,10 chicken,200,1
求总价:
f = open(r'shopping.txt','r',encoding='utf-8') res = map(lambda x:x.strip(' ').split(','),f) total = sum(map(lambda x:float(x[1])*float(x[2]),res)) print(total) f.close() #10090200.0
打印商品信息 格式为:
[{'name':'xxx','price':'xxxx','count':'xx'}]
f = open(r'shopping.txt','r',encoding='utf-8') # [{'name':'xxx','price':'xxxx','count':'xx'}] res = map(lambda x:x.strip(' ').split(','),f) msg = map(lambda x:{'name':x[0],'price':x[1],'count':x[2]},res) msg_list=[i for i in msg] print(msg_list) #[{'name': 'mac', 'price': '20000', 'count': '3'}, {'name': 'lenovo', 'price': '3000', 'count': '10'}, {'name': 'tesla', 'price': '1000000', 'count': '10'}, {'name': 'chicken', 'price': '200', 'count': '1'}]
求单价大于10000的商品格式同上
f = open(r'shopping.txt','r',encoding='utf-8') res = map(lambda x:x.strip(' ').split(','),f) res10000 = filter(lambda x:float(x[1])>10000,res) msg = map(lambda x:{'name':x[0],'price':x[1],'count':x[2]},res10000) msg_list=[i for i in msg] print(msg_list) f.close() #[{'name': 'mac', 'price': '20000', 'count': '3'}, {'name': 'tesla', 'price': '1000000', 'count': '10'}]
函数的递归:
二分法:
想从一个从小到大排列的数字列表中找到指定的数字,遍历的效率太低,用二分法(算法的一种)
实现in的效果
def in2(num,li): if len(li) ==0: print('no exit') return False mid_ind = len(li)//2 if num>li[mid_ind]: li = li[mid_ind+1:] return in2(num,li) elif num < li[mid_ind]: li = li[:mid_ind] return in2(num,li) else: return True print(in2(33,l)) #True
实现l.index(30)效果
l=[1,2,3,4,5,6,7,8,11,33,44,55,66,77,88,99] def index2(num,li,start =0,stop=len(l)-1): if start<stop: mid_index = start+(stop-start)//2 if num > li[mid_index]: start = mid_index+1 return index2(num,li,start,stop) elif num < li[mid_index]: stop=mid_index-1 return index2(num,li,start,stop) else: return mid_index else: print('no exist') return None res =index2(33,l) print(res) #9