import re,json
class Person(object):
pass
def main():
re_str = r'(\d\d)\.[a-z]{2,3}'
re_str2 = r'\d\d\.[a-z]{2,3}'
re_str3 = r'(\d\d)\.([a-z]{2,3})'
result = re.findall(re_str,'12.ad=l[q23.sd')
result2 = re.findall(re_str2, '12.ad=l[q23.sd')
result3 = re.findall(re_str3, '12.ad=l[q23.sd')
print(result)
print(result2)
print(result3)
# json数据处理
with open('data.txt',encoding='utf-8') as f:
dict1 = json.load(f)
for dict2 in dict1['data']:
print(dict2['name'])
# 如果用贪婪就会取到下一个name之前对,匹配很多无关信息
names = re.findall(r'"name":"(.*?)",',f.read())
if __name__ == '__main__':
main()
结果如下:
['12', '23']
['12.ad', '23.sd']
[('12', 'ad'), ('23', 'sd')]
#什么是非贪婪:在正则表达中匹配不正确次数对符号后边可以加?来表示尽可能少对匹配
# * + ? {} 后面均可以加问号在能匹配对前提下匹配尽可能少
# 非贪婪尽可能多的匹配
import re
def main():
# 1. complie()将正则表达式转换为正则对象
# 编译后直接通过对象调用相关方法
re_object = re.compile(r'(\d{3})=(\d{2})')
print(re_object)
result = re_object.fullmatch('432=12')
print(result)
# 2. fullmatch(正则表达式,字符串)
# 用正则表达式和字符串去完全匹配,匹配成功返回匹配对象,匹配失败返回None
# 应用:检测字符串内容是否符合要求,例如:检测帐号,密码,手机号,身份证等是否合法
# 匹配对象
# 1.span - 匹配到对字符串在原字符串中的下表范围
print(result.span()) #获取整个正则表达式匹配到的内容的范围
start, end = result.span()
print(start, end)
print(result.start(), result.end())
# span里面对参数用于取group
# 3. - 获取匹配到的字符串,group中可以填写的参数为分组
print(result.group())
print(result.groups())
print(result.group(1))
print(result.group(2))
# 4 string 获取原字符串
print(result.string)
# 5 match(正则表达式,字符串) -->让字符串对开头和正则表达式进行匹配,匹配成功返回匹配对象
result = re.match(r'\D\d', 's3asdads')
print(result)
# 6 search(正则表达式,字符串) -> 在字符串中去匹配出一个符合正则表达式对字串,匹配成功结果是对象,否则是None
print(re.search(r'[\u4300-\u9fa5]{3}', 'sadj额额lll你好吗..'))
# match 从头开始匹配
def sxc_match(re_str, str1):
re_str = '^'+re_str
return re.search(re_str,str1)
print(sxc_match(r'\d\d','86asdasd'))
# 7.split(正则表达式,字符串)
# 字符串按照固定对单个切取
result = 'adasdasd1dasdffa'.split('s')
print(result)
# 将字符串按照正则表达式进行切割,返回对一个列表
print(re.split(r'\d+','asd112312asda2131asda'))
# sub(正则表达式,新子串,原字符串) 将原字符串中能够和正则表达式匹配的子串匹配的替换成新子串
print(re.sub(r'傻[比逼]|[草操]','*','我操你是傻逼吗?'))
# findall(正则表达式, 字符串) 在字符串中获取满足正则表达式的所有的子串
# 注意:如果正正则表达式中有分组,直接获取到是分组中匹配的内容
print(re.findall(r'\d+[a-z]','asdasdsadafsa12asd13asd'))
print(re.findall(r'(\d+)[a-z]', 'asdasdsadafsa12asd13asd'))
# 返回元祖
print(re.findall(r'(\d+)([a-z])', 'asdasdsadafsa12asd13asd'))
# finditer(正则表达式,字符串) - 在字符串中获取满足正则表达式的所有子串(结果是迭代器)
# findall有分组只能取分组里面的
result = re.finditer(r'(\d+)[a-z]', 'asdasdk123askdas122ad')
print(result)
print(next(result).group())
# re.I 忽略大小写
print(re.fullmatch(r'[a-z]{2}','JA',re.I))
if __name__ == '__main__':
main()
结果如下
re.compile('(\\d{3})=(\\d{2})')
<_sre.SRE_Match object; span=(0, 6), match='432=12'>
(0, 6)
0 6
0 6
432=12
('432', '12')
432
12
432=12
<_sre.SRE_Match object; span=(0, 2), match='s3'>
<_sre.SRE_Match object; span=(9, 12), match='你好吗'>
<_sre.SRE_Match object; span=(0, 2), match='86'>
['ada', 'da', 'd1da', 'dffa']
['asd', 'asda', 'asda']
我*你是*吗?
['12a', '13a']
['12', '13']
[('12', 'a'), ('13', 'a')]
<callable_iterator object at 0x7fb01a3deba8>
123a
<_sre.SRE_Match object; span=(0, 2), match='JA'>
pygame游戏基本框架的创建
import pygame
def base_game():
pygame.init()
#2 创建游戏窗口
#set_mode(窗口大小) == set_mode((宽,高))
window = pygame.display.set_mode((400,600))
pygame.display.set_caption('lost castle')
# 颜色是一个元组,元组有三个int类型元素,返回0-255
window.fill((200,230,255,1))
pygame.display.flip()
#3 让游戏保持运行状态(游戏循环)
while True:
# 不断检测游戏过程中是否有事件的产生
for event in pygame.event.get():
# 只有当事件产生后才会进入for循环
if event.type == pygame.QUIT:
exit()
def main():
base_game()
if __name__ == '__main__':
main()
pygame中图片的显示
import pygame
def main():
pygame.init()
window = pygame.display.set_mode((700,1243))
pygame.display.set_caption('picture')
window.fill((255,255,255))
# 显示图片 1.加载图片
# image.load(图片地址) ->返回图片对象surface
image = pygame.image.load('images/001.jpg')
# 2 加图片添加到窗口上
# blit(image,(0, 0))
window.blit(image,(0,0))
# 1.获取图片大小
print(window.get_size())
print(image.get_size())
# 2.图片的形变,返回一个缩放后对新对象
# transform.scale
# transform.rotozoom(surface,angle,scale)
new_image = pygame.transform.scale(image,(170,300))
new_image2 = pygame.transform.rotozoom(image,45,0.4)
window.blit(new_image2, (0, 0))
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if __name__ == '__main__':
main()
字体的显示
import pygame
def base_game():
pygame.init()
#2 创建游戏窗口
#set_mode(窗口大小) == set_mode((宽,高))
window = pygame.display.set_mode((400,600))
pygame.display.set_caption('lost castle')
# 颜色是一个元组,元组有三个int类型元素,返回0-255
window.fill((0,0,0,1))
# 创建大小
# 系统字体
font = pygame.font.SysFont('Times',20)
# 自定义字体
# Font(字体文件路径,字体大小)
font2 = pygame.font.Font('images/font2.ttf',40)
# render(文字,True,文字颜色) - 返回一个文字对象(surface)
text = font2.render('hello 世界',True, (255,255,255))
window.blit(text, (50,50))
pygame.display.flip()
#3 让游戏保持运行状态(游戏循环)
while True:
# 不断检测游戏过程中是否有事件的产生
for event in pygame.event.get():
# 只有当事件产生后才会进入for循环
if event.type == pygame.QUIT:
exit()
def main():
base_game()
if __name__ == '__main__':
main()
图形
import pygame,math
def base_game():
pygame.init()
window = pygame.display.set_mode((400,600))
pygame.display.set_caption('lost castle')
window.fill((255,255,255,1))
# surface,颜色,点列表,
pygame.draw.line(window,(0,255,0),(10,10),(400,400),4)
point_list = [(100,0),(41,181),(195,69),(5,69),(159,181)]
pygame.draw.lines(window,(0,0,0),True,point_list)
pygame.draw.circle(window,(0,0,0),(200,300),100,0)
# pygame.polygan()多边形
pygame.draw.arc(window,(0,255,255),(100,470,50,200),math.pi/4,math.pi/4*3,5)
window.fill((255, 255, 255, 1))
pygame.display.flip()
#3 让游戏保持运行状态(游戏循环)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.MOUSEBUTTONDOWN:
point_list = []
elif event.type == pygame.MOUSEBUTTONUP:
if len(point_list) < 1:
break
pygame.draw.lines(window,True,(255,255,0),point_list,3)
pygame.display.flip()
elif event.type == pygame.MOUSEMOTION:
point_list.append(event.pos)
def main():
base_game()
if __name__ == '__main__':
main()
Pygame
Pygame有很多的模块,不同的模块专注于不同的功能:
模块名 | 功能 |
---|---|
pygame.cdrom | 访问光驱 |
pygame.cursors | 加载光标 |
pygame.display | 访问显示设备 |
pygame.draw | 绘制形状、线和点 |
pygame.event | 管理事件 |
pygame.font | 使用字体 |
pygame.image | 加载和存储图片 |
pygame.joystick | 使用游戏手柄或者 类似的东西 |
pygame.key | 读取键盘按键 |
pygame.mixer | 声音 |
pygame.mouse | 鼠标 |
pygame.movie | 播放视频 |
pygame.music | 播放音频 |
pygame.overlay | 访问高级视频叠加 |
pygame.rect | 管理矩形区域 |
pygame.sndarray | 操作声音数据 |
pygame.sprite | 操作移动图像 |
pygame.surface | 管理图像和屏幕 |
pygame.surfarray | 管理点阵图像数据 |
pygame.time | 管理时间和帧信息 |
pygame.transform | 缩放和移动图像 |
disolay模块
下面主要介绍一下display模块的一些常用方法:
1.set_model 生成windows窗口
pygame.display.set_model(resolution, flags, depth)
resolution:可以控制生成的window的大小。传的值:(100,200)这样的
flags:控制你想要怎样的显示屏,可以赋一下几个全局常量。(这些常量在pygame.locals模块中)
FULLSCREEN | 控制全屏,0或者1来控制 |
HWSURFACE | 控制是否进行硬件加速 |
RESIZABLE | 控制窗口是否可以调节大小 |
NOFRAME | 创建一个没有边框的窗口 |
depth:不推荐设置
2.get_caption()获得窗口的标题
pygame.display.get_caption()
3.set_caption(title)设置窗口的标题
pygame.display.set_caption(title)
事件
事件 | 产生途径 | 参数 |
---|---|---|
QUIT | 用户按下关闭按钮 | none |
ATIVEEVENT | Pygame被激活或者隐藏 | gain, state |
KEYDOWN | 键盘被按下 | unicode, key, mod |
KEYUP | 键盘被放开 | key, mod |
MOUSEMOTION | 鼠标移动 | pos, rel, buttons |
MOUSEBUTTONDOWN | 鼠标按下 | pos, button |
MOUSEBUTTONUP | 鼠标放开 | pos, button |
USEREVENT | 触发了一个用户事件 | code |
网友评论