十九次作业

作业

第一题

文件内容如下,标题为:姓名,性别,年纪,薪资
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('a') as f:
    a=(i.split() for i in f)
    res=[{'name':name,'gender':gender,'age':age,'salary':salary} for name,gender,age,salary in a]
print(res)

'''
 [{'name': 'egon', 'gender': 'male', 'age': '18', 'salary': '3000'}, 
{'name': 'alex', 'gender': 'male', 'age': '38', 'salary': '30000'}, 
{'name': 'wupeiqi', 'gender': 'female', 'age': '28', 'salary': '20000'},
{'name': 'yuanhao', 'gender': 'female', 'age': '28', 'salary': '10000'}
]
'''

第二题

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

print(max(res,key=lambda res:res['salary']))
# {'name': 'alex', 'gender': 'male', 'age': '38', 'salary': '30000'}

第三题

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

print(min(res,key=lambda res:res['age']))
# {'name': 'egon', 'gender': 'male', 'age': '18', 'salary': '3000'}

第四题

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

names=['egon','alex_sb','wupeiqi','yuanhao']
l=[]
for i in names:
    i=i.upper()
    l.append(i)
names = l
print(names)

第五题

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

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

l=[]
for i in names:
    if i.endswith('sb'):
        names.remove(i)

print(names)
for i in names:
    l.append(len(i))
print(l)

# ['egon', 'wupeiqi', 'yuanhao']
# [4, 7, 7]

第六题

求文件a.txt中最长的行的长度

l=[]
with open('a') as f:
    for line in f:
        # res = f.read()
        i = len(line)
        # print(res)
        l.append(i)
l.sort()
print(l[-1])
# 24

第七题

求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?

with open('a',mode='r',encoding='utf-8') as f:
    for line in f:
        res = f.read()
print(res)
print(len(res))
# egon male 18 3000
# alex male 38 30000
# wupeiqi female 28 20000
# yuanhao female 28 10000
# 84

第八题

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

g得到的是一个生成器,with方法会让文件关闭,然后又去打印g,g又要读写文件会进行“关闭文件的I/O操作"的报错

第九题

文件shopping.txt内容如下

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

with open(r'shopping.txt', 'r', encoding='utf-8') as f:
    res = [i.strip().split(',') for i in f]
    res = sum(int(price)*int(count) for name, price, count in res)
    print(res)
# 10090200

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

with open(r'shopping.txt','r',encoding='utf-8') as f:
    i = (i.strip().split(',') for i in f)
    l = list({'name':name,'price':price,'count':count} for name,price,count in i)
    print(l)
# [{'name': 'mac', 'price': '20000', 'count': '3'},
#  {'name': 'lenovo', 'price': '3000', 'count': '10'},
#  {'name': 'tesla', 'price': '1000000', 'count': '10'},
#  {'name': 'chicken', 'price': '200', 'count': '1'}]

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

with open(r'shopping.txt','r',encoding='utf-8') as f:
    i = (i.strip().split(',') for i in f)
    l = list({'name':name,'price':price,'count':count} for name,price,count in i)
    print(list(filter(lambda k:int(k['price'])>10000,l)))
# [{'name': 'mac', 'price': '20000', 'count': '3'},
#  {'name': 'tesla', 'price': '1000000', 'count': '10'}]

第十题

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

不对,将所有的功能全部放进一个模块中携程面条型的程序,不仅结构混乱可读性较差,而且后期的维护工作难较麻烦,另外对于较大的项目一般都是采用分工协作,各自完成一小部分的功能,如果都放在一个模块中,难以整合。

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

正确,将共享的功能全都放进一个模块中让大家共享使用,组织结构更加清晰,代码冗余更少

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

模块文件,被当做模块给导入,有多个
运行文件,被当做执行文件执行,只能有一个
运行python文件的过程:先打开文件,然后发送系统调用,操作系统将硬盘存放的python文件的内容从硬盘加载到内存,Python解释器读取并运行代码,运行过程中产生的名字会存放到这个文件的名称空间中去.
导入python文件的时候会执行导入的python文件,运行过程中产生的名字会存放到这个导入的python文件的名称空间中去

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

 当前程序运行结束后,Python文件产生的名称空间被回收

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

如果python文件有导入python模块文件, 导入的python文件产生的名称空间就不会被关闭
posted @ 2020-03-26 20:56  祥SHAO  阅读(323)  评论(0编辑  收藏  举报