2017-02-24 90 views
0

我設法讓2個玩家輪流玩,但在第二個玩家輸入她的答案後停止。我想做While循環,但是我很認真地跑出了想法。我把它放在腦海裏,就像我希望兩個玩家一直玩,直到0或3的位置被填滿,但是把它放在代碼中,我真的需要幫助。如何使用while循環滿足許多條件?#

下面是我的病情,但我希望它繼續詢問玩家,直到這些條件都滿足

if list1[0,1,2] == 'x': 
print ('Congrats! x won!') 
elif (list1 [0] , list2 [0] , list3[0]) == 'x': 
print ('Congrats! x won!') 
elif (list1 [0] , list2 [1], list3[2]) == 'x': 
print ('Congrats! x won!') 
elif (list2 [0] , list2 [1], list2[2])== 'x': 
print ('Congrats! x won!') 
elif (list3 [0] , list3 [0], list3[0]) == 'x': 
print ('Congrats! x won!') 
elif (list1 [1] , list2 [1], list3[1]) == 'x': 
print ('Congrats! x won!') 
elif (list1 [2] , list2 [2], list3[2]) == 'x': 
print ('Congrats! x won!') 
elif (list1 [0] , list2 [1], list3[0]) == 'x': 
print ('Congrats! x won!') 
elif (list1 [1] , list2 [1], list3[1]) == 'x': 
print ('Congrats! x won!') 
elif (list1 [2] , list2 [2], list3[2]) == 'x': 
print ('Congrats! x won!') 
elif (list1 [0] , list2 [0], list3[0]) == 'x': 
print ('Congrats! x won!') 
elif (list1[0,1,2] == 'o':) 
print ('Congrats! o won!') 
elif (list1 [0] , list2 [0] ,list3[0]) == 'o': 
print ('Congrats! o won!') 
elif (list1 [0] , list2 [1], list3[2]) == 'o': 
print ('Congrats! o won!') 
elif (list2 [0] , list2 [1], list2[2]) == 'o': 
print ('Congrats! o won!') 
elif (list3 [0] , list3 [0], list3[0]) == 'o': 
print ('Congrats! o won!') 
elif (list1 [1] , list2 [1], list3[1]) == 'o': 
print ('Congrats! o won!') 
elif (list1 [2] , list2 [2], list3[2]) == 'o': 
print ('Congrats! o won!') 
elif (list1 [0] , list2 [1], list3[0]) == 'o': 
print ('Congrats! o won!') 
elif (list1 [1] , list2 [1], list3[1]) == 'o': 
print ('Congrats! o won!') 
elif (list1 [2] , list2 [2], list3[2]) == 'o': 
print ('Congrats! o won!') 
elif (list1 [0] , list2 [0], list3[0]) == 'o': 
print ('Congrats! o won!') 
else 
+0

等待,是一個井字棋有3列,而你檢查是否有人贏了? –

+0

你的任何條件都不會是真的,因爲你正在比較不同的對象。我建議你看看[python教程](https://docs.python.org/2/tutorial/) –

+0

是的,我使用了3個列表。 list1,list2和list3 – sarah

回答

2

它會更容易讓你的板爲3只列出一個清單(每個3元)。

隨着allany,就可以避免許多不必要的重複:

board = [['x', None, 'o'], 
     ['o', 'x', None], 
     ['o', None, 'x'] 
     ] 


def three_in_row(board, player): 
    return any(all(board[j][i] == player for i in range(3)) for j in range(3)) 


def three_in_column(board, player): 
    return any(all(board[i][j] == player for i in range(3)) for j in range(3)) 


def three_in_diagonal(board, player): 
    return all(board[i][i] == player for i in range(3)) or\ 
     all(board[i][2 - i] == player for i in range(3)) 


print three_in_row(board, 'x') 
# False 
print three_in_column(board, 'x') 
# False 
print three_in_diagonal(board, 'x') 
# True 
0

試試這個:

def check_line(line): 
    if line[0]==line[1] and line[1]==line[2]: 
     return line[0] 
    return ' ' 

def check_win(board): 
    #check horizontals 
    for row in board: 
     res=check_line(row) 
     if res != ' ': 
      return res 

    #check verticals 
    x=0 
    for col in board[0]: 
     res=check_line([board[y][x] for y in range(0, 3)]) 
     x+=1 
     if res != ' ': 
      return res 

    #check diagonals 
    for diagonal in ([board[0][0], board[1][1], board[2][2]], [board[0][2], board[1][1], board[2][0]]): 
     res = check_line(diagonal) 
     if res != ' ': 
      return res 

    return ' ' 

def show_winner(list1, list2, list3): 
    winner=check_win([list1, list2, list3]) 
    if winner!=" ": 
     print("Congrats! {0} won!".format(winner)) 

list1=['o', 'x', 'x'] 
list2=['o', 'x', ' '] 
list3=['x', 'o', ' '] 
show_winner(list1, list2, list3) 
相關問題