如何在python中找到所有可能的tic-tac趾板布局?
我正试图找出所有可能的tic-tac-toe板布局。 然后将它们添加到html模板中。 我的代码在底部。 我使用递归和迭代两种方法制作了大约五个不同的版本。 但它们都因某种原因而失败。 无论是堆栈溢出、跳过布局还是神秘地崩溃,它们都没有按预期运行。 如果有人知道,请告诉我我做错了什么。 大约过了几个小时,我就准备放弃了 如果有人想知道我为什么要做这么奇怪的事情,我需要用html和css来制作tic-tac-toe。这是我唯一能想到的方法。 谢谢,谢谢,谢谢如何在python中找到所有可能的tic-tac趾板布局?,python,html,loops,recursion,tic-tac-toe,Python,Html,Loops,Recursion,Tic Tac Toe,我正试图找出所有可能的tic-tac-toe板布局。 然后将它们添加到html模板中。 我的代码在底部。 我使用递归和迭代两种方法制作了大约五个不同的版本。 但它们都因某种原因而失败。 无论是堆栈溢出、跳过布局还是神秘地崩溃,它们都没有按预期运行。 如果有人知道,请告诉我我做错了什么。 大约过了几个小时,我就准备放弃了 如果有人想知道我为什么要做这么奇怪的事情,我需要用html和css来制作tic-tac-toe。这是我唯一能想到的方法。 谢谢,谢谢,谢谢 import itertools im
import itertools
import sys
sys.setrecursionlimit(10000)
templateFile = open('template.html','r')
template = templateFile.read()
templateFile.close()
def hasWon(row):
for player in ['x','o']:
if (row[0] == player) & (row[1] == player) & (row[2] == player):
return [True,player]
if (row[3] == player) & (row[4] == player) & (row[5] == player):
return [True,player]
if (row[6] == player) & (row[7] == player) & (row[8] == player):
return [True,player]
if (row[0] == player) & (row[3] == player) & (row[6] == player):
return [True,player]
if (row[1] == player) & (row[4] == player) & (row[7] == player):
return [True,player]
if (row[2] == player) & (row[5] == player) & (row[8] == player):
return [True,player]
return [False,player]
def getTurn(turnN):
if turnN % 2 == 0:
return 'o'
else:
return 'x'
def doPages(row, turnN):
global template
curpage = template
print "row:" + ''.join(row)
for i in range(1,10):
tempRow = row
if row[i-1] == '-': #Cell is empty
tempRow[i-1] = getTurn(turnN)
print "tr: %s, turnN %d, i: %d" % (''.join(tempRow),turnN,i)
curpage = curpage.replace('(page'+str(i)+')', ''.join(tempRow)+'.html')
#doPages(tempRow, turnN+1)
if row[i-1] == 'x': #Cell is full. Invalid
curpage = curpage.replace('(page'+str(i)+')', '')
curpage = curpage.replace('(style'+str(i)+')', 'background-color:red;')
if row[i-1] == 'o': #Cell is full. Invalid
curpage = curpage.replace('(page'+str(i)+')', '')
curpage = curpage.replace('(style'+str(i)+')', 'background-color:blue;')
doPages(tempRow, turnN+1)
curpage = curpage.replace('(turn)', 'Turn: %d (%s)' % (turnN, getTurn(turnN)))
if hasWon(row)[0]:
curpage = curpage.replace('<!--won-->', '<h1>%s has won</h1>' % hasWon(row)[1])
page = open('game/'+''.join(row)+'.html','w+')
page.write(curpage)
page.close()
return
doPages(list(['-'] * 9),0)
print "Done"
使所有可能的全板,你可以做
import itertools
player = ['O', 'X']
itertools.product(player, repeat = 9)
然后使用列表理解将每一块板塑造成3x3块板
[[i[0:3],i[3:6],i[6:10]] for i in itertools.product(player, repeat = 9)]
结果
[[('O', 'O', 'O'), ('O', 'O', 'O'), ('O', 'O', 'O')],
[('O', 'O', 'O'), ('O', 'O', 'O'), ('O', 'O', 'X')],
... etc]
常设问题:
如上所述,你应该坐下来想一个更聪明的方法来做这件事。暴力强迫有很多问题,只列出了其中的一些。你必须考虑到未完成的棋盘和移动顺序。恐怕我不理解你问题的大部分HTML部分。但是,如果您只是想找到一种方法来获取所有可能包含x、o或连字符的长度为9的列表,那么您可以执行
allPossibleBoards=list(itertools.product(“xo-”,repeat=9))
您正在尝试这样做吗?我认为这个问题的含义是,除了生成所有板,还需要以这样一种方式来完成,即您可以将每个状态与其所有可能的子状态关联起来,这样您就可以创建一种“选择您自己的冒险”目录结构。因此,仅仅按排序顺序生成所有板状态是不够的。
[[('O', 'O', 'O'), ('O', 'O', 'O'), ('O', 'O', 'O')],
[('O', 'O', 'O'), ('O', 'O', 'O'), ('O', 'O', 'X')],
... etc]