ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3.25练习---生成式、函数递归应用

2020-03-25 19:59:35  阅读:249  来源: 互联网

标签:name 递归 生成式 列表 3.25 user print new Fibonacci


 

"""
要求:
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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有