井字游戏,有时也被称为“进攻和防守”,是一个两人玩家(X和O)轮流标志着3×3的网格的空间的连珠游戏。最先在任意一条直线(水平线,垂直线或对角线)上成功连接三个标记的一方获胜。
但我们不去玩这个游戏。你将是这个游戏的裁判。你被赋予游戏的结果,以及你必须判断游戏是平局还是有人胜出,以及谁将会成为最后的赢家。如果X玩家获胜,返回“X”。如果O玩家获胜,返回“O”。如果比赛是平局,返回“D”。
游戏的结果是作为字符串形式的列表,其中“X”和“O”是玩家的标志,“.”是空格。
输入: 游戏结果作为字符串形式的列表(Unicode)。
输出: “X”,“O”或“D”作为字符串形式。
自己写的代码,繁琐。纯便利。。
def checkio(a):
k=0
for i in range(len(a)):
if a[0][i] == a[1][i] == a[2][i] == 'X' :
return "X"
else: k+=1
if a[0][i] == a[1][i] == a[2][i] == 'O' :
return "O"
else: k+=1
if a[i][0] == a[i][1] == a[i][2] == 'X' :
return "X"
else: k+=1
if a[i][0] == a[i][1] == a[i][2] == 'O' :
return "O"
else: k+=1
if a[0][0] == a[1][1] == a[2][2] == "X":
return "X"
else: k+=1
if a[0][0] == a[1][1] == a[2][2] == "O":
return "O"
else: k+=1
if a[0][2] == a[1][1] == a[2][0] == "X":
return "X"
else: k+=1
if a[0][2] == a[1][1] == a[2][0] == "O":
return "O"
else: k+=1
if k == 16 :
return "D"
by gyahun_dash
def checkio(result):
rows = result
cols = map(''.join, zip(*rows))
diags = map(''.join, zip(*[(r[i], r[2 - i]) for i, r in enumerate(rows)]))
lines = rows + list(cols) + list(diags)
return 'X' if ('XXX' in lines) else 'O' if ('OOO' in lines) else 'D'
将横的一行,总共三行存在rows;
三列存在cols里;
斜的两组:(r是result中元素的遍历,比如分别取XXX,X.O ,XOO)
r[0] r[2]
r[1] r[1]
r[2] r[0]
经过zip函数变成两个元组(r[0],r[1],r[2])和(r[2],r[1],r[0])
然后转换成list在将行列斜的三组组合在一起,从中找有没有XXX或者000,如果都没有的话,返回D。
另外一种by DanielDou
def checkio(board):
# First we put everything together into a single string
x = "".join(board)
# Next we outline the 8 possible winning combinations.
combos = ["012", "345", "678", "036", "147", "258", "048", "246"]
# We go through all the winning combos 1 by 1 to see if there are any
# all Xs or all Os in the combos
for i in combos:
if x[int(i[0])] == x[int(i[1])] == x[int(i[2])] and x[int(i[0])] in "XO":
return x[int(i[0])]
return "D"
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
join()方法语法:
str.join(sequence)
以下实例展示了join()的使用方法:
str = “-“;
seq = (“a”, “b”, “c”); # 字符串序列
print str.join( seq );
以上实例输出结果如下:
a-b-c
其中的思想是把list中的3个元素“”.join()转换成一个新的字符串。
然后列出可能的赢的组合。036 147 258……