我试图创建一个非常简单的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。程序要求提供单元格。那是为什么?
答案 0 :(得分:2)
测试:
p1_input_row == 1 or 2 or 3
始终返回True
,因为Python对此的解释与您预期的不同:
Python中的所有非零值都被解释为True
。
or
语句将每个实体相对于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