为什么当我没有调用另一个函数时调用了另一个函数的一部分?

时间:2021-03-13 13:55:16

标签: python-3.x function

board = ["-", "-", "-", "-", "-", "-", "-", "-", "-"]

def input_moveX(): #tictactoe move X
    position = (input("Place your mark X:")) #user input
    position = int(position) - 1
    board[position] = "X"
    display_boardX()

def display_boardX():
    print(board[0] + " | " + board[1] + " | " + board[2] + " | ")
    print(board[3] + " | " + board[4] + " | " + board[5] + " | ")
    print(board[6] + " | " + board[7] + " | " + board[8] + " | ")
    winner()
    print('Catch')


def input_moveY():
    position = (input("Place your mark O:"))
    position = int(position) - 1
    board[position] = "O"
    display_boardY()


def display_boardY():
    print(board[0] + " | " + board[1] + " | " + board[2] + " | ")
    print(board[3] + " | " + board[4] + " | " + board[5] + " | ")
    print(board[6] + " | " + board[7] + " | " + board[8] + " | ")
    while board[0] or board[1] or board[2] or board[3] or board[4] or board[5] or board[6] or board[7] or board[8] != "-":
        input_moveX() #input X again



def winner():
    if board[0] == board[1] == board[2] == "X" or board[3] == board[4] == board[5] == "X" or board[6] == board[7] == board[8] == "X":
        print('X is the winner!!!')
    else:
        while board[0] or board[1] or board[2] or board[3] or board[4] or board[5] or board[6] or board[7] or board[8] != "-":
            input_moveY() 

#call fxn 开始游戏 input_moveX()

#Catch 打印后直接进入 while 条件

2 个答案:

答案 0 :(得分:0)

董事会最初是["-", "-", "-", "-", "-", "-", "-", "-", "-"]

input_moveX() 处开始程序,该程序要求用户输入。假设用户选择位置 1

董事会变成["X", "-", "-", "-", "-", "-", "-", "-", "-"]

display_boardX() 被调用,它打印板,然后调用 winner() 函数。第一个 if 条件失败,因为位置 0、1 和 2 并不都等于“X”。位置 3、4 和 5 以及位置 6、7 和 8 也是如此。因此输入 else,进入 while 循环。

据我所知,完全可以预期进入 while 循环。

答案 1 :(得分:0)

调试后,将while改成if后,我意识到再次执行其他定义的问题是因为我错过了函数内函数的概念- 第二个 fxn 应该“回家”到它的母函数,该函数有一个后续命令,导致该命令执行与第二个 fxn 被触发并“回家”的次数相同的次数。 :)

谢谢指导。