Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我想了解我的3on1函数有什么问题_Python - Fatal编程技术网

Python 我想了解我的3on1函数有什么问题

Python 我想了解我的3on1函数有什么问题,python,Python,因此,如果我们使用: def vencedor_linha(t): if (t[0]=='X' and t[1] and t[2]=='X') or (t[3]=='X' and t[4]=='X' and t[5]=='X') or (t[6]=='X' and t[7]=='X' and t[8]=='X'): print("'X'") return True elif (t[0]=='O' and t[1] and t[2]=='O') o

因此,如果我们使用:

def vencedor_linha(t):
    if (t[0]=='X' and t[1] and t[2]=='X') or (t[3]=='X' and t[4]=='X'  and t[5]=='X') or (t[6]=='X' and t[7]=='X' and t[8]=='X'):
        print("'X'")
        return True
    elif (t[0]=='O' and t[1] and t[2]=='O') or (t[3]=='O' and t[4]=='O'  and t[5]=='O') or (t[6]=='O' and t[7]=='O' and t[8]=='O'):
        print("'O'")
        return True
    else:
        return False

def vencedor_coluna(t):
    if (t[0]=='X' and t[3] and t[6]=='X') or (t[1]=='X' and t[4]=='X'  and t[7]=='X') or (t[2]=='X' and t[5]=='X' and t[8]=='X'):
        print("'X'")
        return True
    elif (t[0]=='O' and t[3] and t[6]=='O') or (t[1]=='X' and t[4]=='O'  and t[7]=='O') or (t[2]=='O' and t[5]=='O' and t[8]=='X'):
        print("'O'")
        return True
    else:
        return False

def vencedor_diagonal(t):   
   if (t[0]=='X' and t[4] and t[8]=='X') or (t[6]=='X' and t[4]=='X'  and t[2]=='X'):
        print("'X'")
        return True
   elif (t[0]=='O' and t[4] and t[8]=='O') or (t[6]=='X' and t[4]=='O'  and t[2]=='O'):
        print("'O'")
        return True
   else:
        return False

def determina_vencedor(t):
    if vencedor_coluna(t):
        return vencedor_coluna
    elif vencedor_linha(t):
        return vencedor_linha
    elif vencedor_diagonal(t):
        return vencedor_diagonal
    else:
        return False

它应该返回我,
determina\u vencedor(test1)
->
'O'
determina\u vencedor(test2)
->
False

对于
test2
,一切正常,问题是它在test2处给了我
“'O',函数vencedor_对角线0x0000000002C29A48”

怎么了?!帮我弄清楚

您希望返回函数的结果,而不是函数本身。或者更确切地说,由于所有函数都返回
True
False
,因此如果函数返回
True
,则需要返回
True

test2=(' ',' ',' ','X',' ',' ',' ',' ',' ')
这可以组合成一个循环:

def determina_vencedor(t):
    if vencedor_coluna(t):
        return True

    if vencedor_linha(t)
        return True

    if vencedor_diagonal(t)
        return True

    return False
或者,您可以使用来测试所有功能:

def determina_vencedor(t):
    for func in (vencedor_coluna, vencedor_linha, vencedor_diagonal):
        if func(t):
            return True
    return False

它起作用了!非常感谢,现在我只有一个问题。我希望determina_vencedor(test1)返回'O'而不是'O'和True@wankinglemur:您的函数打印
'O'
,但不返回它。在这种情况下,返回
'O'
而不是
True
,并调整
determina\u vencedor()
以返回第一个返回True的函数的返回值。非常感谢,现在我对python有了更多的了解,因为我知道了u。竖起大拇指!
def determina_vencedor(t):
    for func in (vencedor_coluna, vencedor_linha, vencedor_diagonal):
        if func(t):
            return True
    return False
def determina_vencedor(t):
    return any(f(t) for f in (vencedor_coluna, vencedor_linha, vencedor_diagonal))