zoukankan      html  css  js  c++  java
  • 第四章练习题

                                  第四章练习题

    1、logging模块有几个日志级别?

    logging 模块有 5 个日志级别,
    分别为:debug()、info()、warning、error()、critical()

    2、请配置logging模块,使其在屏幕和文件里同时打印以下格式的日志。

    2017-10-18 15:56:26,613 - access - ERROR - account [1234] too many login attempts
    
    
    
    import logging
    
    #1、生成 logger 对象
    logger = logging.getLogger('access')
    logger.setLevel(logging.DEBUG)
    
    #2、生成 handler 对象
    ch = logging.StreamHandler()
    ch.setLevel(logging.ERROR)        #设置输出屏幕级别
    fh = logging.FileHandler('access.log')   #生成文件
    fh.setLevel(logging.ERROR)     #设置输出文件级别
    
    #2.1、把 handler 对象 绑定到 logger
    logger.addHandler(ch)
    logger.addHandler(fh)
    
    #3、生成 formatter 对象
    #3.1、把 formatter 对象 绑定到 handler
    file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    console_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(message)s')
    
    ch.setFormatter(console_formatter)
    fh.setFormatter(file_formatter)
    
    #进行打印日志
    logger.error("account [1234] too many login attempts")

    3、json、pickle、shelve三个区别是什么?

    首先,json、pickle、shelve 都是序列化工具;
    1.json模块,用于字符串 和 python数据类型间进行转换(提供了四个功能:dumps、dump、loads、load)
         优点:跨语言、体积小
         缺点:只能支持intstrlist	upledict
    2.pickle模块,用于python特有的类型 和 python的数据类型间进行转换(提供了四个功能:dumps、dump、loads、load)
         优点:专为python设计,支持python所有的数据类型 
         缺点:只能在python中使用,存储数据占空间大
    3.shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。
    使用方式:
    json和pickle用法相同:
    import pickle
    data = {'k1':123,'k2':'Hello'}
    # pickle.dumps 将数据通过特殊的形式转换位只有python语言认识的字符串
    p_str = pickle.dumps(data)
    print(p_str)
    
    import json
    # json.dumps 将数据通过特殊的形式转换位所有程序语言都认识的字符串
    j_str = json.dumps(data)
    print(j_str)
    
    shelve是f = shelve.open('shelve_test')

    4、json的作用是什么?

    序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes。

    5、subprocess执行命令方法有几种?

    三种执行命令的方法:
    1.subprocess.run(*popenargs, input=None, timeout=None, check=False, **kwargs) #官方推荐
    2.subprocess.call(*popenargs, timeout=None, **kwargs) #跟上面实现的内容差不多,另一种写法
    3.subprocess.Popen() #上面各种方法的底层封装

    6、为什么要设计好目录结构?

    1.可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等。从而非常快速的了解这个项目。
    2.可维护性高: 定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好。

    7、打印出命令行的第一个参数。例如:

    python argument.py luffy
    打印出 luffy

    import sys
    print(sys.argv[1])

    8、代码如下:

    '''
    Linux当前目录/usr/local/nginx/html/
    文件名:index.html
    '''
    import os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(index.html)))
    print(BASE_DIR)

    1.打印的内容是:

    /usr/local/nginx

    2.os.path.dirname和os.path.abspath含义是什么?

    获取路径名:os.path.dirname()
    获得绝对路径: os.path.abspath() 

    9、通过configparser模块完成以下功能

    文件名my.cnf

    [DEFAULT]
    
    [client]
    port = 3306
    socket = /data/mysql_3306/mysql.sock
    
    [mysqld]
    explicit_defaults_for_timestamp = true
    port = 3306
    socket = /data/mysql_3306/mysql.sock
    back_log = 80
    basedir = /usr/local/mysql
    tmpdir = /tmp
    datadir = /data/mysql_3306
    default-time-zone = '+8:00'

    1.修改时区 default-time-zone = '+8:00' 为 校准的全球时间 +00:00

    import configparser
    config = configparser.ConfigParser()
    config.read('my.cnf')
    config.set('mysqld','default-time-zone','+00:00')
    config.write(open('my.cnf', "w"))
    print(config['mysqld']['default-time-zone'] )

    2.删除 explicit_defaults_for_timestamp = true

    import configparser
    config = configparser.ConfigParser()
    config.read('my.cnf')
    config.remove_option('mysqld','explicit_defaults_for_timestamp')
    config.write(open('my.cnf', "w"))

    3.为DEFAULT增加一条 character-set-server = utf8

    import configparser
    config = configparser.ConfigParser()
    config.read('my.cnf')
    config.set('DEFAULT','character-set-server','utf8')
    config.write(open('my.cnf', "w"))

    10、写一个6位随机验证码程序(使用random模块),要求验证码中至少包含一个数字、一个小写字母、一个大写字母。

    import random
    import string
    a = ''.join(random.sample(string.ascii_lowercase + string.ascii_uppercase + string.digits,6))
    print(a)

    11、利用正则表达式提取到 luffycity.com ,内容如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>luffycity.com</title>
    </head>
    <body>
    </body>
    </html>
    import re
    f = open('index.html','r',encoding='utf-8')
    data = f.read()
    print(re.findall('luffycity.com',data))

    12、写一个用户登录验证程序,文件如下:

    1234.json

    {"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}

    1.用户名为json文件名,密码为 password。
    2.判断是否过期,与expire_date进行对比。
    3.登陆成功后,打印“登陆成功”,三次登陆失败,status值改为1,并且锁定账号。

    import json
    import time
    username = input(‘请输入用户名(文件名):‘)
    f = open(‘1234.json‘,‘r‘,encoding=‘utf-8‘)
    data = f.read()
    data1 = json.loads(data)
    #print(data1[‘password‘])
    count = 0
    while count < 3:
        if (int(time.strftime(‘%Y‘)))-(int(data1["expire_date"][0:4])) > 0:
            print(‘您的账户已过期‘)
            exit()
        if data1[‘status‘] == 1:
            print(‘您的账户已被锁定,无法登录‘)
            exit()
        password = input(‘请输入密码:‘)
        if password == data1[‘password‘]:
            print(‘登录成功‘)
    
        elif count == 2:
            data1[‘status‘] = 1
            f1 = open(‘1234.json‘,‘w‘,encoding=‘utf-8‘)
            json.dump(data1,f1)  #修改json数据
            print(‘您的账户已被锁定‘)
            exit()
        else:
            print(‘您的密码有误,请重新输入‘)
        count += 1

     13、把第12题三次验证的密码进行hashlib加密处理。即:json文件保存为md5的值,然后用md5的值进行验证。

    password = input(‘请输入密码:‘)
        m = hashlib.md5()
        m.update(password.encode())
        if m.hexdigest() == data1[‘password‘]:
            print(‘登录成功‘)

     

  • 相关阅读:
    Linux下Tomcat启动、停止、重新启动
    Linux安装Tomcat
    CentOS7防火墙firewalld 和 CentOS6防火墙iptables的一些配置命令
    Zabbix监控报警Lack of free swap space on Zabbix server解决办法
    CentOS7 防火墙firewalld 和 CentOS6 防火墙iptables 开放zabbix-agent端口的方法
    yii2安装配置完成后,网页打开报错yiiwebRequest::cookieValidationKey must be configured with a secret key
    CentOS 7 使用unzip解压zip文件提示未找到命令的解决方法
    docker安装脚本
    hadoop常用命令
    yum常用安装包
  • 原文地址:https://www.cnblogs.com/wqq0723/p/9789624.html
Copyright © 2011-2022 走看看