• 20


    1、文件内容如下,标题为:姓名,性别,年纪,薪资
    egon male 18 3000
    alex male 38 30000
    wupeiqi female 28 20000
    yuanhao female 28 10000
    
    要求:
    从文件中取出每一条记录放入列表中,
    列表的每个元素都是{'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]]]]]]],用递归取出所有的值
    
    
    
    # 选做作业:同昨天
    # 1、文件内容如下,标题为:姓名,性别,年纪,薪资
    # egon male 18 3000
    # alex male 38 30000
    # wupeiqi female 28 20000
    # yuanhao female 28 10000
    #
    # 要求:
    # 从文件中取出每一条记录放入列表中,
    # 列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式
    '''
    [
        {'name':'egon','sex':'male','age':18,'salary':3000},
    ]
    '''
    
    
    # 格式化数据
    def add_data():
        # 1) 打开db.txt文件,将所有用户的数据读取出来
        # 方式一:
        # user_list = []
        with open('db.txt', 'r', encoding='utf-8') as f:
            # 方式一
            # for line in f:
            # name, sex, age, salary = line.strip().split(' ')
            # user_list.append(
            #     {'name': name, '': sex, 'age': age, 'salary': salary}
            # )
    
            # 方式二: 一行代码实现
            # [[], [], [], []]
            # line2 ---> []
            user_list = [
                {'name': line2[0], 'sex': line2[1], 'age': line2[2], 'salary': line2[3]}
                for line2 in
                [line.strip().split(' ') for line in f]
            ]
            # print(user_list)
    
        return user_list
    
    
    user_list = add_data()
    
    # [{'name': 'egon', 'sex': 'male'}, {}]
    # 2 根据1得到的列表,取出所有人的薪资之和
    # print(sum((int(user.get('salary')) for user in user_list)))  # 63000
    
    # 3 根据1得到的列表,取出所有的男人的名字
    # res = filter(lambda user_dict: user_dict.get('sex') == 'male', user_list)
    # print(list(res))
    
    # 4 根据1得到的列表,将每个人的信息中的名字映射成首字母大写的形式
    # map
    # ['egon', 'alex', 'wupeiqi', 'yuanhao']
    # -> e , a, w, y --> Egon , Alex, Wupeiqi, Yuanhao
    # 方式一:
    # res = map(lambda x:x.get('name')[0].upper() + x.get('name')[1:], user_list)
    # print(list(res))
    
    # 方式二:
    # str.capitalize()字符串的内置方式,可以将字符串中的首字母改为大写
    # x.get('name').capitalize()  --> name  {'name': name, 'sex': x.get('sex'), 'age': x.get('age')}
    # res = map(lambda x:
    #           {'name': x.get('name').capitalize(), 'sex': x.get('sex'), 'age': x.get('age'), 'salary': x.get('salary')},
    #           user_list
    #           )
    # print(list(res))
    
    
    # 5 根据1得到的列表,过滤掉名字以a开头的人的信息
    # names = filter(lambda x: not x.get('name').startswith('a'), user_list)
    # print(list(names))
    
    
    # 6 使用递归打印斐波那契数列(前两个数的和得到第三个数,如:0 1 1 2 3 5 8 13 ...)
    
    # 0 1 1 2 3 5 8 13 21
    # 普通版本
    '''
    a = 0  # 1  1  2  3
    b = 1  # 1  2  3  5
    # 斐波那契数列的最大值是 1000 以内
    # 1)循环获取a的值,a < 1000
    while a < 1000:
        # 0  1
        print(a, end='  ')
    
        # a, b ---> 1, 1
        # a, b ---> 1, 2
        # a, b ---> 2, 3
        # a, b ---> 3, 5
        a, b = b, a + b
    
    '''
    
    
    # 递归版
    def func(a, b, stop):
        # a ---> b --> 1, b ---> a + b ---> 1
        '''
        :param a: 初始值0 --->
        :param b: 初始值1 --->
        :param stop: 斐波那契数列最大值
        :return:
        '''
        # a --> 0, b --> 1
        if a > stop:
            # 直到a的值 大于 stop的值,开始回溯
            return
    
        print(a, end='  ')
        # 原理与普通版一样
        func(b, a + b, stop)
    
    
    # func(0, 1, 1000)
    
    # 7 一个嵌套很多层的列表,如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]]]]]]]
    
    
    def get_value(l):
        # 循环列表
        for i in l:
            # 若类型不是列表,则递归调用
            if type(i) is list:
                get_value(i)
            else:
                print(i)
    
    
    # get_value(l)
    
    
    # # 选做作业:同昨天
    
    # 生成器 ---> 内部实现原理
    # def add(n, i):
    #     return n + i
    #
    #
    # def test():
    #     for i in range(4):
    #         yield i
    #
    #
    # g = test()
    #
    # for n in [1, 10]:
    #     g = (add(n, i) for i in g)
    #
    # res = list(g)
    #
    # print(res)
    
    # 选做题,下周讲
  • 相关阅读:
    pandas读写csv最简代码
    csv.read和csv.write
    交叉验证
    纪念被win10大更新搞崩的vbox
    c++中关于保留小数的小总结
    Java里的值传递与“引用传递”——一些想法
    Eclipse使用遇到的一些问题及解决方案(持续更新)
    Pray for 京阿尼——愿逝者安息,伤者早日康复
    洛谷p1208—混合牛奶【典型贪心】(关联排序小技巧)
    洛谷p1217—回文质数(默默宣传打表法)
  • 原文地址:https://www.cnblogs.com/2722127842qq-123/p/13449223.html
Copyright © 2020-2023  润新知