- 寫一個用戶登錄驗證程序,文件如下1234.json
{"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
用戶名為json文件名,密碼為 password。判斷是否過期,與expire_date進行對比。登陸成功后,打印“登陸成功”,三次登陸失敗,status值改為1,并且鎖定賬號。 1 # coding:utf-82 import json,os3 import datetime4 # 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 data
14 def save_data(data):
15 f = open('%s.json'%data['id'],'w')
16 json.dump(data,f)
17 f.close()
18 try_count = 0
19 while True:
20 username = input('username:').strip()
21 password = input('password:').strip()
22 filename = '%s.json'%username
23 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 break
30 elif data['status'] != 0:
31 print('賬戶已被鎖定')
32 break
33 elif data['password'] == password:
34 print('welcome to login'.center(20,'*'))
35 break
36 else:
37 print('wrong password')
38 try_count += 1
39 if try_count == 3:
40 data['status'] = 1
41 save_data(data)
42 break
43 else:
44 print('user not exist')
View Code - ?把三次驗證的密碼進行hashlib加密處理。即:json文件保存為md5的值,然后用md5的值進行驗證
1 # coding:utf-82 import json,os3 import datetime4 import hashlib5 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 data
18 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'] = m
27 save_data(data)
28
29 try_count = 0
30 while True:
31 username = input('username:').strip()
32 password = input('password:').strip()
33 filename = '%s.json'%username
34 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 break
44 elif data['status'] != 0:
45 print('賬戶已被鎖定')
46 break
47 elif data['password'] == m_input_pwd:
48 print('welcome to login'.center(20,'*'))
49 break
50 else:
51 print('wrong password')
52 try_count += 1
53 if try_count == 3:
54 data['status'] = 1
55 save_data(data)
56 break
57 else:
58 print('user not exist')
View Code - 寫一個6位隨機驗證碼程序(使用random模塊),要求驗證碼中至少包含一個數(shù)字、一個小寫字母、一個大寫字母.
1 >>> word = random.choice(string.digits) + random.choice(string.ascii_lowercase) + random.choice(string.ascii_uppercase) + ''.join(random.sample(string.ascii_letters,3))
2 >>> word
3 '1eIigX'
View Code 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 logging2 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三個區(qū)別是什么?
首先,這三個模塊都是序列化工具。1. json是所有語言的序列化工具,優(yōu)點跨語言、體積小.只能序列化一些基本的數(shù)據(jù)類型。int\str\list\tuple\dictpickle是python語言特有序列化工具,所有數(shù)據(jù)都能序列化。只能在python中使用,存儲數(shù)據(jù)占空間大.shelve模塊是一個簡單的k,v將內(nèi)存數(shù)據(jù)通過文件持久化的模塊,可以持久化任何pickle可支持的python數(shù)據(jù)格式。2. 使用方式,json和pickle用法一樣,shelve是f = shelve.open('shelve_test')
View Code 序列化是指把內(nèi)存里的數(shù)據(jù)類型轉(zhuǎn)變成字符串,以使其能存儲到硬盤或通過網(wǎng)絡(luò)傳輸?shù)竭h程,因為硬盤或網(wǎng)絡(luò)傳輸時只能接受bytes傳輸數(shù)據(jù)
View Code - subprocess執(zhí)行命令方法有幾種?
有三種方法,他們分別是run()方法call()方法Popen()方法
View Code - 為什么要設(shè)計好目錄結(jié)構(gòu)?
1.可讀性高: 不熟悉這個項目的代碼的人,一眼就能看懂目錄結(jié)構(gòu),知道程序啟動腳本是哪個,測試目錄在哪兒,配置文件在哪兒等等。從而非??焖俚牧私膺@個項目。2.可維護性高: 定義好組織規(guī)則后,維護者就能很明確地知道,新增的哪個文件和代碼應(yīng)該放在什么目錄之下。這個好處是,隨著時間的推移,代碼/配置的規(guī)模增加,項目結(jié)構(gòu)不會混亂,仍然能夠組織良好。
View Code - 打印出命令行的第一個參數(shù)。例如:python argument.py luffy ? ?打印出 luffy
import sys
print(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)打印的內(nèi)容是什么?
答案
/usr/local/nginx
View Code - os.path.dirname和os.path.abspath含義是什么??
os.path.dirname:指定文件的目錄
os.path.abspath:指定文件的絕對路徑
文件名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 ?修改時區(qū) default-time-zone = '+8:00' 為 校準的全球時間 +00:00刪除 explicit_defaults_for_timestamp = true?為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 = 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 ,內(nèi)容如下
<!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
總結(jié)
以上是生活随笔為你收集整理的S4 exercise -- 模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。