Мое определение глобальной переменной сбрасывается на None - PullRequest
0 голосов
/ 05 января 2019

Я заметил, что когда в этой функции 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()

1 Ответ

0 голосов
/ 05 января 2019

Ваша проблема в том, что вы назначаете board равным тому, что возвращает ваша функция, но вы ничего не возвращали из своей функции.

Функция назначает глобальную переменную платы следующим образом:

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 = Нет

Вы должны просто запустить "create_board ()" или заставить create_board возвращать значение, а не просто изменять его. Еще один прекрасный пример того, почему глобальные переменные не должны использоваться ...

Вы также можете столкнуться с другими ошибками в подобных функциях, таких как set_board.

...