作业

作业

一、第一题:用合适的类型与变量名记录下述状态

数据类型的选择原则:存不是目的,目的是为了取,并且能够方便地取,请使用合适的类型与变量名记录下述状态

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

你可能感兴趣的:(作业)