python 井字棋遊戲,Leetcode

2021-10-20 20:16:46 字數 3390 閱讀 9573

今天刷到一道python的題目,對比了他人的做法,覺得自己簡直弱爆了,把這道題記錄一下,也供大家學習,真的很棒!!!!

設計乙個演算法,判斷玩家是否贏了井字遊戲。輸入是乙個 n x n 的陣列棋盤,由字元" ",「x"和"o"組成,其中字元」 "代表乙個空位。

規則玩家輪流將字元放入空位(" 「)中。

第乙個玩家總是放字元"o」,且第二個玩家總是放字元"x"。

"x"和"o"只允許放置在空位中,不允許對已放有字元的位置進行填充。

當有n個相同(且非空)的字元填充任何行、列或對角線時,遊戲結束,對應該字元的玩家獲勝。

當所有位置非空時,也算為遊戲結束。

如果遊戲結束,玩家不允許再放置字元。

如果遊戲存在獲勝者,就返回該遊戲的獲勝者使用的字元(「x"或"o」);如果遊戲以平局結束,則返回 「draw」;如果仍會有行動(遊戲未結束),則返回 「pending」。

提示1 <= board.length == board[i].length <= 100

輸入一定遵循井字棋規則

例子輸入: board = [「oox」,「xxo」,"ox "]

輸出: 「pending」

解釋: 沒有玩家獲勝且仍存在空位

解題我的思路:分別按行、列、雙對角線遍歷,需要四個大迴圈,如果迴圈過程中發現了' '的存在,為pending,否則為draw,同時打破當前迴圈。

class

solution

(object):

deftictactoe

(self, board)

:"""

:type board: list[str]

:rtype: str

"""p_d =

"draw"

#行遍歷

for x in

range

(len

(board)):

for y in

range

(len

(board)):

if board[x]

[y]==

' ':

p_d =

"pending"

y =0break

if board[x][0

]== board[x]

[y]:

continue

else

: y =

0break

if y ==

len(board)-1

:return board[x][0

]#列遍歷

for y in

range

(len

(board)):

for x in

range

(len

(board)):

if board [x]

[y]==

' ':

x =0break

if board[0]

[y]== board[x]

[y]:

continue

else

: x =

0break

if x ==

len(board)-1

:return board[0]

[y]#對角線

for x in

range

(len

(board)):

if board[0]

[0]==

' ':

x =0break

if board[x]

[x]== board[0]

[0]:

continue

else

: x =

0break

if x ==

len(board)-1

:return board[0]

[0]#副對角線

for x in

range

(len

(board)):

if board[0]

[-1]

==' '

: x =

0break

if board[x][-

1-x]

== board[0]

[-1]

:continue

else

: x =

0break

if x ==

len(board)-1

:return board[0]

[-1]

return p_d

大神的解題:

class

solution

:def

tictactoe

(self, board: list[

str])-

>

str:

n =len(board)

defcheck

(c):

s = c * n

return

any(

(any

(row == s for row in board)

,any

(col == s for col in

map(

''.join,

zip(

*board)))

,all

(board[i]

[i]== c for i in

range

(n))

,all

(board[i]

[n - i -1]

== c for i in

range

(n))))

if check(

'x')

:return

'x'if check(

'o')

:return

'o'if

' 'in

''.join(board)

:return

'pending'

return

'draw'

這裡簡單講一下區別:

1、實際上也是檢查行列跟對角線,但是人家是一次檢查一行,而我是一次檢查乙個格仔。

2、函式內套函式(我完全沒有這個想法)

3、join函式的使用來檢查空格的存在

4、any跟all函式的使用,將我的四個大迴圈全部歸在return中,極大的節省了篇幅跟閱讀難度

5、輸入為list,所以row還是比較好理解的,重點是col,先利用zip函式得到豎列的打包,再利用了join函式變成字串。

膜拜膜拜,對不起,我實在太菜了!

井字棋遊戲

三連棋遊戲 兩人輪流在印有九格方盤上劃 或 o 字,誰先把三個同一記號排成橫線 直線 斜線,即是勝者 程式提供隨機演算法和智慧型演算法兩種ai,隨機演算法使用隨機數隨意選擇棋盤上的位置,智慧型演算法通過對每隔落子位置權重的計算,選取最優的落子點。include include include inc...

井字棋遊戲

井字棋,英文名叫tic tac toe,是一種在3 3格仔上進行的連珠遊戲,和五子棋類似,由於棋盤一般不畫邊框,格線排成井字故得名。遊戲需要的工具僅為紙和筆,然後由分別代表o和x的兩個遊戲者輪流在格仔裡留下標記 一般來說先手者為x 任意三個標記形成一條直線,則為獲勝。py100天day7 井字棋這個...

python井字棋 用python井字棋

上篇文章 python 井字棋 文本版 上 電腦端下棋策略是隨機的,有哪些位置可下棋,就隨機選擇乙個位置 實際中是不存這麼傻的對手的,賦予電腦乙個正常的智商還是很有必要的 至少當對手下一步要贏了,我們應該馬上堵住哪個位置 如果電腦自己能贏了,那就應該下能夠贏的位置 如果雙方都贏不了,那就找乙個比較好...