Drawing a checkerboard in Python

19,381

Solution 1

You should be doing % 20 because your indices are multiples of 10.

Here's a simpler approach with one pair of nested loops:

offset_x = 10      # Distance from left edge.
offset_y = 10      # Distance from top.
cell_size = 10     # Height and width of checkerboard squares.

for i in range(8):             # Note that i ranges from 0 through 7, inclusive.
    for j in range(8):           # So does j.
        if (i + j) % 2 == 0:       # The top left square is white.
            color = 'white'
        else:
            color = 'black'
        canvas.setFill(color)
        canvas.drawRect(offset_x + i * cell_size, offset_y + j * cell_size,
                        cell_size, cell_size)

Solution 2

My go at it, in case may be usefull to someone:

import matplotlib.pyplot as plt
import numpy as np

def Checkerboard(N,n):
    """N: size of board; n=size of each square; N/(2*n) must be an integer """
    if (N%(2*n)):
        print('Error: N/(2*n) must be an integer')
        return False
    a = np.concatenate((np.zeros(n),np.ones(n)))
    b=np.pad(a,int((N**2)/2-n),'wrap').reshape((N,N))
    return (b+b.T==1).astype(int)

B=Checkerboard(600,30)
plt.imshow(B)
plt.show()
Share:
19,381
GopherTech
Author by

GopherTech

Updated on June 04, 2022

Comments

  • GopherTech
    GopherTech almost 2 years

    I am trying to write a Python program which uses a graphics.py file and creates a checkerboard (like a chess board) with 64 squares alternating black and white. However, I am not able to get anything printed.

    Here is my code so far. Please feel free to tear down the whole code or make any changes.

    from graphics import GraphicsWindow
    
    win = GraphicsWindow(400,400)
    canvas = win.canvas()
    
    for j in range(10, 90, 10):
        for j in range(10, 90, 20):
            if j % 2 == 1:
                for i in 10, 30, 50, 70:
                    canvas.setFill("black")
                    canvas.drawRect(i, j, 10, 10)
        else:
            for i in 20, 40, 60, 80:
                canvas.setFill("white")
                canvas.drawRect(i, j, 10, 10)