Credit: Problem written by Chris Piech
Handouts: Graphics Reference
We are going to create 1000 circles in random positions on the screen. Circles closer to the bottom-left corner will be blue and circles closer to the top-right corner will be green. This is an example of return values.
Each circle is 20 pixels by 20 pixels.
Note every circle is drawn fully on the canvas.
The time.sleep(0.002) function call waits 2 milliseconds between drawing circles.
"""
File: half_green.py
-------------------
Draws circles randomly, where circles in the top-right half are green
and circles in the bottom-left half are blue.
"""
from graphics import Canvas
import random
import time
# The size of the canvas
CANVAS_WIDTH = 500
CANVAS_HEIGHT = 500
# The diameter of each circle
CIRCLE_SIZE = 20
# The number of circles to draw
NUM_CIRCLES = 1000
def main():
canvas = Canvas(CANVAS_WIDTH, CANVAS_HEIGHT)
canvas.set_canvas_title("Half Green")
# Draw 1000
for i in range(NUM_CIRCLES):
x = random.randint(0, canvas.get_canvas_width() - CIRCLE_SIZE)
y = random.randint(0, canvas.get_canvas_height() - CIRCLE_SIZE)
circle = canvas.create_oval(x, y, x + CIRCLE_SIZE, y + CIRCLE_SIZE)
# Set both the fill and outline color to be either green or blue
canvas.set_color(circle, get_color(x, y))
canvas.update()
time.sleep(0.002)
canvas.mainloop()
def get_color(x, y):
"""
Returns the name of the color the circle with top-left coordinate (x, y)
should have. Since (0, 0) is the top-left corner of the canvas, x increases
as we go to the right, and y increases as we go down. So the line y = x is
the diagonal line from top-left to bottom right. If y < x, the dot is above
this line (in the top-right corner), so it's green. If y >= x, the dot is at
or below this line (in the bottom-left corner, so it's blue.
"""
if x > y:
return "green"
return "blue"
if __name__ == "__main__":
main()