我正在一个项目中,我会生成所有可能的井字游戏数组。作为概念证明,我正在研究用9个子数组填充数组的代码。每个子数组都有两个值,第一个为0或1(分别用于x和o),第二个为1到9(表示放置时间)。 我想了解的数组示例如下:
[[0, 0], [1, 1], [0, 2], [1, 3], [0, 4], [1, 5], [0, 6], [1, 7], [0, 8]]
我已经使用9个for循环编写了代码,每个循环嵌套在上面的循环中,这给了我想要的结果(每个可能的数组,每个循环都是唯一的)。但是我试图使用递归编写代码,并避免编写大量嵌套循环。
当我运行下面的代码时,它只能生成上面的数组,而不能创建其他组合。我的代码如下:
print("running...")
allGames = []
checkCurrentGame = [5, 5, 5, 5, 5, 5, 5, 5, 5]
stepsDown = 0
def cleanGame(move, currentGame):
for j in range(9):
if (currentGame[j][1] >= move):
currentGame[j] = [5, 0]
def completeMove(moveNumber, currentGame):
global stepsDown
stepsDown = stepsDown + 1
for i in range(9):
cleanGame(moveNumber, currentGame)
if (currentGame[i][0] == 5):
currentGame[i][0] = i % 2
currentGame[i][1] = moveNumber
allGames.append(currentGame)
break
if (stepsDown < 9):
generateGame(currentGame)
def generateGame(currentGame):
for i in range(9):
completeMove(i, currentGame)
generateGame([[5, 0], [5, 0], [5, 0], [5, 0], [5, 0], [5, 0], [5, 0], [5, 0], [5, 0]])
for x in range(len(allGames)):
print(allGames[x])
答案 0 :(得分:2)
如果我正确理解了您的问题,则应该这样做,但这不是递归-
import itertools
[zip(p, range(0, 9)) for p in itertools.product([0, 1], repeat=9)]
代码首先生成一个木板(9个0或1个)-
itertools.product([0, 1], repeat=9)
,然后向其中添加索引数据。
我建议您看看itertools
答案 1 :(得分:0)
我建议您在YouTube上观看this video。教授对递归非常好教。我认为它将为您带来更多好处,然后获得有效的代码。他以数独为例,但两个游戏都是2D阵列。
如果您观看了视频,您将知道如何修改此示例以更好地满足您的需求。 伪代码:
def place(who, when, where, table):
if (None, None) not in table: # the table is full
print(table)
return
if table[where] not (None, None): # this cell is already marked
return
table[where] (who, when) # can place our mark on the cell
# make the recursive calls
for i in range(9):
place(who.opponent, when+1, i, table)
for cell in range(9):
empty = [(None, None) for _ in range(9)]
place(firstplayer, 0, cell, empty)
答案 2 :(得分:0)
这很有趣。这是一种玩游戏的方法,它会分出每一个可能的动作(或无论如何,这都是本意)。
尽管我通常倾向于合并并返回纯结果,以允许及早退出和检查,但此递归累积在全局变量中。
"""
rs[2002]
=> ([[0, 0], [1, 1], [-1, -1],
[-1, -1], [1, 5], [0, 2],
[0, 4], [1, 3], [-1, -1]], 97, 146)
x--
---
---
xo-
---
---
xo-
--x
---
xo-
--x
-o-
xo-
--x
xo-
xo-
-ox
xo-
"""
输出:
table = df.pivot_table(values='LoanAmount', index='Self_Employed' ,columns='Education', aggfunc=np.median)
def fage(x):
return table.loc[x['Self_Employed'],x['Education']]
#Replacing missing values
df['LoanAmount'].fillna(df[df['LoanAmount'].isnull()].apply(fage,axis=1),inplace =True)