3.25练习---生成式、函数递归应用
作者:互联网
""" 要求: 1 从文件中取出每一条记录放入列表中, 列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式 2 根据1得到的列表,取出所有人的薪资之和 3 根据1得到的列表,取出所有的男人的名字 4 根据1得到的列表,将每个人的信息中的名字映射成首字母大写的形式 5 根据1得到的列表,过滤掉名字以a开头的人的信息 6 使用递归打印斐波那契数列(前两个数的和得到第三个数,如:0 1 1 2 3 4 7...) 7 一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]],用递归取出所有的值 """
# 文件中数据格式 egon male 18 3000 alex male 38 30000 wupeiqi female 28 20000 yuanhao female 28 10000
一、生成式
1.1 从文件中取出记录
with open("data.txt",mode="rt",encoding="utf-8") as f: l = [{"name":line.split()[0],"sex":line.split()[1],"age":line.split()[2],"salary":line.split()[3],} for line in f] print(l)
1.2 取出所有人薪资之和
# g = (int(user["salary"]) for user in l) # print(g,type(g)) # <generator object <genexpr> at 0x00000182C80C1820> <class 'generator'> sum_salaries = sum(int(user["salary"]) for user in l) print(sum_salaries)
1.3 取出所有男人的名字
name_l = [user["name"] for user in l if user["sex"] == "male"] print(name_l)
1.4 根据1得到的列表,将每个人信息中的名字映射成首字母大写的格式
new_l = [user["name"].capitalize() for user in l] print(new_l)
1.5 根据1得到的列表,过滤掉名字以a开头的人的信息
new_l = [user for user in l if not user["name"].startswith("a")] print(new_l)
二、斐波拉契数列
法一(函数:递归得到第n项斐波拉契数列,循环函数得到数列)
def print_Fibonacci(n): for i in range(1,n+1): print(Fibonacci(i),end=" ") print() def Fibonacci(n): if n == 1 or n == 2: return n-1 elif n > 2: return Fibonacci(n-2) + Fibonacci(n-1) return -1 print(Fibonacci(15)) print_Fibonacci(15)
法二(设定数列初始的两个值与数列终止值,递归打印)
def fib(a,b,c): if a > c: return print(a,end=" ") fib(b,a+b,c) fib(0,1,388) print()
法三(非递归方法)
a=0 b=1 while a<388: print(a,end=" ") a, b=b, a+b print()
三、一个嵌套很多层的列表,用递归取出所有的值
如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]]
l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]] new_l = [] def list_value(l): for k in l: if type(k) is list: list_value(k) else: new_l.append(k) list_value(l) print(new_l)
标签:name,递归,生成式,列表,3.25,user,print,new,Fibonacci 来源: https://www.cnblogs.com/zhubincheng/p/12568945.html