python-3.x - 我如何在更大的列表中搜索列表而不考虑顺序?
问题描述
这是我第一次尝试井字游戏的副本。我有三周的经验。只要选择按时间顺序进行,我的代码就可以工作,但如果不按顺序进行,将无法识别获胜者。我可以就如何在更大的列表中找到一个列表(无论顺序如何)提供一些反馈。此外,该程序对我来说似乎效率不高。有什么建议么?
var_board = ['1__','2__','3__','4__','5__','6__','7__','8__','9__']
x_list = []
o_list = []
def board():
print(var_board[0] + var_board[1] + var_board[2])
print(var_board[3] + var_board[4] + var_board[5])
print(var_board[6] + var_board[7] + var_board[8])
##Check to see horizontal win
def horizontal():
if(set([0,1,2]).issubset(set(x_list))):
print("***We have a winner***")
elif (set([3,4,5]).issubset(set(x_list))):
print("***We have a winner***")
elif (set([6,7,8]).issubset(set(x_list))):
print("***We have a winner***")
else:
quit
##Check to see vertical win
def vertical():
if(set([0,3,6]).issubset(set(x_list))):
print("***We have a winner***")
elif (set([1,4,7]).issubset(set(x_list))):
print("***We have a winner***")
elif (set([2,5,8]).issubset(set(x_list))):
print("***We have a winner***")
else:
quit
##Check to see diagonal win
def diagonal():
if(set([2,4,6]).issubset(set(x_list))):
print("***We have a winner***")
elif (set([0,4,8]).issubset(set(x_list))):
print("***We have a winner***")
else:
quit
##Game play
board()
while True:
## "X" winning positions
position = int(input("To make your move, choose a number 1-9: "))-1
var_board[position] = "X "
x_list.append(int(position))
print("X list: ",x_list)
board()
horizontal()
##"O" winning positions
position = int(input("To make your move, choose a number 1-9: "))-1
var_board[position] = "O "
o_list.append(int(position))
print("O list: ",o_list)
board()
horizontal()
解决方案
你似乎有一个o_list
永远无法获胜的问题?我会将您的检查条件更改为。
horizontal_wins = [ set([0, 1, 2]), set([3, 4, 5]), set([6, 7, 8]) ]
def horizontal(plays):
return any( row.issubset(plays) for row in horizontal_wins ):
我认为这是一种改进,因为它接受 play 作为参数,而不是全局变量。这意味着它可以同时适用于 x_plays 和 o_plays。
horizontal(x_list) #checks if x won.
horizontal(o_list) #checks if y won.
另一个改进,它只创建一次水平集。在这个程序中,集合是如此之小,它没有任何区别。
最后的改进,它返回结果。它不打印任何东西或决定游戏,它只是告诉调用者条件已经满足。这样做的原因是为了在主游戏循环中保持控制。
while True:
## "X" winning positions
position = int(input("To make your move, choose a number 1-9: "))-1
var_board[position] = "X "
x_list.append(int(position))
print("X list: ",x_list)
board()
x_wins = horizontal(x_list)
if x_wins:
print("x won!")
break # end game.
##"O" winning positions
position = int(input("To make your move, choose a number 1-9: "))-1
var_board[position] = "O "
o_list.append(int(position))
print("O list: ",o_list)
board()
o_wins = horizontal(o_list)
if o_wins:
print("o wins!")
break
推荐阅读
- ajax - 如何在 ASP.NET MVC 中调用第二个 ActionResult 而无需等待第一个 ActionResult 完成
- git - 为什么 git 忽略我在 /etc/ssh/ssh_known_hosts 中的 SSH 密钥?
- python - 如何在使用 matplotilib.dates 时定义自定义刻度数
- c++ - 无法在 Linux 上使用 GCC 运行 C++17 并行算法
- webpack - NodeJs,expressJs:webpack 错误:TypeError:mocha.useColors is not a function at configureMocha
- swiftui - 将 emptyText 发送到服务 SwiftUI
- c++ - 全局变量和 constexpr(内联与否?)
- tensorflow - 如何使用 Tensorflow V.2.4 RTX 2070 Super Ubuntu 18.04 安装 Cuda 10.1
- r - 仅使用“R CMD check”检查示例和测试文件
- c# - 连接 char 数组时意外 \u0000 insted 为 '0'