Игра Tic-Tac-Toe Python, как работает итерация для циклов? - PullRequest
0 голосов
/ 01 сентября 2018

Код:

NUM_SQUARES = 9
EMPTY = " "

def new_board():
    board = []
    for square in range(NUM_SQUARES):
        board.append(EMPTY)

    return board

Справка:

Я читал этот кусок кода для игры «Крестики-нолики». Я не понимаю цикл for в функции new_board().

Мое понимание:

Итак, в первой части кода я понимаю, что есть две константы для: числа квадратов на доске и пустого квадрата на доске. В функции создается пустой список, в который будут добавлены пустые строки для представления пустых квадратов.

Я понимаю, что in range(NUM_SQUARES): означает, что он будет повторять код под ним 9 раз. Поэтому он добавит девять пустых строк в качестве элементов в списке.

Что я не получаю:

1) Для чего назначена переменная square?

2) Для чего нужна эта переменная square?

3) Почему мы обычно говорим i в for i in range()? (в общем)

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Это интересный механизм для создания списка, который будет использоваться для отображения состояния доски для игры в крестики-нолики. Я начну с ответа на ваш третий вопрос и начну с него.

3) i - сокращение от «index» при использовании в классической структуре цикла for. В Python циклы, основанные на индексах, обычно используются, когда вам нужен доступ к самому фактическому индексу (например, у вас есть что-то, что вам нужно для выполнения действия над array_member[i]). Вы можете написать цикл как for index in range(), если он более явный / имеет больший смысл; для языка не имеет значения, какое имя вы выберете для индексной переменной.

2) Основываясь на том, что мы рассмотрели в # 3, цель переменной square в этом контексте - выступать в качестве индекса для списка board, по которому мы итерируем. Соглашение об именовании square чаще всего встречается при использовании цикла for-each, где, по-видимому, у вас уже будет список squares, по которому вы перебираете:

for square in list_of_squares:
    if square == 'X':
        # Do something, etc.

1) На основании всего этого переменная square начинается с присвоенного ей 0. После первой итерации цикла он становится равным 1, затем 2 и т. Д., Пока не достигнет предела, заданного диапазоном (в данном случае NUM_SQARES или 9). Стоит отметить, что функция range не включает указанную границу, поэтому этот цикл будет выполняться от 0 до 8, что дает в общей сложности 9 «квадратов» в массиве.

0 голосов
/ 01 сентября 2018

1) Как вы упомянули, in range(NUM_SQUARES) означает, что команды в цикле будут выполняться NUM_SQUARES раза. При первом выполнении square будет равно 0. Затем 1, 2 и т. Д. Это значение не используется, поэтому вы могли написать for i in range(NUM_SQUARES). Часто, когда вам не нужен индекс цикла, вы пишете for _ in range(NUM_SQUARES).

2) Переменная явно не нужна, но вам просто нужно указать некоторую переменную. Вот как работают циклы в python.

3) i, j, k часто используется для целых чисел в программировании, математике, физике и т. Д. Я считаю, что именно поэтому мы выбираем «i» вместо чего-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...