如何使用While循环满足多种条件?#

时间:2017-02-24 09:54:27

标签: python list if-statement while-loop

我设法让2名玩家轮流玩,但在第2名玩家进入她的回答后停止了。我想做While循环然而我认真地想出了如何。我想到这就像我希望两个玩家继续玩,直到0或X的3个位置被填满但是把它放在代码中我真的需要帮助。

以下是我的情况,但我希望它继续询问玩家,直到满足这些条件

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

2 个答案:

答案 0 :(得分:3)

将您的电路板作为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

答案 1 :(得分: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)