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)

# 选做题,下周讲

 

posted @ 2020-08-06 21:41  Only-W  阅读(133)  评论(0编辑  收藏  举报