我注意到,当我在该start()函数中使用“ global board”这一行时,最终在执行时遇到以下错误。当我删除它时,我不会!
但是我似乎需要全局定义才能使代码正常工作,否则无法识别电路板。我该怎么办?
print(board[i][j] + " ", end = " ")
TypeError: 'NoneType' object is not subscriptable
这是代码:
def start():
global board
board = create_board()
print_board()
def print_board():
global board
print(" 1 2 3 4 5")
print(" ---------------")
ch = "A"
for i in range(0, 5):
print(ch, "|", end = " ")
for j in range(0, 5):
print(board[i][j] + " ", end = " ")
print()
ch = chr(ord(ch) + 1)
print()
def create_board():
global board
m = 'M'
r = 'R'
board = [[r, r, r, r, m],
[r, r, r, r, r],
[r, r, m, r, r],
[r, r, r, r, r],
[m, r, r, r, r]]
start()
答案 0 :(得分:0)
您的问题是您将电路板分配为等于函数返回的值,但是您没有从函数返回任何值。
该函数按如下方式分配全局板变量:
board = [[r, r, r, r, m],
[r, r, r, r, r],
[r, r, m, r, r],
[r, r, r, r, r],
[m, r, r, r, r]]
但是您的函数什么也不返回(无):
def create_board():
global board
m = 'M'
r = 'R'
board = [[r, r, r, r, m],
[r, r, r, r, r],
[r, r, m, r, r],
[r, r, r, r, r],
[m, r, r, r, r]]
# ends without returning anything..
然后将“ None”分配给板,撤消create_board函数对板所做的操作:
board = create_board() # create_board = None/nothing!
稍后,在发生错误的行中,board = None
您应该只运行“ create_board()”或让create_board返回该值,而不是仅仅对其进行修改。为什么不应该使用全局变量的另一个很好的例子...
在类似set_board
之类的函数中,您也会遇到其他错误。