3.25作业

作业:

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

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

要求:

1.从文件中取出每一条记录放入列表中,

列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式

with open('personal_info.txt', mode='rt', encoding='utf-8') as f:
    list1 = []
    for line in f:
        dic1 = {}
        name, sex, age, salary = line.strip().split()
        dic1['name'] = name
        dic1['sex'] = sex
        dic1['age'] = age
        dic1['salary'] = salary
        list1.append(dic1)
    print(list1)

2 根据1得到的列表,取出所有人的薪资之和

sum1 = sum(int(dic2.get('salary')) for dic2 in list1)
print(sum1)  #63000

3 根据1得到的列表,取出所有的男人的名字

man = [dic2.get('name') for dic2 in list1 if dic2.get('sex') == 'male']
print(man)

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

list2=[]
for i in list1:
    i['name']=i['name'].upper()
    list2.append(i)
print(list2)

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

list3 = [dic2 for dic2 in list1 if not dic2.get('name').startswith('a')]
print(list3)

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

网上查找的方法:

def f1(n):
    a = 1
    b = 1
    if n == 0:
        print(0)
    elif n == 1:
        print(f'0\n1')
    elif n == 2:
        print(f'0\n1\n2')

    else:
        print(f'0\n{a}\n{b}')
        for i in range(3, n + 1):
            a, b = b, a + b

            print(b)


f1(11)

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 f1(l):
    for i in l:
        # if type(i) is list:
        if isinstance(i, list):  # 满足未遍历完items以及if判断成立的条件时,一直进行递归调用
            f1(i)
        else:
            print(i, end=' ')


f1(l)
posted @ 2020-03-25 22:55  风起千寻  阅读(118)  评论(0编辑  收藏  举报