在Python(V2.7)中,我尝试针对计算机播放器制作ConnectFour游戏。我已经找到了一个简单的函数来连续找到4个(确定游戏结束)并返回TRUE,如果是这样,现在我尝试使用相同的函数来定位行中的任何3个并返回位置。
def finder(matrix, player,number):
for row in matrix:
count = 0
for item in row:
if item == player:
count +=1
if count == number:
return True
else:
count = 0
我可以输入:finder(board," X",4)以确定连续四个是否为TRUE或仍然默认为FALSE(并且此操作正常)。现在我想尝试这样的事情:
def finder(matrix, player,number):
for row in matrix:
count = 0
for item in row:
if item == player:
count +=1
if count == number:
return True
location = row, item
return location
else:
count = 0
然而,这会调用我尚未初始化位置的错误,因此我设置location = 0,0。现在它只返回TRUE和元组(0,0)。如何让它连续给出3的最后一个元素的位置?
编辑:我尝试过返回三元组:TRUE,row,item。但是,问题的第二部分是当函数为TRUE时如何获取行和列号?以下代码可以识别存在威胁,但是如果存在威胁,我无法找到获取威胁位置的方法。
if finder(board, "X", 3) is True:
horizontal_threat = True
print row, item
答案 0 :(得分:0)
你可以通过
来做到for (i, row) in enumerate(matrix):
...
for (j, item) in row:
...
if (count==number):
return (i, j)
但是,当前的代码中存在一些问题。
答案 1 :(得分:0)
由于@Kevin在上述评论中指定的原因,您的第二份退货声明未被执行。
你需要写下你的陈述
return True, location
和你打电话的finder
你需要做的事情
found, values = finder(board, "X", 3)
答案 2 :(得分:0)
# Complete, working, Python 3 solution
def finder(matrix, player, number):
location = None
for row in matrix:
count = 0
for item in row:
if item == player:
count +=1
if count == number:
location = row, item
break
else:
count = 0
return location
matrixMain = [ [1, 0, 0, 0], [2, 2, 2, 2], [1, 0, 0, 0], [1, 0, 0, 0] ]
for itemToFind in range( 1, 3 ):
locationFound = finder( matrixMain, itemToFind, 3 )
if locationFound is None:
print( "item {} not found".format( itemToFind ) )
else:
rowFound = locationFound[0]
itemFound = locationFound[1]
print( "found item {}".format( itemFound ) )
# Is forcing users to indent code by four spaces really the best Stackoverflow can do ?