day14

第一题

文件内容如下,标题为:姓名,性别,年纪,薪资

egon male 18 3000
alex male 38 30000
wupeiqi female 28 20000
yuanhao female 28 10000

要求:
从文件中取出每一条记录放入列表中,列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式

解答一:

users_list = []
with open('user_info.txt','r',encoding='utf-8') as fr:
    for user_info in fr:
        user_info_list = user_info.strip().split(' ')
        user_info_dic = {}.fromkeys(['姓名','性别','年纪','薪资'],None)
        i = 0
        for key in user_info_dic:
            if user_info_list[i].isdigit():
                user_info_list[i] = int(user_info_list[i])
            user_info_dic[key] = user_info_list[i]
            i += 1
       	
        # 保存
        users_list.append(user_info_dic)
print(users_list)
        

解答二:

users_list = []
import copy

key_list = ['姓名', '性别', '年纪', '薪资']
with open('user_info.txt', 'r', encoding='utf-8') as fr:
    for user_info in fr:
        user_info_list = user_info.strip().split(' ')
            if user_info_list[i].isdigit():
                user_info_list[i] = int(user_info_list[i])
        user_key_list = copy.deepcopy(key_list)
        res = zip(key_list,user_info_list)
        user_info_dic = dict(res)
        # 保存
        users_list.append(user_info_dic)
print(users_list)

第二题

根据1得到的列表,取出薪资最高的人的信息

user_info = max(users_list,key=lambda user_info_dic:int(user_info_dic['薪资']))

第三题

根据1得到的列表,取出最年轻的人的信息

user_info = min(users_list,key=lambda user_info_dic:int(user_info_dic['年纪']))

第四题

根据1得到的列表,将每个人的信息中的名字映射成首字母大写的形式

def upper_first(user_info_dic):
    user_info_dic['姓名'] = user_info_dic['姓名'].title()
    return user_info_dic
res = map(upper_first,users_list)
users_list = list(res)

第五题

根据1得到的列表,过滤掉名字以a开头的人的信息

# 有名函数版
def fun(user_info_dic):
    if user_info_dic['姓名'].startswith('a'):
        return False
    return True
res = filter(fun,users_list)
users_list = list(res)
print(users_list)

# 无名函数版
res = filter(lambda user_info_dic:False if user_info_dic['姓名'].startswith('a') else True,users_list)
# 或者
res = filter(lambda user_info_dic:not user_info_dic['姓名'].startswith('a'),users_list)

第六题

使用递归打印斐波那契数列(前两个数的和得到第三个数,如:0 1 1 2 3 4 7...)

def print_numlist(a,b,count_inp):
    if count_inp == 0:
        return
    c = a + b
    print(c,end=' ')
    count_inp -= 1

    a = b
    b = c
    print_numlist(a, b,count_inp)

a = input('初始值a:')
b = input('初始值b:')
count_inp = input('输出个数count(大于等于3):')
if a.isdigit() and b.isdigit() and count_inp.isdigit():
    a = int(a);b = int(b); count_inp = int(count_inp)
    if count_inp < 3:
        print('输出数量至少为3')
        count_inp = 3
        
    print(a,b,end=' ')
    count_inp -= 2
    
    print_numlist(a,b,count_inp)

else:
    print('输入非法!')
    

第七题

一个嵌套很多层的列表,如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 func(l):
    for i in l:
        if str(type(i)) == "<class 'list'>":
            l = i
            func(l)
        else:
            print(i)

func(l)
posted @ 2019-09-25 19:41  W文敏W  阅读(107)  评论(0编辑  收藏  举报