2013-03-07 120 views
-3
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 

所以,如果我們使用:我想了解什麼是錯我的3on1功能

test1=('O',' ',' ',' ','O',' ',' ',' ','O') 

test2=(' ',' ',' ','X',' ',' ',' ',' ',' ') 

應該還給我,determina_vencedor(test1) - >'O'determina_vencedor(test2) - >False

所有test2很好,問題是它在test2處給我"'O', function vencedor_diagonal at 0x0000000002C29A48"

怎麼啦?幫我弄清楚!

+2

好主人。這個...... – 2013-03-07 17:37:12

回答

3

你想返回結果你的函數,而不是函數本身。或者說,因爲所有的函數返回要麼TrueFalse,要返回True如果函數返回True

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 

,或者您可以使用any()來測試所有功能:

def determina_vencedor(t): 
    return any(f(t) for f in (vencedor_coluna, vencedor_linha, vencedor_diagonal)) 
+0

它的工作原理!非常感謝,現在我只有一個問題。我想determina_vencedor(TEST1)返回「O」,而不是「O」和真正的 – wankinglemur 2013-03-07 17:37:13

+0

@wankinglemur:你的功能*打印*''O'',他們不歸還。在代替TRUE; *這種情況下,回''O'' *和調整你的'determina_vencedor()'返回返回*一些真實的事情*第一個函數的返回值。 – 2013-03-07 17:42:12

+0

非常感謝,現在我知道更多的蟒蛇因爲你。豎起大拇指! – wankinglemur 2013-03-07 17:43:47

相關問題