2020/12/9

Python 16期 Day12作业

2020/12/9

提示:如何选择合适的数据类型来记录状态???

  1. 选取的类型是否可以明确标识事物的状态
  2. 存不是目的,存的目的是为了日后取出来用,并且方便的用
  3. 把自己想象成一台计算机,如果我是计算机,我会如何以何种形式把事物的状态记到脑子里,然后再去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

思考:判断下述说法是否正确

  1. 应该将程序所有功能都扔到一个模块中,然后通过导入模块的方式引用它们
  2. 应该只将程序各部分组件共享的那一部分功能扔到一个模块中,然后通过导入模块的方式引用它们
  3. 运行python文件与导入python文件的区别是什么?
  4. 运行的python文件产生的名称空间何时回收,为什么?
  5. 导入的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])
上一篇:活动推荐 | 中国 DevOps 社区深圳第十届 MeetUp 来啦!


下一篇:python 爬虫 网站的历史数据的爬取案例 API请求历史数据