貪婪與非貪婪
- 什么是非貪婪:在正則中控制匹配不確定次數(shù)的符號(hào)后邊可以加?兵迅,來表示盡可能少的匹配
注意:盡可能少是在能夠匹配到的前提下盡可能少
*?
+?
?
{M,}?
{M,N}?
{,N}?
def main():
print(re.search('\d+', 'abchs3482==sdd'))
print(re.search('\d+?', 'abchs3482==sdd'))
print(re.search(r'"name":".*?"', '=======,"name":"mary","age":18,"愛好":"編程"'))
if __name__ == '__main__':
main()
2.在貪婪的時(shí)候,匹配是盡可能多的匹配
正則表達(dá)式的re模塊
- compile(正則表達(dá)式):將正則表達(dá)式轉(zhuǎn)換成正則對(duì)象
- 編譯后可以直接通過對(duì)象調(diào)用相關(guān)的對(duì)象方法
re_object = re.compile(r'\d{3}')
print(re_object)
re_object.fullmatch('432')
- fullmatch(正則表達(dá)式翔忽,字符串) --> 讓字符串和正則表達(dá)式完全匹配,匹配成功返回匹配對(duì)象晌区,匹配失敗返回None
- 應(yīng)用:檢測(cè)字符串內(nèi)容是否符合要求寞埠,例如:檢測(cè)賬號(hào)屁置、密碼、判斷手機(jī)號(hào)仁连、身份證號(hào)是否合法
result = re.fullmatch(r'(\d{3})=([a-z]+)', '432=sjfg')
print(result)
# 匹配對(duì)象
# 1).span - 匹配到的字符串在原字符串中的下標(biāo)范圍(結(jié)果是元祖)
print(result.span()) # 獲取整個(gè)正則表達(dá)式匹配到的內(nèi)容的范圍
start, end = result.span()
print(start, end)
print(result.span(1)) # 獲取正則表達(dá)式中第一個(gè)分組匹配到的內(nèi)容的范圍
# 2). start和end - 匹配到的字符串在原字符串中的開始下標(biāo)和結(jié)束下標(biāo)
print(result.start(), result.end())
# 3).group - 獲取匹配到的字符串(結(jié)果是字符串)
print(result.group()) # 獲取整個(gè)正則匹配到的字符串
print(result.group(1)) # 獲取第一個(gè)分組匹配到的字符串
print(result.group(2)) # 獲取第二個(gè)分組匹配到的字符串
print(result.groups()) # 同時(shí)獲取所有元祖匹配到的字符串(結(jié)果是元祖)
# 4). string - 獲取原字符串
print(result.string)
- match(正則表達(dá)式蓝角,字符串) -> 讓字符串的開頭和正則表達(dá)式進(jìn)行匹配,匹配成功結(jié)果是匹配對(duì)象饭冬,否則是None
print(re.match(r'\D\d', 's3783khks==323'))
- search(正則表達(dá)式帅容,字符串) -> 在字符串中去匹配出第一個(gè)符合正則表達(dá)式的子串,匹配成功結(jié)果是匹配對(duì)象伍伤,否則是None
print(re.search(r'[\u4e00-\u9fa5]{3}', 'hsj你的 方法給他并徘,dsd得我'))
- split(正則表達(dá)式,字符串) -> 將字符串按照滿足正則要求的字符串進(jìn)行切割(返回值是列表)
print(re.split(r'\d+', 'assdfs23fdgd3243fgfdvgdf=d-fef3fr'))
- sub(正則表達(dá)式扰魂,字符串1麦乞,字符串2) -> 將字符串2中能夠和正則表達(dá)式匹配的子串替換成字符串1蕴茴,產(chǎn)生一個(gè)新的字符串
print(re.sub(r'\d+', '*', 'sjkf23jfdkjfd3234'))
print(re.sub(r'[傻逼]|傻|艸|[fuck]', '*', '你是傻逼嗎?我艸!fuck'))
- findall(正則表達(dá)式姐直,字符串) -> 在字符串獲取滿足正則表達(dá)式的所有的字符串(結(jié)果是列表)
- 注意:如果正則表達(dá)式中有分組倦淀,直接獲取到的是分組中匹配到的內(nèi)容;
- 如果有多個(gè)分組列表中的元素是元祖
print(re.findall(r'\d+[a-z]', 'assdfs23fdgd3243fgfdvgdf=d-fef3fr'))
print(re.findall(r'(\d+)([a-z])', 'assdfs23fdgd3243fgfdvgdf=d-fef3fr'))
- finditer(正則表達(dá)式,字符串) -> 字符串中獲取滿足正則表達(dá)式的所有的子串(結(jié)果是迭代器)
result = re.finditer(r'\d+', 'assdfs23fdgd3243fgfdvgdf=d-fef3fr')
print(result)
print(next(result).group())
- re.I --> 忽略大小寫
- 匹配的約束條件是放在函數(shù)的flag參數(shù)中的
print(re.fullmatch(r'[a-z]{2}', 'HZ', re.I))
練習(xí):驗(yàn)證輸入的QQ號(hào)是否有效并給出對(duì)應(yīng)的提示信息
要求:
用戶名必須有字母声畏、數(shù)字
user = r'[a-z]'
QQ_str = 2061633184
print(re.fullmatch(r'[1-9]\d{4,11}', str(QQ_str)))
Pygame
游戲基本框架
import pygame
def base_game():
# 1.初始化pygame撞叽,做準(zhǔn)備工作
pygame.init()
# 2.創(chuàng)建游戲窗口
"""
set_mode(窗口大小) == set_mode((寬,高)) - 會(huì)返回一個(gè)surface類型的對(duì)象
窗口大小對(duì)應(yīng)的是一個(gè)元祖
"""
window = pygame.display.set_mode((400, 600))
# 設(shè)置窗口標(biāo)題
pygame.display.set_caption('游戲')
# 設(shè)置窗口背景顏色
"""
fill(顏色)
顏色是一個(gè)元祖插龄,元祖有三個(gè)int類型的元素愿棋,返回時(shí)0-255;分別代表R,G,B
計(jì)算機(jī)三原色:紅、綠均牢、藍(lán)
紅色(255,0,0)
綠色(0,255,0)
藍(lán)色(0,0,255)
白色(255,255,255)
黑色(0,0,0)
"""
window.fill((255, 255, 0))
pygame.display.flip()
# 3.讓游戲保持運(yùn)行狀態(tài)(游戲循環(huán))
while True:
# 不斷檢測(cè)游戲過程中是否有時(shí)間的產(chǎn)生
# 這個(gè)循環(huán)會(huì)阻塞線程糠雨。
for event in pygame.event.get():
# 只有當(dāng)時(shí)間產(chǎn)生后才會(huì)進(jìn)入for循環(huán)
if event.type == pygame.QUIT:
return
# 退出
# exit()
def main():
base_game()
if __name__ == '__main__':
main()
添加圖片
import pygame
def main():
# 1.初始化
pygame.init()
# 2.創(chuàng)建窗口
window = pygame.display.set_mode((400, 600))
pygame.display.set_caption('圖片')
window.fill((255, 255, 255, 255))
# 3.添加固定顯示內(nèi)容
"""
顯示圖片
1.加載圖片
image.load(圖片地址) --> 返回圖片對(duì)象(surface)
2.將圖片添加(渲染)到窗口上
blit(渲染對(duì)象,坐標(biāo))
坐標(biāo):一個(gè)元祖徘跪,兩個(gè)元素甘邀,分別是x坐標(biāo)和y坐標(biāo)
"""
image = pygame.image.load('images/食尸鬼.jpg')
window.blit(image, (0, 0))
# 4.操作圖片
"""
1.獲取圖片對(duì)象大小
surface類型有個(gè)對(duì)象方法:get_size()
"""
# 獲取窗口大小
print(window.get_size())
# 獲取圖片大小
print(image.get_size())
width, height = image.get_size()
"""
2.圖片縮放和旋轉(zhuǎn)(形變)
transform.scale(縮放對(duì)象,目標(biāo)大小) --> 返回縮放后的對(duì)象
transform.rotozoom(縮放對(duì)象垮庐,旋轉(zhuǎn)角度松邪,縮放比例)
"""
new_image = pygame.transform.scale(image, (250, 200))
new_image = pygame.transform.rotozoom(image, -30, 0.5)
window.blit(new_image, (60, 200))
new_image = pygame.transform.rotozoom(image, 30, 0.5)
window.blit(new_image, (75, 100))
new_image = pygame.transform.rotozoom(image, 60, 0.5)
window.blit(new_image, (75, 50))
pygame.display.flip()
# 3.游戲循環(huán)
while True:
# 時(shí)間檢測(cè)
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if __name__ == '__main__':
main()
顯示文字
import pygame
def main():
# 1.初始化
pygame.init()
# 2.創(chuàng)建窗口
window = pygame.display.set_mode((400, 600))
pygame.display.set_caption('圖片')
window.fill((255, 255, 255))
# ==========顯示文字===================
"""
1.創(chuàng)建字體對(duì)象
a.系統(tǒng)字體
font.SysFont(字體名,字體大小)
b.自定義字體
font.Font(字體文件路徑哨查,字體大小)
"""
# font = pygame.font.SysFont('Times', 40)
font = pygame.font.Font('images/font2.ttf', 40)
"""
2.根據(jù)字體創(chuàng)建文字對(duì)象
render(文字逗抑,True,文字顏色) --> 返回一個(gè)文字對(duì)象(Surface)
"""
text = font.render('hello世界', True, (255, 0, 0))
w, h = text.get_size()
"""
3.顯示文字
blit(渲染對(duì)象解恰,坐標(biāo))
"""
window.blit(text,(400-w, 600-h))
pygame.display.flip()
# 3.游戲循環(huán)
while True:
# 時(shí)間檢測(cè)
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if __name__ == '__main__':
main()
圖形
import pygame,math
def main():
# 1.初始化
pygame.init()
# 2.創(chuàng)建窗口
window = pygame.display.set_mode((400, 600))
pygame.display.set_caption('圖片')
window.fill((255, 255, 255, 255))
# =============畫圖形=================
# 1.畫線
"""
line(畫在哪個(gè)地方锋八,線的顏色,起點(diǎn)护盈,終點(diǎn)挟纱,線寬=1)
"""
pygame.draw.line(window, (0, 255, 0), (10, 10), (100, 100), 10)
# 2.畫五角星
point_list = [(200, 200), (250, 50), (300, 200), (150, 100), (350, 100)]
# pygame.draw.lines(window, (255, 0, 0), True, point_list)
# 3.畫圓
"""
circle(畫在哪個(gè)地方,線的顏色腐宋,圓心紊服,半徑,線寬=0)
"""
pygame.draw.circle(window,(0,0,0),(200,300),100,0)
pygame.draw.circle(window,(255,0,0),(200,300),90,0)
# 4.畫多邊形
pygame.draw.polygon(window, (255, 0, 0), point_list,0)
# 5.畫弧線
"""
arc(畫在哪個(gè)地方胸竞,線的顏色欺嗤,矩形,起始弧度卫枝,終止弧度煎饼,線寬)
"""
pygame.draw.arc(window, (0, 255, 255), (100, 470, 50, 200), math.pi/4, math.pi/4*3, 5)
# 6.畫矩形
pygame.draw.rect(window, (100, 20, 50), (200, 470, 100, 50), 2)
pygame.display.flip()
# 3.游戲循環(huán)
while True:
# 時(shí)間檢測(cè)
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if __name__ == '__main__':
main()