BC110 井字棋
描述
KiKi和BoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。
输入描述:
三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。
输出描述:
如果KiKi获胜,输出“KiKi wins!”;
如果BoBo获胜,输出“BoBo wins!”;
如果没有获胜,输出“No winner!”。
示例1
输入:
K O BO K BB O K
输出:
KiKi wins!
解法一:
"""
n n n 0 1 2
m m m 0 1 2
j j j 0 1 2
"""
n = input().split() # 列表n
m = input().split() # 列表m
j = input().split() # 列表j
if n[0] == m[1] == j[2] == 'K' or n[2] == m[1] == j[0] == 'K': # 正对角线 和 反对角线
print('KiKi wins!')
elif n[0] == m[1] == j[2] == 'B' or n[2] == m[1] == j[0] == 'B': # 正对角线 和 反对角线
print('BoBo wins!')
elif n[0] == n[1] == n[2] == 'K' or m[0] == m[1] == m[2] == 'K' or j[0] == j[1] == j[2] == 'K' or n[0] == m[0] == j[
0] == 'K' or n[1] == m[1] == j[1] == 'K' or n[2] == m[2] == j[2] == 'K': # 正三行 和 竖三列
print('KiKi wins!')
elif n[0] == n[1] == n[2] == 'B' or m[0] == m[1] == m[2] == 'B' or j[0] == j[1] == j[2] == 'B' or n[0] == m[0] == j[
0] == 'B' or n[1] == m[1] == j[1] == 'B' or n[2] == m[2] == j[2] == 'B': # 正三行 和 竖三列
print('BoBo wins!')
else:
print('No winner!')
解法二:
"""
解题思路:
1.巧妙的运用了行列规则的列表中的下标
2.列表的切片技巧,切成每行是1个元素,每列是1个元素,切2对角线
3.运用-1作为结束的标志,平局
4.巧妙的利用字典的键作为谁赢的标志,然后输出键值。
5.总结:巧妙运用切片、字典键值。。。
K O B
O K B
B O K
B O B
O B B
B O K
"""
lines = []
for i in range(3):
lines.extend(input().split()) # extend在已存在的列表末尾一次性添加新的列表内容
# ['K', 'O', 'B', 'O', 'K', 'B', 'B', 'O', 'K']
# lines.append(input().split()) # append() 方法用于在列表末尾添加新的对象。
# [['K', 'O', 'B'], ['O', 'K', 'B'], ['B', 'O', 'K']]
# print(lines)
lk = ["K", "K", "K"]
lb = ["B", "B", "B"]
dict_winner = {"K": "KiKi wins!", "B": "BoBo wins!"}
m = [lines[0:3], lines[3:6], lines[6:9], lines[0::3], lines[1::3], lines[2::3], lines[0::4], lines[2:8:2], -1]
"""
[['B', 'O', 'B'], ['O', 'B', 'B'], ['B', 'O', 'K'], ['B', 'O', 'B'], ['O', 'B', 'O'], ['B', 'B', 'K'], ['B', 'B', 'K'], ['B', 'B', 'B'], -1]
[0:3] 取1-2 第一行
[3:6] 取3-5 第二行
[6:9] 取6-8 第三行
[0::3] 从0开始 第一列
[1::3] 从1开始 第二列
[2::3] 从2开始 每隔3个切片取值 第三列
[0::4] 从0开始 每隔4个切片取值 正对角
[2:8:2] 从2-8 每隔2个切片取值 反对角
"""
for i in m:
if i == lk or i == lb:
print(dict_winner[i[0]]) # i[0]表示输出序列索引i对应的列表第1个值,当作键传给字典,获取字典值
break
elif i == -1: # 遍历结束标志符,遇到-1 表示遍历结束,未找到
print("No winner!")
解析:
略、参考代码注释
20211129