一:数据类型的选择
原则:存不是目的,目的是为了取,并且能够方便地取,请使用合适的类型与变量名记录下述状态
1、写入日志
病毒程序需要定期将监控到的数据写入日志文件,请记录下日志文件路径C:\a\b\c\adhsvc.dll.system32,方便后期处理
log_path = r'C:\a\b\c\adhsvc.dll.system32,' # r''---> read,因为可能\会有转义符的意思。
2、请记录下文件信息
病毒程序在上传文件时,发送的报头数据里需要包含文件信息:文件名a.txt、大小360,请记录下文件信息
file_name = 'a.txt'
file_size = 300
3、记录日志
程序运行过程中有一段错误日志需要记录下来,错误日志为"上传文件失败"
log = "上传文件失败"
log_list = [
'日志1',
'日志2',
]
4、记录信息
假设我收到一条信息要记录,信息为中病毒客户端的信息"[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据"
定义变量名时,自己需要知道该变量名表示的是什么值;
data = "[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据"
5、存放IP地址
把服务端ip地址存放下来,ip地址为10.0.10.11
server_address = '10.0.10.11'
server_ip = '10.0.10.1'
6、记录时间间隔
病毒程序需要每隔3秒才运行一次,请记录下这个时间间隔
wait_time = 3
二:嵌套取值操作
1、针对列表
students_info = [
['Lance', 18, ['play', ]],
['Abraham', 18, ['play', 'sleep']]
]
请取出第一个学生的第一个爱好
print(students_info[0][2][0])
2、针对字典
info = {
'name': 'man',
'hobbies': ['play', 'sleep'],
'company_info': {
'name': 'Lance',
'type': 'education',
'emp_num': 40,
}
}
请取出取公司名
print(info.get('company_info'))
print(info['company_info']['name']) # Lance
print(info.get('company_info').get('name')) # Lance
3、针对下述类型
students = [
{'name': 'lcane', 'age': 38, 'hobbies': ['play', 'sleep']},
{'name': 'Justin', 'age': 18, 'hobbies': ['read', 'sleep']}, # 1
{'name': 'Abraham', 'age': 58, 'hobbies': ['music', 'read', 'sleep']},
]
取 第二个学生 的第二个爱好
print(students[1]['hobbies'][1]) # sleep
print(students[1].get('hobbies')[1]) # sleep
选做题:编写用户登录接口
1、简单的用户登录接口
输入账号密码完成验证,验证通过后输出"登录成功"
user_inof =['Lance','123']
#让用户输入账号密码
username = input('请输入账号:')
password = input('请输入密码:')
print('账号:', username, '密码: ', password)
# if: if判断 ----> if 判断的条件:
# 左边的值 == 右边的值 ---> 判断左右两边的值 是否相等
# and:逻辑运算符 判断两边的条件是否为True,若都为True,则结果为True
if username == user_info[0] and password == user_info[1]:
# 若if判断条件成立,则执行此处代码
print('登录成功')
else:
# 若不成立,则执行此处代码
print('账号或密码错误!')
2、可以登录不同的用户
# 将多个用户存放在字典中,用于支持多个用户登录时进行判断
user_info = {
'tank': '123',
'Lacne1': '321',
'Lance2': '321',
'Lance3': '321',
'Lance4': '321',
}
username = input('请输入账号: ')
password = input('请输入密码: ')
# 判断成功,表示输入的用户名存在, 账号已经校验成功
# 判断username 是否是user_info字典中的key
if username in user_info:
# print(username)
# 校验当前用户名对应的value值,也就是密码是否一致
# 校验密码
if password == user_info.get(username):
print('登录成功')
else:
print('密码错误,登录失败!')
else:
print('账号不存在!')
3、同一账号输错三次锁定
1、(附加功能,在程序一直运行的情况下,一旦锁定,则锁定5分钟后自动解锁)
user_info = {
'tank': '123',
'Lacne1': '321',
'Lance2': '321',
'Lance3': '321',
'Lance4': '321',
}
number = 1
#while循环 while判断循环
while number < 4: #条件成立执行此处代码
username = input('请输入账号: ')
password = input('请输入密码: ')
if username in user_info:
if password == user_info.get(username):
print('登录成功')
break
else:
print('密码错误,登录失败!')
number += 1
else:
print('账号不存在!')
print(number)
if number == 4 # 若number == 4 代表 当前用户需要锁定 300秒
import time # time是python解释器自带的一个模块,可以通过 " 模块名.模块的功能 " 使用
# time.sleep(等待的时间,必须是整型)
# 5min ---> 300s
# time.sleep(300)
print('账户锁定,等待5分钟后解锁')
time.sleep(3)
print('账号已解锁,请继续使用!')
number = 1
2、扩展需求:在3的基础上,完成用户一旦锁定,无论程序是否关闭,都锁定5分钟
user_info = {
'tank': '123',
'Lacne1': '321',
'Lance2': '321',
'Lance3': '321',
'Lance4': '321',
}
number = 1
import time
import os
while number < 4:
# 条件成立,则执行以下
username = input('请输入账号: ')
password = input('请输入密码: ')
if username in user_info:
if password == user_info.get(username):
print('登录成功')
break
else:
print('密码错误,登录失败!')
number += 1
else:
print('账号不存在!')
number += 1
print(number)
if number == 4:
# 此处写锁定
# 判断某个文件是否存在
if os.path.exists(r'locked.py'): # 文件的存放路径或指向名字,这里引号前面加一个字母 r 是为了确保在Windows系统中万无一失,故应该以原始字符串的方式指定路径,也就是在开头的引号前面加上 r
print('文件存在')
# 此处将文件中的锁定时间读取出来,并实现锁定秒数
# 文件处理
# with open('文件的名字', '打开的模式', '字符编码') as f:
# r: read读取
with open('locked.py', 'r', encoding='utf-8') as f:
wait_time = f.read()
print('锁定时间为:', wait_time)
print('类型为:', type(wait_time))
# 将str类型 ---> int类型
# 若文件中存放时间,则从文件中读取等待的时间
time.sleep(int(wait_time))
print('解锁成功,请继续使用!')
number = 1
else:
print('文件不存在')