2022-1-25
1.基础语法
1.1 print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=“”:
区分大小写
务必注意:Python程序是大小写敏感
x="a"
y="b"
print( x, end=" " )
print( y, end=" " )
1.2 在 python 用 import 或者 from…import 来导入相应的模块
将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
1.3 Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)
数字(Number)类型:int (整数),bool (布尔),float (浮点数),complex (复数)
数值运算:
2 / 4 # 除法,得到一个浮点数=0.5
2 // 4 # 除法,得到一个整数=0
2 ** 5 # 乘方=32
Python可以同时为多个变量赋值,如a, b = 1, 2
Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型
字符串:索引值以 0 为开始值,-1 为从末尾的开始位置。
1.4 python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {}
同一个代码块的语句必须包含相同的缩进空格数
if True:
print ("True")
else:
print ("False")
1.5 等待用户输入
按回车键后结束
input("\n\n按下 enter 键后退出。")
1.6 数据类型转换
整型与浮点相加,Python 会自动将结果转换为浮点型
1.6.1 强制类型转换
int() 强制转换为整型:
y = int(2.8) # y 输出果为 2
z = int("3") # z 输出果为 3
str() 强制转换为字符串类型:
y = str(2) # y 输出果为 '2'
z = str(3.0) # z 输出果为 '3.0'
1.7.Python 推导式
[结果表达式 for 变量(i) in 列表 if 条件]
#1-30中能被3整除结果加1
x=[i+1 for i in range(30) if i%3==0]
print(x)
#[1, 4, 7, 10, 13, 16, 19, 22, 25, 28]
dic = {x: x**2 for x in (2, 4, 6)}
print(dic)
{2: 4, 4: 16, 6: 36}
1.8.注释
多行注释用三个单引号 ‘’’ 或者三个双引号 “”" 将注释括起来
1.9.位运算
& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1
<< 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = 0
c = a & b # 12 = 0000 1100
1.10 逻辑运算
x and y:
and符连接两个值时,如果前边的值是真,那么无论后边的值是什么都返回后边的值,如果前边的值是假,那么说明后边的值无论是什么结果都会是假,所以返回的是第一个值;
x or y:
or连接时,如果第一个值为真,那么无论第二个值是什么都会是真所以第二个值不会判断,直接返回第一个值,如果第一个值为假,那么直接返回第二个值,因为第二个值决定了最后的结果
注意:数字只有0是False,其他都是True
1.11:is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
1.12 列表:list是一种有序的集合
classmates = ['Michael', 'Bob', 'Tracy']
classmates.pop() #要删除list末尾的元素
classmates.pop(1) #删除指定位置的元素
classmates.insert(1, 'Jack') #把元素插入到指定的位置
1.13 元组tuple: 一旦初始化就不能修改
因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple
classmates = ('Michael', 'Bob', 'Tracy')
1.14 for 循环
for x in …循环就是把每个元素代入变量x,然后执行缩进块的语句
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
1.15 键值对:内置了字典:dict
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
d['Michael'] # 95
d.get('Michael') # 95
d.pop('Bob') #删除一个key
dict是用空间来换取时间的一种方法
dict的key必须是不可变对象
1.16 set集合
key不能重复
s = set([1, 2, 3])
s.add(4)
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
2 函数
定义一个函数要使用def语句
def my_abs(x):
if x >= 0:
return x
else:
return -x
2.1 空函数
def nop():
pass
2.2 参数检查
只允许整数和浮点数类型的参数,传入错误的参数类型,函数就可以抛出一个错误
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
默认参数可以简化函数的调用
def power(x, n=2):
2.3键鼠操作
导入第三方库pyautogui,pywin32
1.下载对应的whl文件
国内镜像地址
cp310 是自己的python版本3.10 win_amd64 指的是64位系统
2.管理员打开cmd,进入到下载目录
pip install pywin32-302-cp310-cp310-win_amd64.whl
键鼠基本操作
import pyautogui as pg
#移动鼠标到指定位置花费0.2秒
pg.moveTo(496, 403, duration=0.2)
#双击鼠标左键
pg.doubleClick()
#右键单击
pg.rightClick()
#左键单击
pg.leftClick()
#打印鼠标位置
print(pg.position())
#延时1秒
pg.sleep(1)
# 指定位置单击左键
pg.click(10, 10, button='left')
# 向下滚动300个单位
pg.scroll(-300)
pg.mouseDown() # 鼠标按下
pg.sleep(1)
pg.mouseUp() # 鼠标释放
#控制鼠标拖动到指定坐标位置
pg.dragTo(100,300,duration=1)
#按键Enter1次
pg.press("Enter", 1)
#按下
pg.keyDown("Space", 1)
#弹起
pg.keyUp("Space", 1)
# 组合建这个函数可以接受多个参数
pg.hotkey('ctrl', 'a')
窗口基本操作
import win32gui as wg
import win32con as wc
import win32api as wa
# 通过(类名,标题)找窗口 标题可以为None
hwnd = wg.FindWindow("Notepad", None)
# SW_SHOWNORMAL 激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺
wg.ShowWindow(hwnd, wc.SW_SHOWNORMAL)
# 设置为最前窗口
wg.SetForegroundWindow(hwnd)
# 设置为后台
wg.SetBkMode(hwnd, wc.TRANSPARENT)
#移动窗口到0,0位置(0,0)有偏差实际位置为10,0
rect = wg.GetWindowRect(hwnd)
# print(wg.GetWindowRect(hwnd))
w = rect[2] - rect[0]
h = rect[3] - rect[1]
# 移动窗口到0,0,并调整w,h
wg.MoveWindow(hwnd, -10, 0, w, h, True)
找图
需要有依赖包opencv,不然会报错,安装方式如上一样
opencv-pyhton的安装需要依赖已有的numpy
import pyautogui as pg
import time
import win32gui as wg
import win32con as wc
#region区域(x,y,宽度,高度)x,y范围左上角坐标confidence相似度 grayscale=True可以实现灰度匹配
btm = pg.locateOnScreen("pic/2.bmp", region=(10, 537, 713, 537), confidence=0.7)
print(btm)
# 找到传回图片的中心点,并传回坐标
goto_pos = pg.center(btm)
print(goto_pos)
pg.moveTo(goto_pos, duration=0.2)
3.安装驱动级键鼠
pip install pywinio
图形界面问题记录:
1.使用PyQt5 写图形程序时报错
This application failed to start because no Qt platform plugin could be initialized
一个简单的测试图形界面
import sys
import pyautogui as pg
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QPlainTextEdit
def select1():
print("select")
pass
if __name__ == "__main__":
app = QApplication(sys.argv)
w = QMainWindow()
w.setWindowTitle("下载") # 设置窗口标题
w.resize(500, 400) # 设置窗口大小
btn_select = QPushButton('查询', w)
btn_select.move(380, 80) # 控件显示的位置
btn_select.clicked.connect(select1)
# 展示窗口
w.show()
# 程序进行循环等待状态
sys.exit(app.exec())
之前也重新将PyQt5,pyqt5_tools安装和卸载,或者配置环境变量,也都没有用
后来发现PyQt5,pyqt5_tools 包中没有designer.exe,所以可能是没有下完整
解决方法:
现在的designer.exe环境都在PySide6模块中
pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple
将PyQt5替换成PySide6 即可
from PySide6.QtWidgets import QApplication
2.使用requests库发送https请求报错:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
解决方法:用verify=False 去掉https 的验证
response=requests.get(mp3_url2,headers=headers2,data=params,verify=False) #去掉https 的验证
print(response)
data=response.text
3.多个关联py文件打包成exe
在项目文件夹下cmd
安装pyinstaller 模块
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
执行命令生成配置文件
pyi-makespec -F main.py
记事本打开生成的main.spec文件,添加其余的py文件修改console=False和ico图标地址(其中datas为静态资源路径)
执行命令pyinstaller main.spec进行打包,生成可执行文件
pyinstaller main.spec