• 写一个用户登录验证程序,文件如下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,并且锁定账号。
 # coding:utf-8
import json,os
import datetime
# data = {"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
#
# f = open('%s.json'%(data['id']),'w',encoding='utf-8')
#
# json.dump(data,f)
# filename = '1234.json'
def load_data(file):
f = open(file)
data = json.load(f)
return data
def save_data(data):
f = open('%s.json'%data['id'],'w')
json.dump(data,f)
f.close()
try_count = 0
while True:
username = input('username:').strip()
password = input('password:').strip()
filename = '%s.json'%username
if os.path.isfile(filename):
data = load_data(filename)
expire_date = data['expire_date']
date_now = datetime.datetime.now()
if date_now > datetime.datetime.strptime(expire_date,'%Y-%m-%d'):
print("账户已过期")
break
elif data['status'] != 0:
print('账户已被锁定')
break
elif data['password'] == password:
print('welcome to login'.center(20,'*'))
break
else:
print('wrong password')
try_count += 1
if try_count == 3:
data['status'] = 1
save_data(data)
break
else:
print('user not exist')
  • 把三次验证的密码进行hashlib加密处理。即:json文件保存为md5的值,然后用md5的值进行验证
 # coding:utf-8
import json,os
import datetime
import hashlib data = {"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"} # f = open('%s.json'%(data['id']),'w',encoding='utf-8')
#
# json.dump(data,f)
# filename = '1234.json'
def load_data(file):
f = open(file)
data = json.load(f)
return data
def save_data(data):
f = open('%s.json'%data['id'],'w')
json.dump(data,f)
f.close() password = bytes(data['password'],encoding='utf-8')
m = hashlib.md5(password).hexdigest()
data['password'] = m
save_data(data) try_count = 0
while True:
username = input('username:').strip()
password = input('password:').strip()
filename = '%s.json'%username
if os.path.isfile(filename):
data = load_data(filename)
expire_date = data['expire_date']
date_now = datetime.datetime.now()
input_pwd = bytes(password,encoding='utf-8')
m_input_pwd = hashlib.md5(input_pwd).hexdigest() if date_now > datetime.datetime.strptime(expire_date,'%Y-%m-%d'):
print("账户已过期")
break
elif data['status'] != 0:
print('账户已被锁定')
break
elif data['password'] == m_input_pwd:
print('welcome to login'.center(20,'*'))
break
else:
print('wrong password')
try_count += 1
if try_count == 3:
data['status'] = 1
save_data(data)
break
else:
print('user not exist')
  • 写一个6位随机验证码程序(使用random模块),要求验证码中至少包含一个数字、一个小写字母、一个大写字母.
 >>> word = random.choice(string.digits) + random.choice(string.ascii_lowercase) + random.choice(string.ascii_uppercase) + ''.join(random.sample(string.ascii_letters,3))
>>> word
'1eIigX'
  • logging模块有几个日志级别?
 logging模块共5个级别,它们分别是:
DEBUG INFO WARNING ERROR CRITICAL
  • 请配置logging模块,使其在屏幕和文件里同时打印以下格式的日志
2017-10-18 15:56:26,613 - access - ERROR - account [1234] too many login attempts
 import logging

 logger = logging.getLogger('access')
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
fl = logging.FileHandler('access.log')
logger.addHandler(ch)
logger.addHandler(fl)
formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
ch.setFormatter(formatter)
fl.setFormatter(formatter)
logger.error("account [1234] too many login attempts")
  • 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')
  • json的作用是什么?
    序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes
 传输数据
  • subprocess执行命令方法有几种?
有三种方法,他们分别是
run()方法
call()方法
Popen()方法
  • 为什么要设计好目录结构?
1.可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等。从而非常快速的了解这个项目。

2.可维护性高: 定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好。
  • 打印出命令行的第一个参数。例如:python argument.py luffy    打印出 luffy
import sys
print(sys.argv[1])
  • 获取文件所在目录代码如下:
'''
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) 打印的内容是什么?
答案
/usr/local/nginx
  • os.path.dirname和os.path.abspath含义是什么?

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

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

  • 通过configparser模块完成以下功能
文件名my.ini

[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'

q

  1. 修改时区 default-time-zone = '+8:00' 为 校准的全球时间 +00:00
  2. 删除 explicit_defaults_for_timestamp = true
  3. 为DEFAULT增加一条 character-set-server = utf8
import configparser

config = 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 = 3306
socket = /data/mysql_3306/mysql.sock [mysqld]
port = 3306
socket = /data/mysql_3306/mysql.sock
back_log = 80
basedir = /usr/local/mysql
tmpdir = /tmp
datadir = /data/mysql_3306
default-time-zone = +00:00

o

  • 利用正则表达式提取到 luffycity.com ,内容如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>luffycity.com</title>
</head>
<body>
</body>
</html>

q

import re
f = open('index.html','r',encoding='utf-8')
data = f.read()
print(re.findall('luffycity.com',data))

a

S4 exercise -- 模块的更多相关文章

  1. Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析

    前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...

  2. 【Python基础】lpthw - Exercise 40 模块、类和对象

    一. 模块(module) 模块中包含一些函数和变量,在其他程序中使用该模块的内容时,需要先将模块import进去,再使用.操作符获取函数或变量,如 # This goes in mystuff.py ...

  3. python基础-模块

    一.模块介绍                                                                                              ...

  4. Unity加载模块深度解析(纹理篇)

    在游戏和VR项目的研发过程中,加载模块所带来的效率开销和内存占用(即“加载效率”.“场景切换速度”等)经常是开发团队非常头疼的问题,它不仅包括资源的加载耗时,同时也包含场景物件的实例化和资源卸载等.在 ...

  5. oop、configparser、xml模块

    本节大纲:一:在python中,有两种编程思想.1:函数式编程.2:oop.无论是函数式编程还是oop都是相辅相成.并不是说oop比函数式编程就好.各有各的优缺点.在其他语言中java等只能以面向对象 ...

  6. Web应用程序系统的多用户权限控制设计及实现-栏目模块【8】

    前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,本章讲述Web权限管理系统的基本模块-栏目模块.栏目模块涉及到的数据表为目录表. 1.1栏目域 为了更规范和方便后期系统的二次开发和维护 ...

  7. Mininet实验 使用l2_multi模块寻找最短路径实验

    参考:使用l2_multi模块寻找最短路径实验 1. 实验目的 1.认识VND并且掌握其基本使用方法. 2.学会使用pox控制器的l2_multi模块寻找主机间的最短传输路径. 2. 实验原理 VND ...

  8. Python开发【第一篇】Python基础之自定义模块和内置模块

    为什么要有模块,将代码归类.模块,用一砣代码实现了某个功能的代码集合. Python中叫模块,其他语言叫类库. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代 ...

  9. Python标准库之os模块

    1.删除和重命名文件 import os import string def replace(file, search_for, replace_with): # replace strings in ...

随机推荐

  1. AS3获取对象类名,getDefinitionByName,getQualifiedClassName,getQualifiedSuperclassName

    首先先告诉大家,我要讲的是flash.utils包中的getDefinitionByName,getQualifiedClassName,getQualifiedSuperclassName可能帮助文 ...

  2. How to Pronounce the Word ‘TO’

    How to Pronounce the Word ‘TO’ Share Tweet Share Tagged With: TO Reduction Study the TO reduction.   ...

  3. ArcGIS 复制要素

    DataManagementTools.General.Copy DataManagementTools.Features.CopyFeatures ConversionTools.ToGeodata ...

  4. etcd ui

    https://github.com/henszey/etcd-browser docker build --build-arg http_proxy=http://109.105.4.17:3128 ...

  5. 大型运输行业实战_day04_1_搭建ssm框架最容易犯的错误

    错误1.MapperScannerConfigurer中应该去扫描包,而不是接口 如果出现上述错误,报错如下,注意我们在看报错日志的时候一点要从 后往前看 错误2.没有配置别名,又要使用别名 命名不规 ...

  6. MySql初步II

    [MySql初步II] 1.Order By 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列. 默认情况下,它是按升排列. 实例: 2.Join语法 Join不是一个关键字 ...

  7. 网站连接数据库连接不上原因是ip地址与端口号格式不对

    192.168.1.1:8080这样连接一直出错, 后来改为192.168.1.1,8080就可以了 原因是格式不对,把冒号给为逗号就可以了

  8. np.frombuffer()

    numpy.frombuffer numpy.frombuffer(buffer, dtype=float, count=-1, offset=0) Interpret a buffer as a 1 ...

  9. 如何搭建hibernate框架

    我写这篇博客,主要是想让大家能够快速上手hibernate,本人建议学习框架,应该一个框架一个框架学习,别一上手就三大框架整合,学习之类的.这里只是单独搭建hibernate框架,让大家 能够更好的上 ...

  10. Excel Sheet Column Title (STRING - TYPE CONVERTION)

    QUESTION Given a positive integer, return its corresponding column title as appear in an Excel sheet ...