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)