• 3-25作业讲解


    # 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)

    # 选做题,下周讲
  • 相关阅读:
    字节流、字符流
    ArrayList、LinkedList、Vector 的区别。
    Java 为每个原始类型提供了哪些包装类型:
    int 和 Integer 有什么区别
    怎样自动把报表插入到 word 文档中
    web 报表中电子图章 / 水印的轻松实现
    玩转报表排名
    报表设计技巧之隔行异色
    单据类报表的制作
    轻松 get 报表模糊查询技能
  • 原文地址:https://www.cnblogs.com/2722127842qq-123/p/12576627.html
Copyright © 2020-2023  润新知