最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲

 更新時(shí)間:2020年03月05日 07:44:14   作者:蒟蒻熊  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

用python實(shí)現(xiàn)的一個(gè)井字棋游戲,供大家參考,具體內(nèi)容如下

#Tic-Tac-Toe 井字棋游戲
#全局常量
X="X"
O="O"
EMPTY=" "
#詢問(wèn)是否繼續(xù)
def ask_yes_no(question):
 response=None;
 while response not in("y","n"):
  response=input(question).lower()
 return response
#輸入位置數(shù)字
def ask_number(question ,low,high):
 response=None
 while response not in range(low,high):
  response=int(input(question))
 return response
#詢問(wèn)誰(shuí)先走,先走方為X,后走方為O
#函數(shù)返回計(jì)算機(jī)方,玩家的角色代號(hào)
def pieces():
 go_first=ask_yes_no("玩家你是否先走(y/n):")
 if go_first=="y":
  print("\n玩家你先走.")
  human=X
  computer=O
 else:
  print("\n計(jì)算機(jī)先走.")
  computer=X
  human=O
 return computer,human
#產(chǎn)生新的棋盤(pán)
def new_board():
 board=[]
 for square in range(9):
  board.append(EMPTY)
 return board
#顯示棋盤(pán)
def display_board(board):
 board2=board[:]
 for i in range(len(board)):
  if board[i]==EMPTY:
   board2[i]=i
 print("\t",board2[0],"|",board2[1],"|",board2[2])
 print("\t","----------")
 print("\t",board2[3],"|",board2[4],"|",board2[5])
 print("\t", "----------")
 print("\t",board2[6],"|",board2[7],"|",board2[8],"\n")
 #產(chǎn)生可以合法走棋位置序列(也就是還未下過(guò)子位置)
def legal_moves(board):
 moves=[]
 for square in range(9):
  if board[square]==EMPTY:
   moves.append(square)
 return moves
 #判斷輸贏
def winner(board):
  # 所有贏得可能情況,例如(0,1,2)就是第一行,(0,4,8,),(2,4,6)就是對(duì)角線
 WAYS_TO_WIN=((0,1,2,),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
 for row in WAYS_TO_WIN:
  if board[row[0]]==board[row[1]]==board[row[2]]!=EMPTY:
   winner=board[row[0]]
   return winner
   #棋盤(pán)沒(méi)有空位置
 if EMPTY not in board:
  return "TIE"
 return False
  #人走棋
def human_move (board,human):
 legal =legal_moves(board)
 move =None
 while move not in legal:
  move=ask_number("你走那個(gè)位置?(0-8):",0,9)
  if move not in legal:
   print("\n此位置已經(jīng)落過(guò)子了")
     #print("Fine...")
 return move
  #計(jì)算機(jī)走棋
def computer_move(board,computer ,human):
 board=board[:]
   #按優(yōu)劣順序排序的下棋走子
 BEST_MOVES=(4,0,2,6,8,1,3,5,7) #最佳下棋位置順序表
   #如果計(jì)算機(jī)能贏,就走那個(gè)位置
 for move in legal_moves(board):
   board[move]=computer
   if winner(board)==computer:
    print("計(jì)算機(jī)下棋位置...",move)
    return move
    #取消走棋方案
   board[move]=EMPTY
   #如果玩家能贏就堵住那個(gè)位置
 for move in legal_moves(board):
   board[move]=human
   if winner(board)==human:
    print("計(jì)算機(jī)下棋位置...",move)
    return move
    #取消走棋方案
   board[move]=EMPTY
   #如果不是上面情況,也就是這一輪贏不了
   #則是從最佳下棋位置表中挑出第一個(gè)合法位置
 for move in BEST_MOVES:
  if move in legal_moves(board):
   print("計(jì)算機(jī)下棋位置....",move)
   return move
  #轉(zhuǎn)換角色
def next_turn(turn):
 if turn ==X:
   return O
 else:
  return X
  #主函數(shù)
def main():
  computer,human=pieces()
  turn =X
  board=new_board()
  display_board(board)
  while not winner(board):
   if turn ==human:
    move=human_move(board,human)
    board[move]=human
   else:
    move=computer_move(board,computer,human)
    board[move]=computer
   display_board(board)
   turn=next_turn(turn) #轉(zhuǎn)換角色
     #游戲結(jié)束輸出輸贏或和棋信息
  the_winner=winner(board)
  if the_winner==computer:
   print("計(jì)算機(jī)贏!\n")
  elif the_winner==human:
   print("玩家贏!\n")
  elif the_winner=="TIE":
   print("平局,游戲結(jié)束\n")

main()
input("按任意鍵退出游戲")

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

相關(guān)文章

  • 詳細(xì)分析Python collections工具庫(kù)

    詳細(xì)分析Python collections工具庫(kù)

    這篇文章主要介紹了詳解Python collections工具庫(kù)的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 一文了解Python?流程控制

    一文了解Python?流程控制

    這篇文章主要介紹了一文了解Python?流程控制,Python?中有while和for兩種循環(huán)機(jī)制,其中while循環(huán)是條件循環(huán),文章通過(guò)展開(kāi)循環(huán)內(nèi)容展開(kāi)控制流程詳情,需要的小伙伴可以參考一下
    2022-05-05
  • Python 使用自定義時(shí)間滾動(dòng)日志處理器

    Python 使用自定義時(shí)間滾動(dòng)日志處理器

    本教程介紹了如何使用Python的logging模塊和自定義的日志處理器來(lái)按時(shí)間滾動(dòng)日志文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Python調(diào)用命令行進(jìn)度條的方法

    Python調(diào)用命令行進(jìn)度條的方法

    這篇文章主要介紹了Python調(diào)用命令行進(jìn)度條的方法,涉及Python進(jìn)度條的調(diào)用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • Python matplotlib繪制xkcd動(dòng)漫風(fēng)格的圖表

    Python matplotlib繪制xkcd動(dòng)漫風(fēng)格的圖表

    xkcd是蘭道爾·門(mén)羅(Randall Munroe)的網(wǎng)名,又是他所創(chuàng)作的漫畫(huà)的名稱(chēng)。本文將用matplotlib庫(kù)繪制xkcd動(dòng)漫風(fēng)格的圖表,感興趣的可以了解一下
    2022-03-03
  • 一文帶大家了解python中的換行以及轉(zhuǎn)義

    一文帶大家了解python中的換行以及轉(zhuǎn)義

    這篇文章主要為大家詳細(xì)介紹了python中的換行以及轉(zhuǎn)義的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們深入了解python有一定的幫助,需要的小伙伴可以了解下
    2023-11-11
  • 一文帶你吃透FastAPI中的路徑參數(shù)

    一文帶你吃透FastAPI中的路徑參數(shù)

    FastAPI中最核心的之一就是路徑參數(shù),所以這篇文章小編主要來(lái)和大家介紹一下FastAPI路徑參數(shù)的作用以及基本使用,有需要的小伙伴可以參考下
    2024-03-03
  • 教你輕松解決selenium打開(kāi)瀏覽器自動(dòng)退出

    教你輕松解決selenium打開(kāi)瀏覽器自動(dòng)退出

    這篇文章主要給大家介紹了關(guān)于如何輕松解決selenium打開(kāi)瀏覽器自動(dòng)退出的相關(guān)資料,Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具,Selenium測(cè)試直接運(yùn)行在瀏覽器中,今天在打開(kāi)網(wǎng)頁(yè)時(shí),瀏覽器總是一閃而退,需要的朋友可以參考下
    2023-08-08
  • python字典翻轉(zhuǎn)的實(shí)現(xiàn)

    python字典翻轉(zhuǎn)的實(shí)現(xiàn)

    本文主要介紹了python字典翻轉(zhuǎn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • PYQT5實(shí)現(xiàn)控制臺(tái)顯示功能的方法

    PYQT5實(shí)現(xiàn)控制臺(tái)顯示功能的方法

    今天小編大家分享一篇PYQT5實(shí)現(xiàn)控制臺(tái)顯示功能的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06

最新評(píng)論

青岛市| 德清县| 工布江达县| 双城市| 延吉市| 斗六市| 蒙山县| 宝坻区| 光山县| 祁连县| 木兰县| 德阳市| 丰镇市| 闽清县| 新宾| 杭州市| 保德县| 无为县| 钟山县| 师宗县| 吴旗县| 子长县| 务川| 宽甸| 曲阳县| 健康| 贡觉县| 延长县| 桃源县| 陇川县| 南丹县| 肥西县| 宁晋县| 从化市| 化德县| 乐昌市| 瓦房店市| 台北县| 南华县| 祁东县| 浪卡子县|