random模块
import random
print(random.random())
print(random.randint(1,6))
print(random.choice(['月薪30000','月薪99999','年薪百万']))
print(random.sample(['月薪19999','离家近','早点毕业','买房全款','做梦都能笑醒'],3))
l1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A', '大王', '小王']
random.shuffle(l1)
print(l1)
随机数面试题
eg1:
import random
code = ''
for i in range(5):
res1 = str(random.randint(0,9))
res2 = chr(random.randint(97,122))
res3 = chr(random.randint(65,90))
random_num = random.choice([res1,res2,res3])
code += random_num
print(code)
------------
eg2:
import random
def get_num(n):
code = ''
for i in range(n):
res1 = str(random.randint(0, 9))
res2 = chr(random.randint(97, 122))
res3 = chr(random.randint(65, 90))
random_num = random.choice([res1, res2, res3])
code += random_num
return code
num = get_num(5)
print(num)
num2 = get_num(10)
print(num2)
hashlib模块
加密模块介绍
1.什么是加密
将明文数据(看得懂)经过处理之后变成密文数据(看不懂)的过程
2.为什么要加密
不想让敏感的数据轻易的泄露
3.如何判断当前数据值是否已经加密
一般情况下如果是一串没有规则的数字字母符合的组合一般都是加密之后的结果
4.加密算法
就是对明文数据采用的加密策略
不同的加密算法复杂度不一样 得出的结果长短也不一样
通常情况下加密之后的结果越长 说明采用的加密算法越复杂
5.常见加密算法
md5 sha系列 hmac base64
模块案例
import hashlib
md5 = hashlib.md5()
md5.update(b'summer321')
res = md5.hexdigest()
print(res)
****加密之后的结果一般情况下不能反解密**
加密的三种方式
目的是为了让密文安全性更高
1.分段加密
import hashlib
md5 = hashlib.md5()
md5.update(b'hello')
md5.update(b'summer')
md5.update(b'321')
res = md5.hexdigest()
print(res)
md5.update(b'hellosummer321')
res = md5.hexdigest()
print(res)
------------
2.加盐处理
password = input('password>>>:').strip()
md5.update('公司设置的盐(干扰项)'.encode('utf8'))
md5.update(password.encode('utf8'))
res = md5.hexdigest()
print(res)
------------
3.动态加盐
干扰项每次都不一样
eg:每次获取当前时间 每个用户用户名截取一段
加密常见应用场景
1.用户密码加密
注册存储密文 登录也是比对密文
2.文件安全性校验
正规的软件程序写完之后做一个内容的加密
网址提供软件文件记忆该文件内容对应的密文
用户下载完成后不直接运行 而是对下载的内容做加密
然后比对两次密文是否一致 如果一致表示文件没有被改
不一致则表示改程序有可能被植入病毒
3.大文件加密优化
程序文件100G
一般情况下读取100G内容然后全部加密 太慢
不对100G所有的内容加密 而是截取一部分加密
eg:每隔500M读取30bytes
import os
os.path.getsize()
subprocess模块
import subprocess
cmd = input('请输入您的指令>>>:').strip()
sub = subprocess.Popen(cmd,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
print(sub.stdout.read().decode('gbk'))
print(sub.stderr.read().decode('gbk'))

logging模块
logging模块说明
1.什么是日志
日志就类似于是历史记录
2.为什么要使用日志
为了记录事物发生的事实(史官)
3.如何使用日志
3.1.日志等级
import logging
logging.debug('debug等级')
logging.info('info等级')
logging.warning('warning等级')
logging.error('error等级')
logging.critical('critical等级')
模块使用
import logging
file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',)
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
handlers=[file_handler,],
level=logging.ERROR
)
logging.error('我不好!!!')

日志模块组成
import logging
logger = logging.getLogger('购物车记录')
hd1 = logging.FileHandler('a1.log', encoding='utf-8')
hd2 = logging.FileHandler('a2.log', encoding='utf-8')
hd3 = logging.StreamHandler()
fm1 = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
)
fm2 = logging.Formatter(
fmt='%(asctime)s - %(name)s: %(message)s',
datefmt='%Y-%m-%d',
)
logger.addHandler(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3)
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
hd3.setFormatter(fm1)
logger.setLevel(10)
logger.debug('写了半天 好累啊 好热啊')


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现