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