Фон
Я пытался создать шахматную доску в модуле PIL и получил общий шаблон для первых двух рядов, но не могу понять, как применить это ко всей доске.Как видите, я создал изображение:
from PIL import Image
img = Image.new("RGB", (15,15), "white") # create a new 15x15 image
pixels = img.load() # create the pixel map
Мое решение для первых двух строк
Примечание. Я все еще изучаю Python, поэтому этот код может показаться очень неэффективным, но я чувствую, чтосвободно предлагать улучшения.
Второй ряд:
Код:
black_2 = []
for i in range(img.size[0]):
if i % 2 == 0:
black_2.append(i)
Это дает мне все горизонтальные позиции указателя на том, куда поместить черный пиксель.Поэтому для созданной мной доски 15x15 возвращается [0, 2, 4, 6, 8, 10, 12, 14]
Первая строка:
Код:
Затем я использую вторую строку для определения горизонтального индексапозиции для первой строки
black_1 = [i-1 for i in black_2 if i > 0]
if img.size[0] % 2 == 0: # 'that' if statement
black_1.append(img.size[0]-1)
Для созданной мной доски пикселей 15x15 возвращается [1, 3, 5, 7, 9, 11, 13]
.Я создал оператор if, потому что понял, что последний черный пиксель не отображается, если доска имеет четную длину, и это, похоже, исправило ее.
Изменение пикселей на черный:
# hardcoded to check patterns
for i in black_1:
pixels[i,0] = (0,0,0)
for k in black_2:
pixels[k,1] = (0,0,0)
img.show()
Как я могу применить оба шаблона к остальной части платы, независимо от ее размера?
Я подозреваю, что необходим цикл for var in range()
, но я не уверен, как он изменится в зависимости от того, является ли высота (img.size[1]
) платы нечетной или четной.
Общая схема на данный момент:
![Chessboard](https://i.stack.imgur.com/ianpQ.png)
black_1
применяется к первому ряду
black_2
применяется ко второму ряду