python常用模块练习题

2019-03-15  本文已影响0人  飞鸟在笼

练习题

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

logging的日志可以分为 debug(), info(), warning(), error() and critical()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()

logger.setLevel(logging.DEBUG)# 设置全局

# 2.生成handler对象

ch = logging.StreamHandler()

ch.setLevel(logging.INFO)# 设置局部

fh = logging.FileHandler("example.log")

# 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-%(threadName)s[%(thread)d]%(message)s")

console_formatter= logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(threadName)s[%(thread)d]%(message)s")

ch.setFormatter(file_formatter)

fh.setFormatter(console_formatter)

logging.debug("too many login attempts")

logging.info("too many login attempts")

logging.error("too many login attempts")

logging.critical("too many login attempts")

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

JSON:

优点:跨语言、体积小

缺点:只支持int\str\list\tuple\dict

Pickle:

优点:专为python设计,支持Python所有的数据类型

缺点:只能在Python中使用,存储数据占空间大

json和pickle的模块只允许dump和load一次,而shelve可以支持多次。

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

4.json的作用是什么?

json,用于字符串和Python数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

(A)简化用JavaScript定义对象的方式

(B)也能用在AJAX中,做为数据载体之一

1.JSON应用场景

web客户端和服务器通过AJAX(HTTP REQUEST)进行数据交换,而JSON是AJAX中最常用的数据格式。

2.JSON简介和语法

(1)概念:JSON:JavaScript对象表示法,是一种完全独立与语言的文本格式

(2)语法:数据由逗号分隔,{}保存对象,【】保存数组

3.JSON语法检测工具:BE JSON,JSON.cn

4.JSON与JavaScript对象的区别

1.JSON是从JavaScript对象中演变出来的,是JavaScript的一个子集

  2.表面上,可以看作使用“”引起的是JSON

5.JSON在HTTP请求中的作用

1.HTTP协议采用了请求/响应模型,即客户端发出请求,服务器端给予相应

2.传输过程包括message-header和message-body两部分

3.message-body是传输的具体信息

4.message-header,用来设置HTTP的一些信息

6.HTTP Header信息

1.HTTP Header是HTTP请求和响应的核心

2.包含许多有关的客户端环境和请求正文的有用信息

---------------------

作者:ZhzetFor

来源:CSDN

原文:https://blog.csdn.net/qq_32631151/article/details/79085527

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

三种执行命令的方法

subprocess.run(*popenargs, input=None, timeout=None, check=False, **kwargs) #官方推荐

subprocess.call(*popenargs, timeout=None, **kwargs) #跟上面实现的内容差不多,另一种写法

subprocess.Popen() #上面各种方法的底层封装

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

我们设计一个层次清晰的目录结构,就是为了达到以下两点:

1.可读性高:不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本在哪,测试目录在哪儿。这个歌=好处是,随着时间的推移,代码、配置的规模增加,项目结构不会混乱,仍然能够阻止良好。

2.可维护性高:定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码、配置的规模增加,项目结构不会混乱,仍然能够阻止良好。

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

python argument.py luffy

打印出 luffy

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)

打印的内容是什么?

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'

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

删除 explicit_defaults_for_timestamp = true

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

import configparser

config = configparser.ConfigParser()# 一个对象

config.sections()

config.read("conf.ini")

config['mysqld']['default-time-zone'] ='+00:00'    # 修改

config.remove_option("mysqld","explicit_defaults_for_timestamp")# 删除

config["DEFAULT"]["character-set-server"]="utf-8"    #增加一条

config.write(open("conf.ini","w"))# 写回文件

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

import random

import string

d = random.sample(string.ascii_letters+string.digits,3)

d.append(random.choice(string.ascii_lowercase))

d.append(random.choice(string.ascii_uppercase))

d.append(random.choice(string.digits))

random.shuffle(d)

print("".join(d))

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

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>luffycity.com</title>

</head>

<body>

</body>

</html>

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

1234.json

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

用户名为json文件名,密码为 password。

判断是否过期,与expire_date进行对比。

登陆成功后,打印“登陆成功”,三次登陆失败,status值改为1,并且锁定账号。

答:已经做出,略,用到json,os,time模块

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

14.最近luffy买了个tesla,通过转账的形式,并且支付了5%的手续费,tesla价格为75万。文件为json,请用程序实现该转账行为。

需求如下:

目录结构为

.

├── account

│  ├── luffy.json

│  └── tesla.json

└── bin

      └── start.py

当执行start.py时,出现交互窗口

  ------- Luffy Bank ---------

  1.  账户信息

  2.  转账

选择1 账户信息 显示luffy的当前账户余额。

选择2 转账 直接扣掉75万和利息费用并且tesla账户增加75万

15.对上题增加一个需求:提现。

目录结构如下

.

├── account

│  └── luffy.json

├── bin

│  └── start.py

└── core

  └── withdraw.py

当执行start.py时,出现交互窗口

  ------- Luffy Bank ---------

1.  账户信息

2.  提现

选择1 账户信息 显示luffy的当前账户余额和信用额度。

选择2 提现 提现金额应小于等于信用额度,利息为5%,提现金额为用户自定义。

16.尝试把上一章的验证用户登陆的装饰器添加到提现和转账的功能上。

17.对第15题的用户转账、登录、提现操作均通过logging模块记录日志,日志文件位置如下

.

├── account

│  └── luffy.json

├── bin

│  └── start.py

└── core

|  └── withdraw.py

└── logs

    └── bank.log

上一篇下一篇

猜你喜欢

热点阅读