NameError:未定义名称“ board1”

时间:2019-11-12 20:40:21

标签: python

def initialize_board():

    board1 = ['*', '*', '*']
    board2 = ['*', '*', '*']
    board3 = ['*', '*', '*']

    print(board1)
    print(board2)
    print(board3)

    return board1
    return board2
    return board3

因此我在第一个功能中为井字游戏初始化了我的板子

然后我有这个功能:

import random

def input_choice():

    initialize_board()


    player_1 = input('What is your name?')
    player_2 = input('What is your name?')

    #See who goes first

    player_1_choice = input('Choose heads or tales')
    player_2_choice = input('Choose head or tales')

    if random.choice(['heads', 'tales']) == player_1_choice:
        print(f'{player_1} goes first!')
    else:
        print(f'{player_2} goes first1')

    placements = {1 : board1[0], 2 : board1[1], 3 : board1[2], 4 : board2[0], 5 : board2[1], 6 : board2[2], 7 : board3[0], 8 : board3[1], 9: board3[2]}

    print(board1)

但是我收到一个错误消息,说在第一个函数中定义了board1时未定义。

NameError                                 Traceback (most recent call last)
<ipython-input-30-dd18b3b6beab> in <module>
----> 1 input_choice()

<ipython-input-29-1ebcf8044e68> in input_choice()
     19         print(f'{player_2} goes first1')
     20 
---> 21     placements = {1 : board1[0], 2 : board1[1], 3 : board1[2], 4 : board2[0], 5 : board2[1], 6 : board2[2], 7 : board3[0], 8 : board3[1], 9: board3[2]}
     22 
     23     print(board1)
NameError: name 'board1' is not defined

3 个答案:

答案 0 :(得分:1)

定义两个不同的函数时,它们的局部变量存在于不同的作用域中。因此,initialize_board()中的局部变量对函数input_choice()是不可见的,直到您返回其中任何一个值。

要注意的另一件事是,当您到达initialize_board()中的第一个return语句时,即达到return board_1时,该函数从字面上将 returns 控制到从它被称为。因此,您实际上从未到达另外两个return语句。

您如何解决此问题?

在一条语句中返回所有三个变量,如下所示:

def initialize_board(): 
    # your code
    return board_1, board_2, board_3

现在在调用方函数中,将这些返回值分配给input_choice()函数局部的其他变量。

def input_choice():

    # these variables do not have to have the same name as the variables being returned.
    # So b1, b2, b3 = initialize_board() is also a valid statement
    # these variables are local to this function
    board_1, board_2, board_3 = initialize_board()
    ...
    # rest of your code

答案 1 :(得分:0)

您的initialize_board函数未正确返回电路板,并且您的input_choice函数未查看返回值。 board1正文中的input_choice没有任何值,这就是为什么尝试访问它时会出错的原因。

更改您的initialize_board以返回所有三行:

return board1, board2, board3

,然后在input_choice中确保调用initialize_board时实际上已检索到这些值:

board1, board2, board3 = initialize_board()

答案 2 :(得分:0)

board1是一个变量,作用域是您的initialize_board函数。您需要将input_choice中的initialize_board的返回值设置为变量,然后使用它。您也将无法在initialize_board中的三行上返回。也许将这三个列表放入字典中,然后在您的initialize_board函数中返回。