day20作业

作业:
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}的形式

with open("file.txt","r",encoding="utf-8") as f:
    g=(line.strip("\n").split(" ") for line in f)
    info_list=[{"name":i[0],"sex":i[1],"age":i[2],"salary":i[3]} for i in g]

print(info_list)     

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

# info_list.sort(key=lambda item:item["salary"])
# print(info_list[-1])
l=sorted(info_list,key=lambda x:x["salary"])
print(l[-1])    #{'name': 'alex', 'sex': 'male', 'age': '38', 'salary': '30000'}

 

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

l=sorted(info_list,key=lambda x:x["age"])
print(l[0])


4、将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写

names=['egon','alex_sb','wupeiqi','yuanhao']

names_new=list(map(lambda x:x.upper(),names))
print(names_new)

 

5、将names=['egon','alex_sb','wupeiqi','yuanhao']中以sb结尾的名字过滤掉,然后保存剩下的名字长度

names=['egon','alex_sb','wupeiqi','yuanhao']

names_new=[i for i in names if "sb" not in i]
print(names_new)

 

6、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)

with open("a.txt","r",encoding="utf-8") as f:
    g=(line for line in f)
    len_line=len(max(g,key=lambda k:len(k)))
print(len_line)

 

7、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)

f=open("file.txt","r",encoding="utf-8")
g=(line for line in f)
len_line=(len(line) for line in g)
sum_str=sum(len_line)
f.close()
print(sum_str)

 

8、思考题

with open('a.txt') as f:
  g=(len(line) for line in f)
print(sum(g)) #为何报错?

因为with语句执行完g=(len(line) for line in f)后文件句柄就关闭了,所以之后再使用g生成器就报错了


9、文件shopping.txt内容如下

mac,20000,3
lenovo,3000,10
tesla,1000000,10
chicken,200,1
求总共花了多少钱?

with open("file.txt","r",encoding="utf-8") as f:
    g=(line.strip("\n").split(",") for line in f)
    info_list=[{"name":i[0],"price":i[1],"count":i[2]} for i in g]
s=(int(i["price"]) for i in info_list)
sum_mon=sum(s)
print(sum_mon)

打印出所有商品的信息,格式为[{'name':'xxx','price':333,'count':3},...]

with open("file.txt","r",encoding="utf-8") as f:
    g=(line.strip("\n").split(",") for line in f)
    info_list=[{"name":i[0],"price":i[1],"count":i[2]} for i in g]

print(info_list)

求单价大于10000的商品信息,格式同上

l_new=[i for i in info_list if int(i["price"]) > 10000]
print(l_new)

 

10、思考:判断下述说法是否正确
题目1:
1、应该将程序所有功能都扔到一个模块中,然后通过导入模块的方式引用它们

不正确,容易混乱,不方便拿取使用


2、应该只将程序各部分组件共享的那一部分功能扔到一个模块中,然后通过导入模块的方式引用它们

正确

 

题目2:
运行python文件与导入python文件的区别是什么?

#运行python文件:
#1、发送系统调用指令,将文件从硬盘读入内存,
#2、解释器从内存读取,识别语法执行
# 3、执行过程中会将执行到的名称分类放入属于这个文件的内置名称空间全局名称空间,和局部名称空间
#导入python文件 # 1、执行文件 # 2、产生文件的名称空间,将文件运行过程中产生的名字都丢到文件名的名称空间 # 3、在当前文件中产生的有一个名字为文件名,该名字指向2中产生的名称空间

 

运行的python文件产生的名称空间何时回收,为什么?

#程序运行结束时回收


导入的python文件产生的名称空间何时回收,为什么?

#在没有别的文件导入的时候回收,(也就是没有任何文件导入此文件)

 

posted @ 2020-03-26 16:42  耗油炒白菜  阅读(160)  评论(0编辑  收藏  举报