IndexError: строковый индекс вне диапазона учебника Конвея по игре в жизнь - PullRequest
0 голосов
/ 16 января 2020

Я следую учебному пособию (из https://automatetheboringstuff.com/2e/chapter4/) для текстовой версии игры жизни Конвея, и я изложил ее в точности так, как говорится в учебнике, и она все еще создает ошибку IndexError:

сообщение об ошибке выглядит следующим образом:

print(currentCells[x][y], end='')

IndexError: строковый индекс выходит за пределы диапазона

Моя цель состоит в том, чтобы поместить пробел, пока ячейки «живы» ( отвечая определенным требованиям) и #, когда они «мертвы» (отвечающие другим требованиям), я запутался, почему учебник, даже если я копирую его непосредственно из него, ошибается. учебник для python 3.8

весь блок кода выглядит следующим образом:

while True:
print('\n\n\n\n\n')
currentCells = copy.deepcopy(nextCells)
for y in range(HEIGHT):
    for x in range(WIDTH):
        print(currentCells[x][y], end='')
    print()
for x in range(WIDTH):
    for y in range(HEIGHT):
        leftCoord = (x - 1) % WIDTH
        rightCoord = (x + 1) % WIDTH
        aboveCoord = (y - 1) % HEIGHT
        belowCoord = (y + 1) % HEIGHT
        numNeighbors = 0
        if currentCells[leftCoord][aboveCoord] == '#':
            numNeighbors += 1
        if currentCells[x][aboveCoord] == '#':
            numNeighbors += 1
        if currentCells[rightCoord][aboveCoord] == '#':
            numNeighbors += 1
        if currentCells[leftCoord][y] == '#':
            numNeighbors += 1
        if currentCells[rightCoord][y] == '#':
            numNeighbors += 1
        if currentCells[leftCoord][belowCoord] == '#':
            numNeighbors += 1
        if currentCells[x][aboveCoord] == '#':
            numNeighbors += 1
        if currentCells[rightCoord][belowCoord] == '#':
            numNeighbors += 1

        if currentCells[x][y] == '#' and (numNeighbors == 2 or numNeighbors == 3):
            nextCells[x][y] = '#'
        elif currentCells[x][y] == ' ' and numNeighbors == 3:
            nextCells[x][y] = '#'
        else:
            nextCells[x][y] = ' '
    time.sleep(1)

Я новичок в кодировании, поэтому я попытался закомментировать строки, но, конечно, это просто делает другие части, которые используют эти функции, непригодными для использования. также другие вопросы по этой теме c, похоже, касаются гораздо более продвинутых версий этой игры. Как я уже сказал, это одна из моих первых программ.

...