Python 16期 Day12作业
提示:如何选择合适的数据类型来记录状态???
- 选取的类型是否可以明确标识事物的状态
- 存不是目的,存的目的是为了日后取出来用,并且方便的用
- 把自己想象成一台计算机,如果我是计算机,我会如何以何种形式把事物的状态记到脑子里,然后再去Python中找相应的数据类型来让计算机像自己一样去记下事物的状态
ps:认真读题,需要自己从题目中分析出应该存储的状态,然后选择合适的类型加以存储
题目1
病毒程序需要定期将监控到的数据写入日志文件,请记录下日志文件路径C:\a\b\c\adhsvc.dll.system32,方便后期处理
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
log_path = r"C:\a\b\c\adhsvc.dll.system32"
题目2
病毒程序在上传文件时,发送的报头数据里需要包含文件信息:文件名a.txt、大小360,请记录下文件信息
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
file_info = {"file_name": "a.txt", "file_size": 360}
题目3
程序运行过程中有一段错误日志需要记录下来,错误日志为"上传文件失败"
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
log_error = ‘上传文件失败’
题目4
假设我收到一条信息要记录,信息为中病毒客户端的信息"[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据"
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
file_info = "[%s] %s感染者-> %s 正在上传数据"%('2020-02-18-17:00:48','癞蛤蟆病毒','80.82.70.187:33649')
题目5
把服务端IP地址存放下来,IP地址为10.0.10.11
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
ip_add = "10.0.10.11"
题目6
病毒程序需要每隔3秒才运行一次,请记录下这个时间间隔
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
time_interval = 3
题目7
students_info=[['egon',18,['play',]],['alex',18,['play','sleep']]]
请取出第一个学生的第一个爱好
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
hobby = students_info[0][-1][0]
题目8
info={
'name':'egon',
'hobbies':['play','sleep'],
'company_info':{
'name':'Oldboy',
'type':'education',
'emp_num':40,
}
}
请取出公司名
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
company_name = info['company_info']['name']
题目9
students=[
{'name':'alex','age':38,'hobbies':['play','sleep']},
{'name':'egon','age':18,'hobbies':['read','sleep']},
{'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']},
]
请取出第二个学生的第二个爱好
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
student_hobby = students[1]['hobbies'][1]
题目10
分别画出下面两个列表在内存中是如何存放的
l1=[11,22,[333,444]]
l2=[11,22,[33,{'name':'egon','age':18}]]
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
l1--|-----------| l2--|----------------|
| --|---11-------|-- |
| --|---22-------|-- |------------|
| |-------| | 33-------|---|-- |
| | --|-|---333 | | |--------| |
| | --|-|---444 | | | 'name'-|-|--'egon'
| |-------| | | | | 'age' -|-|--18
|-----------| | | |--------| |
|---|------------|
题目11
文件内容如下,标题为:姓名,性别,年纪,薪资
egon male 18 3000
alex male 38 30000
wupeiqi female 28 20000
yuanhao female 28 10000要求:
从文件中取出每一条记录放入列表中,
列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
with open('a.txt', mode='rt', encoding='utf-8') as f:
l = []
for i in f:
i = i.strip().split(' ')
d = {}
d['name'] = i[0]
d['sex'] = i[1]
d['age'] = i[2]
d['salary'] = i[3]
l.append(d)
题目12
根据题目11得到的列表,取出所有人的薪资之和
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
sum(int(i['salary']) for i in l)
题目13
根据11得到的列表,取出所有的男人的名字
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
[i['name'] for i in l if i['sex']=='male']
题目14
根据11得到的列表,将每个人的信息中的名字映射成首字母大写的形式
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
for i in l:
i['name'] = i['name'].capitalize()
题目15
根据11得到的列表,过滤掉名字以a开头的人的信息
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
[i for i in l if not(i['name'].startswith('a'))]
题目16
使用递归打印斐波那契数列(前两个数的和得到第三个数,如:0 1 1 2 3 4 7...)
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def Fibonacci(a,b):
print('%s %s'%(a,b),end=' ')
Fibonacci(a+b,a+b+b)
题目17
一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]],用递归取出所有的值
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def ll(l):
for i in l:
ll(i) if type(i) == list else new_l.append(i)
ll(l)
题目18
思考:判断下述说法是否正确
- 应该将程序所有功能都扔到一个模块中,然后通过导入模块的方式引用它们
- 应该只将程序各部分组件共享的那一部分功能扔到一个模块中,然后通过导入模块的方式引用它们
- 运行python文件与导入python文件的区别是什么?
- 运行的python文件产生的名称空间何时回收,为什么?
- 导入的python文件产生的名称空间何时回收,为什么?
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
1.错
2.对
3.一种是执行文件;另一种是被当做模块导入
4.程序运行结束后进行回收
5.所有导入这个文件的文件全部运行完毕时回收导入文件的名称空间
题目19
文件a.txt内容如下,标题为:姓名,性别,年纪,薪资
egon male 18 3000
alex male 38 30000
wupeiqi female 28 20000
yuanhao female 28 10000要求:
从文件中取出每一条记录放入列表中,列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
with open('a.txt', mode='rt', encoding='utf-8') as f:
l = []
for i in f:
i = i.strip().split(' ')
d = {}
d['name'] = i[0]
d['sex'] = i[1]
d['age'] = i[2]
d['salary'] = i[3]
l.append(d)
题目20
根据19得到的列表,取出薪资最高的人的信息
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
max(l,key=lambda k:k['salary'])
题目21
根据19得到的列表,取出最年轻的人的信息
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
min(l,key=lambda k:k['age'])
题目22
将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
[i.upper() for i in names]
题目23
将names=['egon','alex_sb','wupeiqi','yuanhao']中以sb结尾的名字过滤掉,然后保存剩下的名字长度
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
[len(i) for i in names if not(i.endswith('sb'))]
题目24
求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
with open('a.txt',mode='rt',encoding='utf-8') as f:
print(max(len(i) for i in f))
题目25
求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
with open('db.txt',mode='rt',encoding='utf-8') as f:
print(sum(len(i) for i in f))
# 光标在文本末尾
题目26
with open('a.txt') as f:
g=(len(line) for line in f)
print(sum(g)) #为何报错?
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
with open('db.txt') as f:
g=(len(line) for line in f)
print(sum(g))
# 缺少缩进
# 因为文件在print之前已经关闭了,调用g需要文件是开着的
题目27
文件shopping.txt内容如下
mac,20000,3
lenovo,3000,10
tesla,1000000,10
chicken,200,1求总共花了多少钱?
打印出所有商品的信息,格式为[{'name':'xxx','price':333,'count':3},...]
求单价大于10000的商品信息,格式同上
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
2.
with open('db.txt', mode='rt', encoding='utf-8') as f:
l = []
for i in f:
i = i.strip().split(',')
d = {}
d['name'] = i[0]
d['price'] = i[1]
d['count'] = i[2]
l.append(d)
print(l)
1.
print(sum(int(i['price']) * int(i['count']) for i in l))
3.
print([i for i in l if int(i['price'])>10000])