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) # 选做题,下周讲