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
答案 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函数中返回。