Python:函数返回bool和整数元组

时间:2017-10-06 13:44:18

标签: python python-2.7 2d-games

在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

3 个答案:

答案 0 :(得分:0)

你可以通过

来做到
for (i, row) in enumerate(matrix):
    ...
    for (j, item) in row:
        ...
        if (count==number):
           return (i, j)

但是,当前的代码中存在一些问题。

  • 你有两个退货声明。我不认为这可以返回(0,0),因为它是
  • 您计算矩阵中X的总数。你不会检查他们是否排成一行

答案 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 ?