zoukankan      html  css  js  c++  java
  • 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()

    法三(非递归方法)

    def fib2(max):
        a=0
        b=1
        while a< max:
            yield a
            a, b=b, a+b
    g = fib2(500)
    for i in g:
        print(i,end=" ")
    
    

    三、一个嵌套很多层的列表,用递归取出所有的值

    如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)
     
  • 相关阅读:
    调用DirectX进行简单的多媒体编程系列(一)
    C#中编写sqlserver中自定义函数,实现复杂报表
    学习笔记:javascript定义类的过程(类一词是形象说法,javascript中并没有类一词)
    HttpModule与HttpHandler详解 (转)
    asp.net运行原理(转)
    最近项目报表开发中写的存储过程学生综合成绩对比
    调用DirectX进行简单的多媒体编程系列(四)
    清欠率(存储过程)
    ExtJS中的面向对象设计,组件化编程思想
    ExtJS中如何扩展自定义的类
  • 原文地址:https://www.cnblogs.com/zhubincheng/p/12568945.html
Copyright © 2011-2022 走看看