Python自学打卡之旅day2【匿名函数、递归函数练习】
今天主要是做些练习题巩固知识,以后将python学习时间安排为6:2:2。6成时间用于敲代码,2成时间看视频学习新知识,2成时间看书巩固知识。
# 1、文件内容如下,标题为:姓名,性别,年纪,薪资
# egon male 18 3000
# alex male 38 30000
# wupeiqi female 28 20000
# yuanhao female 28 10000
# 要求:
# (1)从文件中取出每一条记录放入列表中,
# (2)列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式
# 方法1,使用zip方法将两个列表结合成字典
# list2 = []
filepath ='C:/Users/Administrator/Desktop/t1.txt'
# with open(filepath,mode='r',encoding='utf-8') as f:
# list =[line.strip().split(' ') for line in f]
# for i in list[1:]:
# value = [value for value in i]
# keys = ['name', 'sex', 'age', 'salary']
# dict = {k:v for k,v in zip(keys,value)}
# list2.append(dict)
# print(list2)
#方法2
lst3 = []
with open(filepath,mode='r',encoding='utf-8') as f:
lst =[line.strip().split(' ') for line in f]
for i in lst[1:]:
lst = {'name':i[0],'male':i[1],'age':i[2],'salary':i[3]}
lst3.append(lst)
print(lst3)
# 2 根据1得到的列表,取出薪资最高的人的信息
ret = max(lst3,key=lambda dic:dic.get('salary'))
print(ret)
# 3 根据1得到的列表,取出最年轻的人的信息
ret1 = min(lst3,key = lambda dic:dic.get('age'))
print(ret1)
# 4 根据1得到的列表,将每个人的信息中的名字映射成首字母大写的形式
lst3_new = map(lambda item:{'name':item['name'].capitalize(),
'male':item['male'],
'age':item['age'],
'salary':item['salary']},lst3)
print(list(lst3_new))
# 5 根据1得到的列表,过滤掉名字以a开头的人的信息
lst4 = filter(lambda item:item['name'].startswith('a'),lst3)
print(list(lst4))
# 6 使用递归打印斐波那契数列(前两个数的和得到第三个数,如:0 1 1 2 3 4 7...)
#1 非递归方法
def fib(n):
a,b =0,1
while a<n:
print(a,end=' ')
a,b =b,a+b
fib(10)
#2 递归方法
def fib1(a,b,stop):
if a>stop:
return
else:
print(a,end=' ')
fib1(b,a+b,stop)
fib1(1,2,10)
# 7 一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]],用递归取出所有的值
l1 = [1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]]
def get(seq):
for item in seq:
if type(item) is list:
get(item)
else:
print(item)
get(l1)

浙公网安备 33010602011771号