jiezhi(易)的python知识库

易jiezhi 个人空间 lv114514

鼠标按下事件pygame

获取所有事件列表

1
pygame.event.get()

获取事件类型

1
event.type

退出事件

1
event.tupe==QUIT

鼠标按下事件

1
event.type==MOUSEBUTTONDOWN

获取鼠标按键的键值

1
event.button

鼠标按键的键值为1表示鼠标左键按下

1
event.button==1

鼠标移动事件

1
event.type==MOUSEMOTION
1
event.pos[0]
1
event.pos[1]

键盘按下事件

1
event.type==KEYDOWN
1
event.type==KEYUP
1
event.key
1
event.key==K_SPACE
1
event==K_UP
1
event.key==K_DOWN
1
envent.key==K_LEFT
1
event.key==K_RIGHT
1
2
3
4
5
6
7
8
9
10
#
#
#
# 设置发送两个事件的间隔
# |
#单位毫秒 |
pygame.key.set_repeat(delay,interval)
# |
# |
# 设置多久后发送第一个KEYDOWN事件

状态

1
2
handleEvent()
state='START'
1
2
3
4
5
6
7
conEnter()#产生所有对象
comPaint()#绘制所有对象
comMove()#让所有对象移动
isActionTime()#用于判断是否开始行动
checkHit()#用于判断碰撞检测
fillText()#书写文字
state='RUNNING'
1
2
state='WIN'
state='LOSE'

递归函数定义:

递归算法通常用自定义函数来实现,这个函数称为递归函数f(n)就是递归函数

函数基本结构:

包括递归出口和递归操作递归出口是指函数在什么情况下停止递归递归操作是指函数在递归过程中需要执行的操作按照先书写递归出口再书写递归操作的顺序编写代码

1
2
3
4
5
6
7
8
9
10
i=0
def fun():
global i
i+=1
if i<5:
print(f"进入第{i}层")
fun()
i-=1
print(f"回归第{i}层")
fun()

设计递归函数的三要素

第一要素:明确函数要干什么

第二要素:寻找递归结束条件

第三要素:找出函数的等价关系式

题目描述

假设有五位同学,他们的编号分别为1、2、3、4、5。从1号同学开始到5号同学为止,每位同学拥有的金币数比相邻的下一位同学多1枚。已知5号同学有10枚金币,问1号同学有几枚

金币?

输入描述

输出描述

样例输入1

样例输出1

14

1
2
3
4
5
6
7
8
9
#定义函数
def f(n):
#递归出口
if n==5:
return 10
#递归操作
return f(n+1)+1
#调用函数
print(f(1))

1
2
3
4
5
6
def f(n):
if n==1 or n==2:
return 1
else:
return f(n-1)+f(n-2)
print("一年后兔子总对数为:",f(12))

查找(二分查找、插补查找、分块查找)

二分查找

:::info
中间值:mid=(min+max)//2

目标>中间值

min=mid+1

目标>中间值

max=mid-1

目标=中间值

:::

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#目标数字
n=9
#最小索引&最大索引
min=0
max=len(a)-1
while min<=max:
#中间索引
mid=(min+max)//2
#目标数字比中间数字大
if n>a[mid]:
#调整最小索引,在中间索引基础上加1
min=mid+1
#目标数字比中间数字小
elif n<a[mid]:
#调整最大索引,在中间索引基础上减1
max=mid-1
else:
#输出索引,跳出循环
print(f"目标元素的索引为{mid}")
break

插补查找

mid=left+(target-data[left])//(data[right]-data[left])*(right-left)

▪mid:分界(分区)索引 •target:目标数据

▪left:最左侧数据的索引 ▪date[left]:最左侧数据值

▪right:最右侧数据的索引 ▪data[right]:最右侧数据值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
data=[34,53,57,68,72,81,89,93,99]
#目标数据、最左侧数据的索引、最右侧数据的索引
target=53
left=0
right=len(data)-1
while left<=right:
#使用公式计算分区索引值
mid=left+(target-data[left])/(data[right]-data[left])*(right-left)
#取整
mid=int(mid)
#目标数据大于分区值
if target > data[mid]:
left=mid+1
#目标数据小于分区值
elif target<data[mid]:
right=mid-1
#目标数据等于分区值(成功查找到目标数据)
else:
#输出当前索引,跳出循环
print(f"数字{target}的索引为{mid}")
break

分块查找

1.分块

1
2
3
4
5
6
7
8
9
10
11
data=[23,43,56,78,97,100,120,135,147,150,155]
#目标数字
target=150
#每块长度
b_length=4
#分块数量
b_num=len(data)//b_length
#总长度除以每块长度存在余数,分块数量应增加一
if len(data)%b_length:
b_num+=1
print(f"总共可分为{b_num}块")

2.遍历分好的块

1
2
3
4
5
6
7
8
9
#遍历分好的三块
for b_i in range(b_num):
#开始索引
start=b_i*b_length
#结束索引
end=(b_i+1)*b_length-1
#末尾块结束索引超出,限制范围
if end>=len(data):
end=len(data)-1

3.查找

1
2
3
4
5
6
7
8
9
10
#目标元素大于每块最大值,跳过本次循环(跳过当前块)
if target>data[end]:
continue
#目标元素小于等于每块最大值,在当前块查找目标元素(顺序查找)
for i in range(start,end+1):
if target==data[i]:
index=i
break
break
print(f"数字{target}在列表中的索引为{index}")

4.完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
data=[23,43,56,78,97,100,120,135,147,150,155]
#目标数字
target=150
#每块长度
b_length=4
#分块数量
b_num=len(data)//b_length
#总长度除以每块长度存在余数,分块数量应增加一
if len(data)%b_length:
b_num+=1
#遍历分好的三块
for b_i in range(b_num):
#开始索引
start=b_i*b_length
#结束索引
end=(b_i+1)*b_length-1
#末尾块结束索引超出,限制范围
if end>=len(data):
end=len(data)-1
#目标元素大于每块最大值,跳过本次循环(跳过当前块)
if target>data[end]:
continue
#目标元素小于等于每块最大值,在当前块查找目标元素(顺序查找)
for i in range(start,end+1):
if target==data[i]:
index=i
break
break
print(f"数字{targe}在列表中的索引为{index}")

递归

递归函数定义:

递归算法通常用自定义函数来实现,这个函数称为递归函数f(n)就是递归函数

函数基本结构:

包括递归出口和递归操作递归出口是指函数在什么情况下停止递归递归操作是指函数在递归过程中需要执行的操作按照先书写递归出口再书写递归操作的顺序编写代码

切片

选取从开始到结束的部分,以步长为间隔选择

不包含本身

|

列表名[开始:结束:步长]

|

可省略,默认为1

1
2
3
4
5
6
7
8
9
10
n=eval(input())
n_ns=[]
for i in range(len(n)):
for j in range(i+1,len(n)):
n1=n[i]
n2=n[j]
n_n=n2[0]+n1[1:]+'-'+n1[0]+n2[1:]
if n_n not in n_ns and len(n_n)!=11:
n_ns.append(n_n)
print(f"有效的名字的数量为:{len(n_ns)}")

切片分割年月日

‘2025 12 20’

0123456789

年:int(date[:4])–>2025

月:int(date[5:7])–>12

日:int(date[7:])–>20

split()

1
2
3
4
5
n = input().split(' ')
split(‘分割符’)函数 分隔字符串,返回列表
date1 = list(map(int,n[0].split('-')))
date2 = list(map(int,n[1].split('-')))
print(date1,date2)

map()

  • Title: jiezhi(易)的python知识库
  • Author: 易jiezhi 个人空间
  • Created at : 2025-08-12 10:17:54
  • Updated at : 2025-08-12 10:20:03
  • Link: https://jiezhi.com/2025/08/12/jiezhi-易-的python知识库/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments