作业:
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)