Python 第一节
2025-03-23
课程安排
核心基础:变量、数据类型、条件判断、循环、函数
OpenCV:机器视觉、图形图像处理、图片加密
面向对象
文件IO
网络爬虫
numpy
PyQt:图像界面
一、安装软件和配置环境变量
(一)为什么要安装miniconda3?
由于不同项目需要不同的版本的开发语言环境,为了让软件管理多个Python版本,然后可以同时启动多个和不同版本的项目。
(二)conda使用命令
创建环境
conda create --name envName python=3.9
查看目前已安装好的环境
conda env list
(三)解释器和编译器
解释器→解释型语言:逐行解释逐行运行→性能会弱一些
编译器→编译型语言:代码文件都需要进行编译→才能去运行
(四)运行程序
Python.exe
解释器
二、Python核心基础
(一)如何声明变量
变量名 = 值
age = 2
(二)标识符
程序员自己取的名字(为变量、函数、类取的名字)
命名规则
1、不能使用关键字
如何查看系统自带的关键字有哪些?
import keyword
print(keyword.kwlist)
2、不能以数字开头
只能下划线或者字母开头,后面跟任意字母、数字、下划线均可
命名规范不遵守可以,但是推荐要遵守
username
驼峰式命名:UserName(大驼峰,类名),userName
蛇形命名:user_name(变量,方法名)
(三)数据类型
1、整数
变量名 = 数字
example = 1
2、字符串
(1)声明
可以使用单引号,也可以使用双引号
example = 'text'
example = "text"
(2)使用(打印)
字符串拼接→使用加号,只能拼接字符串
使用模版字符
f("xxxx{yyyy}xxx")
{}里面除了可以写变量以外,也可以写一些表达式打印字符串中的某个字符→通过索引(下标),索引从0开始;可以从左边开始访问也可以从右边开始访问
(3)切片
string='abcdefgh'
string[x:y:z]
→ x 起始位置,y 结束位置,z 步长
(4)运算
+号代表拼接 *号代表复制多个(也是一种拼接)
(5)长度
len(example)
3、列表
长度可变的序列(内容可变)
(1)声明
通过中括号进行声明
example = [1, 2, 3, 4, 5]
(2)添加
append()
只能一个一个添加
(3)访问
通过下标进行访问,但需注意不要越界
列表中的元素是可以修改的,可以重新赋值
(4)删除
① pop()
可传递参数,这个参数指的是要删除哪个元素的下标
不传参数,则删除的是列表的最后一个
如果列表为空,则会报错
② remove()
根据值来删除元素,这个参数必填,否则报错
(5)查找
x in y
→ True、Falsex.index(y)
→ y在x中的下标
(6)最大最小
max(example)
min(example)
(7)排序
排序算法→冒泡排序、选择排序等
sort()
内置的不带参
sort()
默认升序排列带参数
sort(reverse=True)
降序排列
列表,元组,切片?
4、集合
通过至少带一个元素值的大括号进行声明
example = { "test" }
但在声明时只有一个空的大括号会默认为你声明一个字典
如果要声明一个空集合需使用
set()
方法进行声明元素是一个无序的容器,里面的元素不会重复
添加元素
add()
,一个一个添加删除元素
pop()
默认删除第一个,remove(element)
删除指定元素清空集合
clear()
获取长度
len()
不能访问集合里的某个元素,可以遍历集合
扩展:取交集,连接集合
5、元组
通过小括号进行声明
example = (1,)
注意:
如果你的元组只有一个元素,元素后必须加逗号声明这是一个元组,否则忽略括号
元组内部元素不允许修改
6、字典
通过大括号进行声明
example = { test1: "test1", test2: 2, test3: True }
是以
key: value
键值对的形式进行储存的字典里面的数据的访问是通过键名进行访问的
xxx['yyy']
可以修改字典里面某个键名对应的值
可以往字典里面添加新的键值对
如果键名存在则为修改,不存在则为添加
xxx['yyy'] = zzzz
字典在声明时键名可以重复,但值会被靠后的覆盖
字典中可以先取出所有的key
xxx.keys()
,然后遍历key,通过每个key去取出对应的值删除字典中的某个键值对
pop(yyy)
清空字典中的所有键值对
clear()
7、布尔
True
False
查看数据类型:
type(example)
注意Python中的变量不能先声明后赋值,因为Python的变量的变量类型需要由赋给他的值决定
(四)数据类型转换
1、隐式转换
2、显示转换
转 数字:
int()
转 字符串:
str()
转 小数:
float()
(五)条件判断
if
需注意语法格式
(六)运算符
逻辑运算符:与and,或or,非not
算符运算符:+,-,*,/,//(整除),%(取余)
比较运算符:>,<,>=,<=
赋值运算符:=,+=,-=,*=,/=
位运算符:(二进制)
按位与(相同为1,不同为0)
按位或(有1的就是1,否则就是0)
按位异或(相同为0,不同为0)
成员运算符 in,not in
(七)循环
for
while
(八)函数
为了简化代码,减少代码冗余,优化代码层次结构
函数的定义:
def
函数名
参数
形参:函数声明的时候传递的参数,不知道具体值;实参:函数调用的时候传递的参数,可以知道具体值
可以有默认值,在声明的时候用“=”赋值,但如果第一个参数赋了默认值,后续参数均需赋默认值
函数调用时不想传递所有参数,要指定某个参数进行赋值,那就带上参数名=值
返回值:可为多个
三、OpenCV
图形图像处理库
(一)安装
pip install opencv-python opencv-contrib-python
(二)功能
1、打开某张图片
cv2.imread(filename, flags)
filename
图片路径(相对路径)flags
以什么方式打开图片(0→灰度,1→BGR,-1→?)
2、对图片做一下处理
颜色空间转换,调整尺寸
颜色空间:GRAY RGB BGR CMYK HSV HSB ......
颜色空间转换:
cv2.cvtColor(src, code)
src
要转换的图片code
要转换的颜色空间代码
3、保存图片
cv2.imwrite(filename, img)
filename
保存的路径img
要保存的图片
4、在图片上绘制矩形框
cv2.rectangle(img, pt1, pt2, color, thickness)
img
目标图片pt1
矩形左上角坐标pt2
矩形又小脚坐标color
矩形颜色thickness
矩形粗细程度
5、图片加密解密
(1)解决方案一:异或
原图→元组数据→总共有多少条数据→有几行几列
加密的密钥:key
原图和key进行异或→加密后的数据
读取原图
创建随机的key
获取原图的尺寸(几行几列)→填充这个尺寸
设置随机key的范围是0,255
原图与key进行异或
(2)解决方案二:AES
扩展......
四、课后复习
(一)学生管理系统
可以新建、显示、查询学员信息以及退出系统
提示:输入
input()
students = []
def show_menu():
"""显示菜单"""
print("\n" + "*" * 40)
print("欢迎使用[学生管理系统]V1.0\n")
print("1. 新建学员信息")
print("2. 显示学员信息")
print("3. 查询学员信息")
print("0. 退出系统")
print("\n" + "*" * 40)
def add_student():
"""新建学员信息"""
print("\n您选择的功能是: 1")
print("功能: 新建学员信息")
name = input("请输入姓名: ").strip()
phone = input("请输入电话: ").strip()
email = input("请输入邮箱: ").strip()
student = {
"name": name,
"phone": phone,
"email": email
}
students.append(student)
print(f"\n学员 {name} 信息添加成功!")
def show_students():
"""显示所有学员信息"""
print("\n您选择的功能是: 2")
print("功能提示: 显示所有学员信息\n")
print("-" * 40)
if not students:
print("当前没有学员信息")
return
for student in students:
print(f"姓名:{student['name']}--电话:{student['phone']}--邮箱:{student['email']}")
def search_student():
"""模糊查询学员信息"""
print("\n您选择的功能是: 3")
keyword = input("请输入要查询的姓名关键字: ").strip().lower()
found = []
for student in students:
if keyword in student["name"].lower():
found.append(student)
print("\n" + "-" * 40)
if not found:
print(f"未找到包含 '{keyword}' 的学员")
else:
print(f"找到 {len(found)} 条匹配结果:")
for student in found:
print(f"姓名:{student['name']}--电话:{student['phone']}--邮箱:{student['email']}")
def main():
while True:
show_menu()
try:
choice = input("\n请输入执行的操作: ").strip()
if choice == "1":
add_student()
elif choice == "2":
show_students()
elif choice == "3":
search_student()
elif choice == "0":
print("\n感谢使用学生管理系统,再见!")
break
else:
print("\n输入错误,请重新输入0-3之间的数字!")
except Exception as e:
print(f"\n操作出现错误: {str(e)}")
if __name__ == "__main__":
main()
(二)对图片进行部分加密
提示:区域截取、切片、替换
import cv2
import numpy
# 读取原始图像
original_img = cv2.imread('images/face.png')
# 创建一个与原始图像大小相同的黑色掩码
mask = numpy.zeros_like(original_img)
# 定义矩形的坐标
top_left = (150, 150)
bottom_right = (300, 250)
# 在掩码上绘制白色矩形
cv2.rectangle(mask, top_left, bottom_right, (255, 255, 255), -1) # -1 表示填充矩形
# 生成随机密钥
r, c, channels = original_img.shape
key = numpy.random.randint(0, 256, size=(r, c, channels), dtype=numpy.uint8)
# 对原始图像进行加密
encryption_img = cv2.bitwise_xor(original_img, key)
# 将加密后的图像与掩码结合,只保留矩形区域
encrypted_region = cv2.bitwise_and(encryption_img, mask)
# 将原始图像与掩码的反结合,保留矩形区域以外的部分
original_region = cv2.bitwise_and(original_img, cv2.bitwise_not(mask))
# 将加密后的矩形区域与原始图像的其余部分合并
final_img = cv2.add(original_region, encrypted_region)
# 显示结果
cv2.imshow('Encrypted Rectangle', final_img)
cv2.waitKey(0)
cv2.destroyAllWindows()