亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python版本五子棋的實(shí)現(xiàn)代碼

 更新時(shí)間:2018年12月11日 10:09:05   作者:HustWolf  
五子棋是常見(jiàn)的一款小游戲,五子棋問(wèn)題是人工智能中的一個(gè)經(jīng)典問(wèn)題。這篇文章主要介紹了python版本五子棋的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

正文之前

前陣子做了個(gè)《人工智能》 的課程作業(yè),然后寫了個(gè)人工智障。。。大概就是個(gè)可以跟你下五子棋的傻兒子。。。下面是代碼和效果

正文

1、 摘要

機(jī)器博弈是人工智能領(lǐng)域的重要分支,它的研究對(duì)象多以復(fù)雜的棋牌類智力游戲?yàn)橹?,已?jīng)得到解決的棋類游戲,幾乎全部都應(yīng)歸功于機(jī)器博弈近半個(gè)世紀(jì)的發(fā)展。計(jì)算機(jī)解決問(wèn)題的優(yōu)勢(shì)在于能把不易解析的問(wèn)題,借助于現(xiàn)代計(jì)算機(jī)的運(yùn)算速度優(yōu)勢(shì)枚舉出所有的合理情形而得解;然而,博弈問(wèn)題的復(fù)雜程度決定了它不能過(guò)度依賴機(jī)器的計(jì)算能力。許多待解決的或已經(jīng)解決的棋類,其狀態(tài)空間復(fù)雜度或博弈樹(shù)復(fù)雜度量級(jí)都太過(guò)龐大,所以我們需要添加約束,并且采用合理的算法進(jìn)行優(yōu)化。

五子棋問(wèn)題是人工智能中的一個(gè)經(jīng)典問(wèn)題。當(dāng)今世界,AlphaGo已經(jīng)執(zhí)圍棋之牛耳,五子棋領(lǐng)域卻鮮少有人問(wèn)津。本文根據(jù)課堂所學(xué)知識(shí)結(jié)合文獻(xiàn)、博客,基于兩種開(kāi)發(fā)語(yǔ)言實(shí)現(xiàn)了一個(gè)智能對(duì)戰(zhàn)的AI五子棋游戲平臺(tái)。

本文所做工作如下:

(1) 五子棋界面實(shí)現(xiàn);

(2) 智能判定棋盤走勢(shì);

(3) 改進(jìn)了棋盤掃描方式;

(4) 改良了系統(tǒng)評(píng)分表評(píng)估方式;

(5) 實(shí)現(xiàn)了基于點(diǎn)評(píng)分表估值找出最佳落子方式。

2、 問(wèn)題描述、知識(shí)表達(dá)

2.1 問(wèn)題描述

五子棋AI問(wèn)題的最大問(wèn)題是如何實(shí)現(xiàn)智能對(duì)弈,即當(dāng)人落子之后,算法如何解讀當(dāng)前的棋盤并且對(duì)其進(jìn)行分析解讀,得到電腦方的最佳落子點(diǎn)。其次還有一個(gè)問(wèn)題是如何判斷勝利,這可以作為前面棋盤局勢(shì)判定的一個(gè)子問(wèn)題,也可以看做是一個(gè)單獨(dú)的問(wèn)題,不過(guò)這個(gè)問(wèn)題總體來(lái)說(shuō)較為簡(jiǎn)單,所以不做詳細(xì)說(shuō)明。

2.2 知識(shí)表達(dá)

五子棋的整體知識(shí)構(gòu)建包含以下部分:

(1) 棋盤局面表示法

(2) 棋局勝利判定

(3) 棋型知識(shí)庫(kù)

(4) 智能博弈流程

對(duì)于問(wèn)題(1),采用數(shù)組表示法。棋盤中的各交叉點(diǎn)有三種狀態(tài),不妨令 0表示空(未放置棋子) ,-1 表示有黑子 ,1 表示有白子,數(shù)組表示法的基本思想是:以交叉點(diǎn)對(duì)應(yīng)的數(shù)組索引值來(lái)表達(dá)物理位置 ,以交叉點(diǎn)對(duì)應(yīng)的元素值表達(dá)狀態(tài)(空、 黑子、 白子)。令 V = {0 ,1 ,-1} ,棋盤 的第 i 個(gè)交叉點(diǎn)的狀態(tài) Si ∈V ,任何棋局都可以表示成一個(gè) n ×n 的二元組。

對(duì)于問(wèn)題(2), 采用數(shù)組表示法時(shí),想知道任意兩個(gè)元素 Si 和Sj 是否共線,要通過(guò) i 和 j 之間的數(shù)值規(guī)律來(lái)判斷。從這方面看,數(shù)組表示法是一種原始、低效的表示方法,但是對(duì)于評(píng)分表算法來(lái)說(shuō)其性能損失是可以接受的。要判斷是否有一方已經(jīng)勝利,只需要對(duì)整個(gè)棋盤判定當(dāng)前落子點(diǎn)的縱、橫、正斜、反斜四個(gè)方向的最長(zhǎng)延伸出四個(gè)位置看是否能連成一條同色直線即可。具體的操作可以視為:從落子點(diǎn)出發(fā),向兩個(gè)方向延伸,如果遇到同色,那么計(jì)數(shù)器加一,遇到非同色(空白或者異色)則停止在該方向的延伸,一個(gè)計(jì)數(shù)器記下該方向上的兩頭的連續(xù)同色棋子數(shù)。等到四個(gè)方向都探索完畢,如果四個(gè)計(jì)數(shù)器中有一個(gè)計(jì)數(shù)器達(dá)到了5,那么即可判斷出已經(jīng)有五子連珠了,此局結(jié)束。

問(wèn)題(3)棋型知識(shí)庫(kù)主要包括各種既定的棋盤形式,有如下幾種:

² 活四 :有兩個(gè)連五點(diǎn)(即有兩個(gè)點(diǎn)可以形成五),圖中白點(diǎn)即為連五點(diǎn)。當(dāng)活四出現(xiàn)的時(shí)候,整個(gè)局勢(shì)已經(jīng)無(wú)法阻止連五了,活四的歸屬方一定能取得勝利;

² 沖四 :有一個(gè)連五點(diǎn),如下面三圖,均為沖四棋型。圖中白點(diǎn)為連五點(diǎn)。 相對(duì)比活四來(lái)說(shuō),沖四的威脅性就小了很多,因?yàn)檫@個(gè)時(shí)候,只要跟著防守在那個(gè)唯一的連五點(diǎn)上,沖四就沒(méi)法形成連五。

² 活三 :可以形成活四的三,如下圖,代表兩種最基本的活三棋型。圖中白點(diǎn)為活四點(diǎn)?;钊逍褪沁M(jìn)攻中最常見(jiàn)的一種,因?yàn)榛钊?,如果?duì)方不以理會(huì),將可以下一手將活三變成活四,而活四是無(wú)法防守的。所以,面對(duì)活三的時(shí)候,需要非常謹(jǐn)慎對(duì)待。在沒(méi)有更好的進(jìn)攻手段的情況下,必須對(duì)其進(jìn)行防守,以防止其形成可怕的活四棋型。

² 眠三: 只能夠形成沖四的三,如下各圖,分別代表最基礎(chǔ)的六種眠三形狀。圖中白點(diǎn)代表沖四點(diǎn)。眠三的棋型與活三的棋型相比,危險(xiǎn)系數(shù)下降不少,因?yàn)槊呷逍图词共蝗シ朗?,下一手它也只能形成沖四,而對(duì)于單純的沖四棋型,是可以很簡(jiǎn)單的防守住的。

² 活二 :能夠形成活三的二,如下圖,是三種基本的活二棋型。圖中白點(diǎn)為活三點(diǎn)。

² 眠二 :能夠形成眠三的二。圖中四個(gè)為最基本的眠二棋型,細(xì)心且喜歡思考的同學(xué)會(huì)根據(jù)眠三介紹中的圖2-13找到與下列四個(gè)基本眠二棋型都不一樣的眠二。圖中白點(diǎn)為眠三點(diǎn)。

對(duì)于上述的棋型,我們主要考慮的是活四、沖四、活三、眠三這幾種主要的進(jìn)攻棋型的防守與構(gòu)成,整體棋型遵從以下原則:優(yōu)先考慮數(shù)目,同等數(shù)目的情況下考慮是活是眠。評(píng)分表算法的設(shè)計(jì)整體偏向于防守。

對(duì)于問(wèn)題(4),當(dāng)下棋型的評(píng)估分析,算法嚴(yán)格遵從以下流程:

當(dāng)人類方落下一子,算法啟動(dòng),掃描全局,得到人類棋子的集合和電腦棋子的集合。全局掃描之后,對(duì)當(dāng)前局勢(shì)進(jìn)行排序、計(jì)算。對(duì)每個(gè)集合的每個(gè)空白點(diǎn)位置打分,打分依據(jù)是根據(jù)這個(gè)點(diǎn)周圍四個(gè)方向上的同色連續(xù)棋子的數(shù)量。按照這些最后得到的評(píng)分,得出最大值。得到人類方和電腦方的兩個(gè)最大值之后,進(jìn)行比較,如果人類方局勢(shì)較好(分?jǐn)?shù)較高),則算法將下一次落子位置設(shè)置為人類方得分最高的點(diǎn),盡力降低人類方的下一步得分;如果電腦方的分?jǐn)?shù)較高,那么則直接在使得分?jǐn)?shù)最高的點(diǎn)落子即可。

3、 開(kāi)發(fā)工具

本次課程設(shè)計(jì),一共設(shè)計(jì)了兩個(gè)版本,一個(gè)Java版本,為19X19的棋盤,配備簡(jiǎn)單的消息提示,基于AWT實(shí)現(xiàn)GUI,開(kāi)發(fā)工具IntelliJ IDEA 2018.1

另一個(gè)版本是使用Python設(shè)計(jì),核心算法相同,但是受限于圖片源文件,為15X15棋盤,基于pygame實(shí)現(xiàn)GUI,開(kāi)發(fā)工具是:JetBrains PyCharm 2018.2.4 x64

 

4、 代碼實(shí)現(xiàn)

from time import sleep
import pygame
from pygame.locals import *
from random import randint

level = 15
grade = 10
MAX = 1008611
def Scan(chesspad, color):
 shape = [[[0 for high in range(5)] for col in range(15)] for row in range(15)]
 # 掃描每一個(gè)點(diǎn),然后在空白的點(diǎn)每一個(gè)方向上做出價(jià)值評(píng)估!!
 for i in range(15):
 for j in range(15):

  # 如果此處為空 那么就可以開(kāi)始掃描周邊
  if chesspad[i][j] == 0:
  m = i
  n = j
  # 如果上方跟當(dāng)前傳入的顏色參數(shù)一致,那么加分到0位!
  while n - 1 >= 0 and chesspad[m][n - 1] == color:
   n -= 1
   shape[i][j][0] += grade
  if n-1>=0 and chesspad[m][n - 1] == 0:
   shape[i][j][0] += 1
  if n-1 >= 0 and chesspad[m][n - 1] == -color:
   shape[i][j][0] -= 2
  m = i
  n = j
  # 如果下方跟當(dāng)前傳入的顏色參數(shù)一致,那么加分到0位!
  while (n + 1 < level and chesspad[m][n + 1] == color):
   n += 1
   shape[i][j][0] += grade
  if n + 1 < level and chesspad[m][n + 1] == 0:
   shape[i][j][0] += 1
  if n + 1 < level and chesspad[m][n + 1] == -color:
   shape[i][j][0] -= 2
  m = i
  n = j
  # 如果左邊跟當(dāng)前傳入的顏色參數(shù)一致,那么加分到1位!
  while (m - 1 >= 0 and chesspad[m - 1][n] == color):
   m -= 1
   shape[i][j][1] += grade
  if m - 1 >= 0 and chesspad[m - 1][n] == 0:
   shape[i][j][1] += 1
  if m - 1 >= 0 and chesspad[m - 1][n] == -color:
   shape[i][j][1] -= 2
  m = i
  n = j
  # 如果右邊跟當(dāng)前傳入的顏色參數(shù)一致,那么加分到1位!
  while (m + 1 < level and chesspad[m + 1][n] == color):
   m += 1
   shape[i][j][1] += grade
  if m + 1 < level and chesspad[m + 1][n] == 0:
   shape[i][j][1] += 1
  if m + 1 < level and chesspad[m + 1][n] == -color:
   shape[i][j][1] -= 2
  m = i
  n = j
  # 如果左下方跟當(dāng)前傳入的顏色參數(shù)一致,那么加分到2位!
  while (m - 1 >= 0 and n + 1 < level and chesspad[m - 1][n + 1] == color):
   m -= 1
   n += 1
   shape[i][j][2] += grade
  if m - 1 >= 0 and n + 1 < level and chesspad[m - 1][n + 1] == 0:
   shape[i][j][2] += 1
  if m - 1 >= 0 and n + 1 < level and chesspad[m - 1][n + 1] == -color:
   shape[i][j][2] -= 2
  m = i
  n = j
  # 如果右上方跟當(dāng)前傳入的顏色參數(shù)一致,那么加分到2位!
  while (m + 1 < level and n - 1 >= 0 and chesspad[m + 1][n - 1] == color):
   m += 1
   n -= 1
   shape[i][j][2] += grade
  if m + 1 < level and n - 1 >= 0 and chesspad[m + 1][n - 1] == 0:
   shape[i][j][2] += 1
  if m + 1 < level and n - 1 >= 0 and chesspad[m + 1][n - 1] == -color:
   shape[i][j][2] -= 2
  m = i
  n = j
  # 如果左上方跟當(dāng)前傳入的顏色參數(shù)一致,那么加分到3位!
  while (m - 1 >= 0 and n - 1 >= 0 and chesspad[m - 1][n - 1] == color):
   m -= 1
   n -= 1 
   shape[i][j][3] += grade
  if m - 1 >= 0 and n - 1 >= 0 and chesspad[m - 1][n - 1] == 0:
   shape[i][j][3] += 1
  if m - 1 >= 0 and n - 1 >= 0 and chesspad[m - 1][n - 1] == -color:
   shape[i][j][3] -= 2
  m = i
  n = j
  # 如果右下方跟當(dāng)前傳入的顏色參數(shù)一致,那么加分到3位!
  while m + 1 < level and n + 1 < level and chesspad[m + 1][n + 1] == color:
   m += 1
   n += 1
   shape[i][j][3] += grade
  if m + 1 < level and n + 1 < level and chesspad[m + 1][n + 1] == 0:
   shape[i][j][3] += 1
  if m + 1 < level and n + 1 < level and chesspad[m + 1][n + 1] == -color:
   shape[i][j][3] -= 2
 return shape


def Sort(shape):
 for i in shape:
 for j in i:
  for x in range(5):
  for w in range(3, x - 1, -1):
   if j[w - 1] < j[w]:
   temp = j[w]
   j[w - 1] = j[w]
   j[w] = temp
 print("This Time Sort Done !")
 return shape


def Evaluate(shape):
 for i in range(level):
 for j in range(level):

  if shape[i][j][0] == 4:
  return i, j, MAX
  shape[i][j][4] = shape[i][j][0]*1000 + shape[i][j][1]*100 + shape[i][j][2]*10 + shape[i][j][3]
 max_x = 0
 max_y = 0
 max = 0
 for i in range(15):
 for j in range(15):
  if max < shape[i][j][4]:
  max = shape[i][j][4]
  max_x = i
  max_y = j
 print("the max is "+ str(max) + " at ( "+ str(max_x)+" , "+str(max_y)+" )")
 return max_x, max_y, max


class chess(object):
 def __init__(self):
 self.a = [[0 for high in range(15)] for col in range(15)] 

 def fall(self, x, y, color):
 if (x < 0 or x > level - 1 or y < 0 or y > level - 1):
  return
 self.a[x][y] = color
 if Judge(x, y, color, self.a, 4):
  if color < 0:
  print("The Winner is White!!")
  else:
  print("The Winner is Black!!")

 def isEmpty(self, m, n):
 if self.a[m][n] != 0:
  return False
 else:
  return True


def Judge(x, y, color, CHESSLOCATION, length):
 count1, count2, count3, count4 = 0, 0, 0, 0
 # 橫向判斷
 i = x - 1
 while (i >= 0):
 if color == CHESSLOCATION[i][y]:
  count1 += 1
  i -= 1
 else:
  break
 i = x + 1
 while i < level:
 if CHESSLOCATION[i][y] == color:
  count1 += 1
  i += 1
 else:
  break

 # 縱向判斷
 j = y - 1
 while (j >= 0):
 if CHESSLOCATION[x][j] == color:
  count2 += 1
  j -= 1
 else:
  break
 j = y + 1
 while j < level:
 if CHESSLOCATION[x][j] == color:
  count2 += 1
  j += 1
 else:
  break

 # 正對(duì)角線判斷
 i, j = x - 1, y - 1
 while (i >= 0 and j >= 0):
 if CHESSLOCATION[i][j] == color:
  count3 += 1
  i -= 1
  j -= 1
 else:
  break
 i, j = x + 1, y + 1
 while (i < level and j < level):
 if CHESSLOCATION[i][j] == color:
  count3 += 1
  i += 1
  j += 1
 else:
  break
 # 反對(duì)角線判斷
 i, j = x + 1, y - 1
 while (i < level and j >= 0):
 if CHESSLOCATION[i][j] == color:
  count4 += 1
  i += 1
  j -= 1
 else:
  break
 i, j = x - 1, y + 1
 while (i > 0 and j < level):
 if CHESSLOCATION[i][j] == color:
  count4 += 1
  i -= 1
  j += 1
 else:
  break

 if count1 >= length or count2 >= length or count3 >= length or count4 >= length:
 return True
 else:
 return False


def Autoplay(ch, m, n):
 a1 = [1,-1,1,-1,1,-1,0,0]
 b1 = [1,-1,-1,1,0,0,1,-1]
 rand = randint(0,7)
 while m+a1[rand]>=0 and m+a1[rand]<level and n+b1[rand]>=0 and n+b1[rand]<level and ch[m+a1[rand]][n+b1[rand]]!=0 :
 rand = randint(0,7)
 return m + a1[rand], n+b1[rand]

def BetaGo(ch, m, n, color, times):
 if times < 2:
 return Autoplay(ch, m, n)
 else:
 shape_P = Scan(ch, -color)
 shape_C = Scan(ch,color)
 shape_P = Sort(shape_P)
 shape_C = Sort(shape_C)
 max_x_P, max_y_P, max_P = Evaluate(shape_P)
 max_x_C, max_y_C, max_C = Evaluate(shape_C)
 if max_P>max_C and max_C<MAX:
  return max_x_P,max_y_P
 else:
  return max_x_C,max_y_C


def satrtGUI(ch):
 pygame.init()
 bg = 'bg.png'
 white_image = 'white.png'
 black_image = 'black.png'

 screen = pygame.display.set_mode((750, 750), 0, 32)
 background = pygame.image.load(bg).convert()
 white = pygame.image.load(white_image).convert_alpha()
 black = pygame.image.load(black_image).convert_alpha()
 white = pygame.transform.smoothscale(white, (int(white.get_width() * 1.5), int(white.get_height() * 1.5)))
 black = pygame.transform.smoothscale(black, (int(black.get_width() * 1.5), int(black.get_height() * 1.5)))

 screen.blit(background, (0, 0))
 font = pygame.font.SysFont("黑體", 40)

 pygame.event.set_blocked([1, 4, KEYUP, JOYAXISMOTION, JOYBALLMOTION, JOYBUTTONDOWN, JOYBUTTONUP, JOYHATMOTION])
 pygame.event.set_allowed([MOUSEBUTTONDOWN, MOUSEBUTTONUP, 12, KEYDOWN])

 dot_list = [(25 + i * 50 - white.get_width() / 2, 25 + j * 50 - white.get_height() / 2) for i in range(level) for
  j in range(level)]
 color = -1
 times = 0
 flag = False
 while not flag:
 for event in pygame.event.get():
  if event.type == QUIT:
  exit()
  elif event.type == MOUSEBUTTONDOWN:
  x, y = pygame.mouse.get_pos()
  if 25 <= x <= 725 and 25 <= y <= 725 and ((x - 25) % 50 <= level or (x - 25) % 50 >= 0) and (
   (y - 25) % 50 <= level or (y - 25) % 50 >= 0):
   color = -1 * color
   m = int(round((x - 25) / 50))
   n = int(round((y - 25) / 50))
   if not ch.isEmpty(m, n):
   print("Black OverWrite~~")
   continue
   ch.fall(m, n, color)
   screen.blit(black, dot_list[level * m + n])
   if Judge(m, n, color, ch.a, 4):
   screen.blit(font.render('GAME OVER,Black is win!', True, (110, 210, 30)), (80, 650))
   break

   color = -1 * color
   sleep(0.1)
   x, y = BetaGo(ch.a, m, n, color, times)
   times += 1
   print("Predict:" + str(x) + " and " + str(y))
   ch.fall(x, y, color)
   screen.blit(white, dot_list[level * x + y])
   if Judge(x, y, color, ch.a, 4):
   screen.blit(font.render('GAME OVER,White is win!', True, (217, 20, 30)), (80, 650))
   break
 pygame.display.update()
 if flag:
  sleep(5)

now = chess()
satrtGUI(now)

bg.png

black.png

white.png

5、 小結(jié)及展望

5.1 小結(jié)

因?yàn)榻跁r(shí)間較為緊迫,所以《人工智能》這門課我選擇了較為簡(jiǎn)單的五子棋問(wèn)題進(jìn)行課程設(shè)計(jì)。在本次課程設(shè)計(jì)中,我的編碼能力、調(diào)試能力、算法解讀實(shí)現(xiàn)能力、函數(shù)優(yōu)化能力等各方面有了長(zhǎng)足的進(jìn)步。在本次的設(shè)計(jì)過(guò)程中也出現(xiàn)了幾個(gè)問(wèn)題,下面對(duì)這些問(wèn)題進(jìn)行一個(gè)簡(jiǎn)單的描述:

(1) 對(duì)棋盤局勢(shì)的判斷力不夠,因?yàn)橹皇呛?jiǎn)單的對(duì)當(dāng)前的棋盤局勢(shì)進(jìn)行判斷,基本等同于一個(gè)粗通規(guī)則而且天賦不高的五子棋選手。如果對(duì)手很細(xì)心,而且熟練經(jīng)營(yíng)各種布局策略,那么基本這個(gè)算法就會(huì)被鉆研出習(xí)慣,從而被輕易針對(duì),而且針對(duì)方案百試不爽;

(2) 判斷棋局形式的時(shí)候?qū)吔绲脑u(píng)分算法跟中心區(qū)域的評(píng)分算法一致,無(wú)法有效提前識(shí)別邊界,降低邊界空白點(diǎn)的權(quán)重;

(3) 用戶圖形界面需要改進(jìn),另外可以增設(shè)PK模式以及選色、選擇棋盤大小功能等;

5.2 展望

后續(xù)可以嘗試用博弈樹(shù)算法嘗試與當(dāng)前算法進(jìn)行比較。評(píng)分表算法犧牲了更高的精度,以求迅速的得出最佳落子點(diǎn);而博弈樹(shù)可以通過(guò)提前落子進(jìn)行全局預(yù)判進(jìn)行更全方位的對(duì)人類方的圍追堵截。

另外,可以通過(guò)在課堂上學(xué)到的知識(shí),比如BFS、DFS、A*算法、決策樹(shù)算法 等應(yīng)用于五子棋的智能決策中。

《人工智能》這門課讓我對(duì)于圖、知識(shí)表示、智能決策等各個(gè)方面有了更好地認(rèn)識(shí)與體驗(yàn),課堂設(shè)計(jì)內(nèi)容充實(shí)有趣,讓我受益匪淺,希望今后可以更加深入這個(gè)方面,并且將課堂上學(xué)到的知識(shí)應(yīng)用于實(shí)踐之中。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python一行代碼實(shí)現(xiàn)打開(kāi)各種類型的文件

    Python一行代碼實(shí)現(xiàn)打開(kāi)各種類型的文件

    在處理大量文件時(shí),手動(dòng)一個(gè)個(gè)打開(kāi)是不是很麻煩,這時(shí)候,Python的os.startfile()就是你的救星啦,本文我們就來(lái)看看如何一行代碼打開(kāi)各種類型的文件吧
    2024-12-12
  • Python實(shí)現(xiàn)多路視頻多窗口播放功能

    Python實(shí)現(xiàn)多路視頻多窗口播放功能

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)多路視頻多窗口播放功能的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • Python os.rename() 重命名目錄和文件的示例

    Python os.rename() 重命名目錄和文件的示例

    今天小編就為大家分享一篇Python os.rename() 重命名目錄和文件的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python在圖片中添加文字的兩種方法

    Python在圖片中添加文字的兩種方法

    這篇文章主要給大家介紹了在Python在圖片中添加文字的兩種方法,分別是使用OpenCV和PIL這兩個(gè)方法實(shí)現(xiàn),在實(shí)際應(yīng)用中要在這兩種方法中擇優(yōu)使用。兩種方法都給出了詳細(xì)示例代碼,需要的朋友可以參考下。
    2017-04-04
  • Python處理中文標(biāo)點(diǎn)符號(hào)大集合

    Python處理中文標(biāo)點(diǎn)符號(hào)大集合

    中文文本中可能出現(xiàn)的標(biāo)點(diǎn)符號(hào)來(lái)源比較復(fù)雜,通過(guò)匹配等手段對(duì)他們處理的時(shí)候需要格外小心,防止遺漏,下面小編給大家?guī)?lái)了Python處理中文標(biāo)點(diǎn)符號(hào)大集合,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-05-05
  • 詳解django中url路由配置及渲染方式

    詳解django中url路由配置及渲染方式

    這篇文章主要介紹了詳解django中url路由配置及渲染方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python的垃圾回收機(jī)制詳解

    Python的垃圾回收機(jī)制詳解

    這篇文章主要介紹了Python的垃圾回收機(jī)制詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python中from module import * 的一個(gè)坑

    python中from module import * 的一個(gè)坑

    from module import *把module中的成員全部導(dǎo)到了當(dāng)前的global namespace,訪問(wèn)起來(lái)就比較方便了。當(dāng)然,python style一般不建議這么做,因?yàn)榭赡芤餹ame conflict。
    2014-07-07
  • 使用keras框架cnn+ctc_loss識(shí)別不定長(zhǎng)字符圖片操作

    使用keras框架cnn+ctc_loss識(shí)別不定長(zhǎng)字符圖片操作

    這篇文章主要介紹了使用keras框架cnn+ctc_loss識(shí)別不定長(zhǎng)字符圖片操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 使用python實(shí)現(xiàn)自動(dòng)化控制電腦版微信

    使用python實(shí)現(xiàn)自動(dòng)化控制電腦版微信

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python去調(diào)用Windows API實(shí)現(xiàn)模擬人工操作的方式去實(shí)現(xiàn)控制微信電腦版,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10

最新評(píng)論