博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
S4 exercise -- 模块
阅读量:7009 次
发布时间:2019-06-28

本文共 6353 字,大约阅读时间需要 21 分钟。

  • 写一个用户登录验证程序,文件如下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,并且锁定账号。
1 # coding:utf-8 2 import json,os 3 import datetime 4 # data = {"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"} 5 # 6 # f = open('%s.json'%(data['id']),'w',encoding='utf-8') 7 # 8 # json.dump(data,f) 9 # filename = '1234.json'10 def load_data(file):11     f = open(file)12     data = json.load(f)13     return data14 def save_data(data):15     f = open('%s.json'%data['id'],'w')16     json.dump(data,f)17     f.close()18 try_count = 019 while True:20     username = input('username:').strip()21     password = input('password:').strip()22     filename = '%s.json'%username23     if os.path.isfile(filename):24         data = load_data(filename)25         expire_date = data['expire_date']26         date_now = datetime.datetime.now()27         if date_now > datetime.datetime.strptime(expire_date,'%Y-%m-%d'):28             print("账户已过期")29             break30         elif data['status'] != 0:31             print('账户已被锁定')32             break33         elif data['password'] == password:34             print('welcome to login'.center(20,'*'))35             break36         else:37             print('wrong password')38             try_count += 139         if try_count == 3:40             data['status'] = 141             save_data(data)42             break43     else:44         print('user not exist')
View Code
  •  把三次验证的密码进行hashlib加密处理。即:json文件保存为md5的值,然后用md5的值进行验证
1 # coding:utf-8 2 import json,os 3 import datetime 4 import hashlib 5  6  7 data = {
"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"} 8 9 10 # f = open('%s.json'%(data['id']),'w',encoding='utf-8')11 #12 # json.dump(data,f)13 # filename = '1234.json'14 def load_data(file):15 f = open(file)16 data = json.load(f)17 return data18 def save_data(data):19 f = open('%s.json'%data['id'],'w')20 json.dump(data,f)21 f.close()22 23 24 password = bytes(data['password'],encoding='utf-8')25 m = hashlib.md5(password).hexdigest()26 data['password'] = m27 save_data(data)28 29 try_count = 030 while True:31 username = input('username:').strip()32 password = input('password:').strip()33 filename = '%s.json'%username34 if os.path.isfile(filename):35 data = load_data(filename)36 expire_date = data['expire_date']37 date_now = datetime.datetime.now()38 input_pwd = bytes(password,encoding='utf-8')39 m_input_pwd = hashlib.md5(input_pwd).hexdigest()40 41 if date_now > datetime.datetime.strptime(expire_date,'%Y-%m-%d'):42 print("账户已过期")43 break44 elif data['status'] != 0:45 print('账户已被锁定')46 break47 elif data['password'] == m_input_pwd:48 print('welcome to login'.center(20,'*'))49 break50 else:51 print('wrong password')52 try_count += 153 if try_count == 3:54 data['status'] = 155 save_data(data)56 break57 else:58 print('user not exist')
View Code

 

  • 写一个6位随机验证码程序(使用random模块),要求验证码中至少包含一个数字、一个小写字母、一个大写字母.
1 >>> word = random.choice(string.digits) + random.choice(string.ascii_lowercase) + random.choice(string.ascii_uppercase) + ''.join(random.sample(string.ascii_letters,3))2 >>> word3 '1eIigX'
View Code

 

  • logging模块有几个日志级别?
logging模块共5个级别,它们分别是: DEBUG INFO WARNING ERROR CRITICAL
View Code

 

  • 请配置logging模块,使其在屏幕和文件里同时打印以下格式的日志
2017-10-18 15:56:26,613 - access - ERROR - account [1234] too many login attempts
1 import logging 2  3 logger = logging.getLogger('access') 4 logger.setLevel(logging.DEBUG) 5 ch = logging.StreamHandler() 6 fl = logging.FileHandler('access.log') 7 logger.addHandler(ch) 8 logger.addHandler(fl) 9 formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')10 ch.setFormatter(formatter)11 fl.setFormatter(formatter)12 logger.error("account [1234] too many login attempts")
View Code

 

  • json、pickle、shelve三个区别是什么?
首先,这三个模块都是序列化工具。 1. json是所有语言的序列化工具,优点跨语言、体积小.只能序列化一些基本的数据类型。int\str\list\tuple\dict pickle是python语言特有序列化工具,所有数据都能序列化。只能在python中使用,存储数据占空间大. shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。 2. 使用方式,json和pickle用法一样,shelve是f = shelve.open('shelve_test')
View Code

 

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

 

  • subprocess执行命令方法有几种?
有三种方法,他们分别是 run()方法 call()方法 Popen()方法
View Code

 

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

 

  • 打印出命令行的第一个参数。例如:python argument.py luffy    打印出 luffy
import sysprint(sys.argv[1])
View Code

 

  • 获取文件所在目录代码如下:
'''Linux当前目录/usr/local/nginx/html/文件名:index.html'''import osBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath('index.html')))print(BASE_DIR)打印的内容是什么?答案/usr/local/nginx
View Code

 

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

os.path.dirname:指定文件的目录

os.path.abspath:指定文件的绝对路径

 

  • 通过configparser模块完成以下功能
文件名my.ini[DEFAULT][client]port = 3306socket = /data/mysql_3306/mysql.sock[mysqld]explicit_defaults_for_timestamp = trueport = 3306socket = /data/mysql_3306/mysql.sockback_log = 80basedir = /usr/local/mysqltmpdir = /tmpdatadir = /data/mysql_3306default-time-zone = '+8:00'
q
  1.  修改时区 default-time-zone = '+8:00' 为 校准的全球时间 +00:00
  2. 删除 explicit_defaults_for_timestamp = true
  3.  为DEFAULT增加一条 character-set-server = utf8
import configparserconfig = configparser.ConfigParser()config.read('my.ini')config.set('mysqld','default-time-zone','+00:00')config.remove_option('mysqld','explicit_defaults_for_timestamp')config.set('DEFAULT','character-set-server','utf8')config.write(open('my.ini','w'))
a
[DEFAULT]character-set-server = utf8[client]port = 3306socket = /data/mysql_3306/mysql.sock[mysqld]port = 3306socket = /data/mysql_3306/mysql.sockback_log = 80basedir = /usr/local/mysqltmpdir = /tmpdatadir = /data/mysql_3306default-time-zone = +00:00
o
  • 利用正则表达式提取到 luffycity.com ,内容如下
luffycity.com
q
import ref = open('index.html','r',encoding='utf-8')data = f.read()print(re.findall('luffycity.com',data))
a

 

转载于:https://www.cnblogs.com/wenyule/p/9041159.html

你可能感兴趣的文章
ElasticSearchserver操作命令
查看>>
ThreadPoolExecutor异常处理
查看>>
LeetCode 第 342 题(Power of Four)
查看>>
用QT搭建简单的播放器外壳
查看>>
索引设计指南
查看>>
Timus Online Judge 1057. Amount of Degrees(数位dp)
查看>>
jquery中关于表格行的增删问题
查看>>
分布式事务,EventBus 解决方案:CAP【中文文档】
查看>>
GUI进化--数据与界面分离
查看>>
三级菜单实例
查看>>
Teleport Pro使用教程
查看>>
C# 如何生成CHM帮助文件
查看>>
Java编程的逻辑 (93) - 函数式数据处理 (下)
查看>>
一对多多对多的建表原则
查看>>
Maven详解(四)------ 常用的Maven命令
查看>>
可视化之Berkeley Earth
查看>>
线性表的顺序存储结构之顺序表类的实现_Java
查看>>
Hadoop的namenode的管理机制,工作机制和datanode的工作原理
查看>>
AX88772B 驱动移植
查看>>
array
查看>>