作业
一、第一题:用合适的类型与变量名记录下述状态
数据类型的选择原则:存不是目的,目的是为了取,并且能够方便地取,请使用合适的类型与变量名记录下述状态
1、病毒程序需要定期将监控到的数据写入日志文件,请记录下日志文件路径C:\a\b\c\adhsvc.dll.system32,方便后期处理
# r'':取消所有特殊符号的意义
LOG_FILE = r'C:\a\b\c\adhsvc.dll.system32'
2、病毒程序在上传文件时,发送的报头数据里需要包含文件信息:文件名a.txt、大小360,请记录下文件信息
header_info = {'filename': 'locked.txt', 'size': 360}
3、程序运行过程中有一段错误日志需要记录下来,错误日志为"上传文件失败"
# 一个错误日志
error_log = "上传文件失败"
# 多个错误日志
error_logs = ['错误日志1', '错误日志2',...]
4、假设我收到一条信息要记录,信息为中病毒客户端的信息"[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据"
virus_client_info = "[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据"
5、把服务端ip地址存放下来,ip地址为10.0.10.11
server_address = '10.0.10.11'
6、病毒程序需要每隔3秒才运行一次,请记录下这个时间间隔
time_interval = 3
二、第二题:嵌套取值操作
针对列表
students_info = [
['egon', 18, ['play', ]],
['alex', 18, ['play', 'sleep']]
]
# 请取出第一个学生的第一个爱好?
print(students_info[0][-1][0])
针对字典
info = {
'name': 'egon',
'hobbies': ['play', 'sleep'],
'company_info': {
'name': 'Oldboy',
'type': 'education',
'emp_num': 40,
}
}
# 请取出取公司名?
# 使用dict['key']取值
print(info['company_info']['name'])
# 使用dict.get('key')取值
print(info.get('company_info').get('name'))
综合
students = [
{'name': 'alex', 'age': 38, 'hobbies': ['play', 'sleep']},
{'name': 'egon', 'age': 18, 'hobbies': ['read', 'sleep']},
{'name': 'wupeiqi', 'age': 58, 'hobbies': ['music', 'read', 'sleep']},
]
# 取第二个学生的第二个爱好?
print(students[1]['hobbies'][-1])
三、选做题:编写用户登录接口
"""
遗忘知识点:
1. 文件处理
1.1 打开文件
f = open('文件路径', '操作文件得方法', encoding='字符编码')
f.close
with open('文件路径', '操作文件得方法', encoding='字符编码') as f:
1.2 读,写
f.read(): 读取文件所有内容,读取内容字符串类型
f.readline(): 读取文件第一行,读取内容字符串类型
r.readliens(): 读取所有文件,读取内容以行为单位添加到列表当中,列表得每项元素末尾默认有换行符\n
f.write(字符串): 文件不存在添加,文件存在先清空文件内容再把内容输入(注意: 如需换行手动添加换行符\n)
f.writelines(列表): 文件不存在添加,文件存在先清空文件内容再以列表中每项元素得形式,每项元素必须是字符串类型,往文件中写内容(注意: 如需换行每项字符串元素后添加\n)
1.3 循环读取文件每一行内容
注意: 读取的每一行字符串内容的末尾都有\n换行符(除了最后一行)
li = []
with open(r'locked.txt', 'r') as f:
for line in f:
li.append(line)
print(li)
"""
"""
选做题:编写用户登录接口
1、输入账号密码完成验证,验证通过后输出"登录成功"
2、可以登录不同的用户
3、同一账号输错三次锁定(附加功能,在程序一直运行的情况下,一旦锁定,则锁定5分钟后自动解锁)
扩展需求:在3的基础上,完成用户一旦锁定,无论程序是否关闭,都锁定5分钟
"""
# 创建文件常量方便修改
LOCKED_FILE = r'locked.txt'
# 创建输入错误次数常量,默认初始时为0
wrong_number = 0
# 创建账户: key用户名,value用户密码
account_info = {
'egon': '123',
'alex': '123',
'tank': '123'
}
# 初始化变量: 用来计算用户输错次数
count = 0
# 循环: 提供用户循环输入
while count < 4:
# 判断文件是否存在,不存在创建,存在读取内容,获取锁定时间
import os
import time
if os.path.isfile(LOCKED_FILE):
# 文件存在读取文件,如果错误次数是3,锁定,如果不是写入文件计算当前错误次数
with open(LOCKED_FILE, 'r') as f_read, open(r'swap.txt', 'w') as f_write:
wrong_number1 = int(f_read.read())
if wrong_number == 2:
print("输错三次锁定,5分钟后自动解锁")
time.sleep(3)
# 解锁以后把计算错误次数重置为0,写入文件
count = 0
f_write.write('%s' % count)
else:
f_write.write('%s' % wrong_number)
# 文件关闭以后,删除源文件,重名名交换文件为新文件
os.remove(LOCKED_FILE)
os.rename('swap.txt', LOCKED_FILE)
else:
with open(LOCKED_FILE, 'w') as f:
f.write('%s' % wrong_number)
# 用户输入
inp_username = input("输入用户名>>: ").strip()
inp_password = input("输入用户密码>>: ").strip()
# 拿到用户输入内容验证对比用户账户信息,对比成功,登陆成功. 失败计算用户错误次数
if inp_username in account_info:
# 用户名,密码正确,重置错误次数
if account_info.get(inp_username) == inp_password:
print('登录成功')
count = 0
break
else:
print('密码错误')
else:
print('用户名错误')
count += 1