Python:为什么我的if语句正常工作?

时间:2017-11-01 08:09:03

标签: python if-statement

我试图创建一个非常简单的tictactoe游戏。

我有这个if语句似乎按我的意愿工作:

#Defining the board. 3 rows with 3 cells
board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

#Player icons
p1_icon = "X"
p2_icon = "O"

#Player input
p1_input_row = 0
p1_input_cell = 0
p2_input_row = 0
p2_input_cell = 0
#Player input text
p1_turn = "Player 1's turn: "
p2_turn = "Player 2's turn: "

#String for invalid answer
invalid = "Invalid answer! Try again."

#Function for printing the board
def print_board():
    print("-------")
    print("|" + str(board[0][0]) + "|" + str(board[0][1]) + "|" + str(board[0][2]) + "|")
    print("-------")
    print("|" + str(board[1][0]) + "|" + str(board[1][1]) + "|" + str(board[1][2]) + "|")
    print("-------")
    print("|" + str(board[2][0]) + "|" + str(board[2][1]) + "|" + str(board[2][2]) + "|")
    print("-------")

#Main game-loop
while True:
    #Player 1's turn
    print(p1_turn)
    p1_input_row = int(input("Row: "))
    #Check player 1's input
    if p1_input_row == 1 or 2 or 3:
        p1_input_cell = int(input("Cell: "))
        if p1_input_cell == 1 or 2 or 3:
            board[(p1_input_row - 1)][(p1_input_cell - 1)] = p1_icon
            print_board()
        else:
            print(invalid)
    elif p1_input_row == 4:
        print("WTF")
    else:
        print(invalid)
    break

我想检查玩家(p1_input_row)是否选择1到3之间的行。如果是,那么程序应该要求玩家选择一个单元格:p1_input_cell = int(input("Cell: "))。如果玩家没有选择1到3之间的行,则显示错误消息。同样的if语句适用于p1_input_cell

例如,当我写4时,会显示错误消息dosn&t。程序要求提供单元格。那是为什么?

1 个答案:

答案 0 :(得分:2)

测试:

p1_input_row == 1 or 2 or 3

始终返回True,因为Python对此的解释与您预期的不同:

Python中的所有非零值都被解释为Trueor语句将每个实体相对于p1_input_row

进行比较

它将代码解释为:

p1_input_row == 1 or True or True 

您应该按如下方式重写测试:

if p1_input_row == 1 or p1_input_row == 2 or p1_input_row == 3:

OR

if p1_input_row in [1, 2, 3]:
    # do something
相关问题